From 5f2ffd0089944312ed3443a55e9d0cfc0b6cd847 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 24 Dec 2016 18:52:09 +0100 Subject: [PATCH 001/114] Multi thread AS search --- .../decompiler/flash/DecompilerPool.java | 154 ++++ .../com/jpexs/decompiler/flash/RetryTask.java | 4 + .../src/com/jpexs/decompiler/flash/SWF.java | 158 ++-- .../decompiler/flash/cache/AS2Cache.java | 69 ++ .../decompiler/flash/cache/AS3Cache.java | 52 ++ .../flash/cache/ScriptDecompiledListener.java | 27 + .../flash/configuration/Configuration.java | 6 +- .../jpexs/decompiler/flash/iggy/IggyFile.java | 487 +++++++------ .../flash/iggy/IggyFlashHeader32.java | 30 + .../flash/iggy/IggyFlashHeader64.java | 56 +- .../flash/iggy/IggyFontBinInfo.java | 13 +- .../jpexs/decompiler/flash/iggy/IggySwf.java | 685 +++++++++--------- .../flash/iggy/conversion/IggySwfBundle.java | 229 +++--- .../flash/locales/AppResources_ca.properties | 2 + .../src/com/jpexs/decompiler/graph/Graph.java | 4 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 26 + .../decompiler/flash/gui/abc/ABCPanel.java | 61 +- .../flash/gui/player/FlashPlayerPanel.java | 3 +- 18 files changed, 1277 insertions(+), 789 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS3Cache.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java new file mode 100644 index 000000000..4d9968cf4 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.ScriptInfo; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class DecompilerPool { + + private final ThreadPoolExecutor executor; + + public DecompilerPool() { + int threadCount = Configuration.getParallelThreadCount(); + executor = new ThreadPoolExecutor(threadCount, threadCount, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>()); + } + + public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { + Future f = executor.submit(new Callable() { + @Override + public HighlightedText call() throws Exception { + Thread.sleep(10000); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + writer.startFunction("!script"); + src.getActionScriptSource(writer, actions); + writer.endFunction(); + + HighlightedText result = new HighlightedText(writer); + SWF swf = src.getSwf(); + if (swf != null) { + swf.as2Cache.put(src, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }); + + return f; + } + + public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { + Future f = executor.submit(new Callable() { + @Override + public HighlightedText call() throws Exception { + int scriptIndex = pack.scriptIndex; + ScriptInfo script = null; + if (scriptIndex > -1) { + script = pack.abc.script_info.get(scriptIndex); + } + boolean parallel = Configuration.parallelSpeedUp.get(); + Thread.sleep(10000); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); + + HighlightedText result = new HighlightedText(writer); + SWF swf = pack.getSwf(); + if (swf != null) { + swf.as3Cache.put(pack, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }); + + return f; + } + + public String getStat() { + return "core: " + executor.getCorePoolSize() + + " size: " + executor.getPoolSize() + + " largest: " + executor.getLargestPoolSize() + + " max: " + executor.getMaximumPoolSize() + + " active: " + executor.getActiveCount() + + " count: " + executor.getTaskCount() + + " completed: " + executor.getCompletedTaskCount(); + } + + public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { + Future future = submitTask(src, actions, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public HighlightedText decompile(ScriptPack pack) throws InterruptedException { + Future future = submitTask(pack, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public void shutdown() throws InterruptedException { + executor.shutdown(); + if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/RetryTask.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/RetryTask.java index 71830400f..09716f2c6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/RetryTask.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/RetryTask.java @@ -42,6 +42,10 @@ public class RetryTask { } catch (InterruptedException ex) { throw ex; } catch (Exception ex) { + if (handler == null) { + throw ex; + } + switch (handler.handle(ex)) { case AbortRetryIgnoreHandler.ABORT: throw ex; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 6ec2550ed..b53ab0c6a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -36,7 +36,6 @@ import com.jpexs.decompiler.flash.abc.avm2.model.StringAVM2Item; import com.jpexs.decompiler.flash.abc.types.ConvertData; import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.abc.types.Multiname; -import com.jpexs.decompiler.flash.abc.types.ScriptInfo; import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitClass; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; @@ -70,6 +69,9 @@ import com.jpexs.decompiler.flash.action.swf5.ActionNewMethod; import com.jpexs.decompiler.flash.action.swf5.ActionNewObject; import com.jpexs.decompiler.flash.action.swf5.ActionSetMember; import com.jpexs.decompiler.flash.action.swf7.ActionDefineFunction2; +import com.jpexs.decompiler.flash.cache.AS2Cache; +import com.jpexs.decompiler.flash.cache.AS3Cache; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.dumpview.DumpInfoSwfNode; @@ -156,6 +158,7 @@ import com.jpexs.decompiler.graph.model.LocalData; import com.jpexs.helpers.ByteArrayRange; import com.jpexs.helpers.Cache; import com.jpexs.helpers.Helper; +import com.jpexs.helpers.ImmediateFuture; import com.jpexs.helpers.NulStream; import com.jpexs.helpers.ProgressListener; import com.jpexs.helpers.SerializableImage; @@ -187,6 +190,7 @@ import java.util.Map; import java.util.Random; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; import java.util.zip.DeflaterOutputStream; @@ -338,13 +342,12 @@ public final class SWF implements SWFContainerItem, Timelined { private final Cache soundCache = Cache.getInstance(false, false, "sound"); @Internal - private final Cache as2PcodeCache = Cache.getInstance(true, true, "as2pcode"); + public final AS2Cache as2Cache = new AS2Cache(); @Internal - private final Cache as2Cache = Cache.getInstance(true, false, "as2"); + public final AS3Cache as3Cache = new AS3Cache(); - @Internal - private final Cache as3Cache = Cache.getInstance(true, false, "as3"); + private static final DecompilerPool decompilerPool = new DecompilerPool(); public static List swfSignatures = Arrays.asList( "FWS", // Uncompressed Flash @@ -395,7 +398,6 @@ public final class SWF implements SWFContainerItem, Timelined { swfList.swfs.clear(); } - as2PcodeCache.clear(); as2Cache.clear(); as3Cache.clear(); frameCache.clear(); @@ -2543,7 +2545,6 @@ public final class SWF implements SWFContainerItem, Timelined { } public void clearScriptCache() { - as2PcodeCache.clear(); as2Cache.clear(); as3Cache.clear(); IdentifiersDeobfuscation.clearCache(); @@ -2582,31 +2583,71 @@ public final class SWF implements SWFContainerItem, Timelined { public static void uncache(ASMSource src) { if (src != null) { SWF swf = src.getSwf(); - swf.as2Cache.remove(src); - swf.as2PcodeCache.remove(src); + if (swf != null) { + swf.as2Cache.remove(src); + } } } public static void uncache(ScriptPack pack) { if (pack != null) { - pack.getSwf().as3Cache.remove(pack); + SWF swf = pack.getSwf(); + if (swf != null) { + swf.as3Cache.remove(pack); + } } } public static boolean isCached(ASMSource src) { - return src.getSwf().as2Cache.contains(src); + if (src != null) { + SWF swf = src.getSwf(); + if (swf != null) { + return swf.as2Cache.isCached(src); + } + } + + return false; } public static boolean isCached(ScriptPack pack) { - return pack.getSwf().as3Cache.contains(pack); + if (pack != null) { + SWF swf = pack.getSwf(); + if (swf != null) { + return swf.as3Cache.isCached(pack); + } + } + + return false; + } + + public static HighlightedText getFromCache(ASMSource src) { + if (src != null) { + SWF swf = src.getSwf(); + if (swf != null) { + return swf.as2Cache.get(src); + } + } + + return null; + } + + public static HighlightedText getFromCache(ScriptPack pack) { + if (pack != null) { + SWF swf = pack.getSwf(); + if (swf != null) { + return swf.as3Cache.get(pack); + } + } + + return null; } public static ActionList getCachedActionList(ASMSource src, final List listeners) throws InterruptedException { synchronized (src) { SWF swf = src.getSwf(); int deobfuscationMode = Configuration.autoDeobfuscate.get() ? 1 : 0; - if (swf != null && swf.as2PcodeCache.contains(src)) { - ActionList result = swf.as2PcodeCache.get(src); + if (swf != null && swf.as2Cache.isPcodeCached(src)) { + ActionList result = swf.as2Cache.getPcode(src); if (result.deobfuscationMode == deobfuscationMode) { return result; } @@ -2625,7 +2666,7 @@ public final class SWF implements SWFContainerItem, Timelined { list.fileData = actionBytes.getArray(); list.deobfuscationMode = deobfuscationMode; if (swf != null) { - swf.as2PcodeCache.put(src, list); + swf.as2Cache.put(src, list); } return list; @@ -2638,49 +2679,68 @@ public final class SWF implements SWFContainerItem, Timelined { } } - public static HighlightedText getFromCache(ASMSource src) { - SWF swf = src.getSwf(); - if (swf.as2Cache.contains(src)) { - return swf.as2Cache.get(src); - } - - return null; - } - public static HighlightedText getCached(ASMSource src, ActionList actions) throws InterruptedException { SWF swf = src.getSwf(); - if (swf.as2Cache.contains(src)) { - return swf.as2Cache.get(src); + HighlightedText res; + if (swf != null) { + res = swf.as2Cache.get(src); + if (res != null) { + return res; + } } - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - writer.startFunction("!script"); - src.getActionScriptSource(writer, actions); - writer.endFunction(); - - HighlightedText res = new HighlightedText(writer); - swf.as2Cache.put(src, res); - return res; + return decompilerPool.decompile(src, actions); } public static HighlightedText getCached(ScriptPack pack) throws InterruptedException { SWF swf = pack.getSwf(); - if (swf.as3Cache.contains(pack)) { - return swf.as3Cache.get(pack); + HighlightedText res; + if (swf != null) { + res = swf.as3Cache.get(pack); + if (res != null) { + return res; + } } - int scriptIndex = pack.scriptIndex; - ScriptInfo script = null; - if (scriptIndex > -1) { - script = pack.abc.script_info.get(scriptIndex); - } - boolean parallel = Configuration.parallelSpeedUp.get(); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); - HighlightedText res = new HighlightedText(writer); - swf.as3Cache.put(pack, res); + return decompilerPool.decompile(pack); + } - return res; + public static Future getCachedFuture(ASMSource src, ActionList actions, ScriptDecompiledListener listener) throws InterruptedException { + SWF swf = src.getSwf(); + HighlightedText res; + if (swf != null) { + res = swf.as2Cache.get(src); + if (res != null) { + if (listener != null) { + listener.onComplete(res); + } + + return new ImmediateFuture<>(res); + } + } + + return decompilerPool.submitTask(src, actions, listener); + } + + public static Future getCachedFuture(ScriptPack pack, ScriptDecompiledListener listener) throws InterruptedException { + SWF swf = pack.getSwf(); + HighlightedText res; + if (swf != null) { + res = swf.as3Cache.get(pack); + if (res != null) { + if (listener != null) { + listener.onComplete(res); + } + + return new ImmediateFuture<>(res); + } + } + + return decompilerPool.submitTask(pack, listener); + } + + public DecompilerPool getDecompilerPool() { + return decompilerPool; } public Cache getRectCache() { @@ -2898,7 +2958,8 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - if (removeDependencies) { + { + if (removeDependencies) { removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); } else { @@ -2907,6 +2968,7 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); } } + } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java new file mode 100644 index 000000000..a5f90b90d --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.cache; + +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.helpers.Cache; + +/** + * + * @author JPEXS + */ +public class AS2Cache { + + private final Cache cache = Cache.getInstance(true, false, "as2"); + + private final Cache pcodeCache = Cache.getInstance(true, true, "as2pcode"); + + public void clear() { + pcodeCache.clear(); + cache.clear(); + } + + public boolean isCached(ASMSource src) { + return cache.contains(src); + } + + public boolean isPcodeCached(ASMSource src) { + return pcodeCache.contains(src); + } + + public HighlightedText get(ASMSource src) { + return cache.get(src); + } + + public ActionList getPcode(ASMSource src) { + return pcodeCache.get(src); + } + + public void put(ASMSource src, HighlightedText text) { + cache.put(src, text); + } + + public void put(ASMSource src, ActionList actionList) { + pcodeCache.put(src, actionList); + } + + public void remove(ASMSource src) { + if (src != null) { + cache.remove(src); + pcodeCache.remove(src); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS3Cache.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS3Cache.java new file mode 100644 index 000000000..0b8a998a7 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS3Cache.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.cache; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.helpers.Cache; + +/** + * + * @author JPEXS + */ +public class AS3Cache { + + private final Cache cache = Cache.getInstance(true, false, "as3"); + + public void clear() { + cache.clear(); + } + + public boolean isCached(ScriptPack pack) { + return cache.contains(pack); + } + + public HighlightedText get(ScriptPack pack) { + return cache.get(pack); + } + + public void put(ScriptPack pack, HighlightedText text) { + cache.put(pack, text); + } + + public void remove(ScriptPack pack) { + if (pack != null) { + cache.remove(pack); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java new file mode 100644 index 000000000..b97c2ab0e --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.cache; + +/** + * + * @author JPEXS + */ +@FunctionalInterface +public interface ScriptDecompiledListener { + + public void onComplete(T result); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index 3d23ec52f..dd6edc47c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -57,7 +57,7 @@ import javax.swing.JOptionPane; * * @author JPEXS */ -public class Configuration { +public final class Configuration { private static final String CONFIG_NAME = "config.bin"; @@ -83,7 +83,7 @@ public class Configuration { @ConfigurationDefaultInt(10) @ConfigurationCategory("decompilation") - public static final ConfigurationItem parallelSpeedUpThreadCount = null; + private static final ConfigurationItem parallelSpeedUpThreadCount = null; @ConfigurationDefaultBoolean(false) @ConfigurationCategory("script") @@ -926,7 +926,7 @@ public class Configuration { } public static Map getConfigurationFields() { - Field[] fields = Configuration.class.getFields(); + Field[] fields = Configuration.class.getDeclaredFields(); Map result = new HashMap<>(); for (Field field : fields) { if (ConfigurationItem.class.isAssignableFrom(field.getType())) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFile.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFile.java index 80f1c1d89..6c84f4eca 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFile.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFile.java @@ -1,244 +1,243 @@ -package com.jpexs.decompiler.flash.iggy; - -import com.jpexs.decompiler.flash.iggy.streams.DataStreamInterface; -import com.jpexs.decompiler.flash.iggy.streams.IggyIndexBuilder; -import com.jpexs.decompiler.flash.iggy.streams.RandomAccessFileDataStream; -import com.jpexs.decompiler.flash.iggy.streams.ReadDataStreamInterface; -import com.jpexs.decompiler.flash.iggy.streams.SeekMode; -import com.jpexs.decompiler.flash.iggy.streams.StructureInterface; -import com.jpexs.decompiler.flash.iggy.streams.TemporaryDataStream; -import com.jpexs.decompiler.flash.iggy.streams.WriteDataStreamInterface; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - * - * Based of works of somebody called eternity. - * - */ -public class IggyFile implements StructureInterface { - - final static Logger LOGGER = Logger.getLogger(IggyFile.class.getName()); - - private File originalFile; - private IggyHeader header; - private List subFileEntries = new ArrayList<>(); - private List subFileEntriesData = new ArrayList<>(); - - private IggySwf iggySwf; - - public static final int FIRST_TAG_POSITION = 3; - - public IggySwf getSwf() { - return iggySwf; - } - - public IggyFile(String filePath) throws IOException { - this(new File(filePath)); - } - - public IggyFile(File file) throws IOException { - this.originalFile = file; - try (ReadDataStreamInterface stream = new RandomAccessFileDataStream(file)) { - readFromDataStream(stream); - } - } - - public File getOriginalFile() { - return originalFile; - } - - public IggyHeader getHeader() { - return header; - } - - public IggySubFileEntry getSubFileEntry(int entryIndex) { - if (entryIndex < 0 || entryIndex >= subFileEntries.size()) { - throw new ArrayIndexOutOfBoundsException("No entry with index " + entryIndex + " exists"); - } - return subFileEntries.get(entryIndex); - } - - public int getNumEntries() { - return subFileEntries.size(); - } - - public byte[] getEntryData(int entryIndex) { - if (entryIndex < 0 || entryIndex >= subFileEntries.size()) { - throw new ArrayIndexOutOfBoundsException("No entry with index " + entryIndex + " exists"); - } - return subFileEntriesData.get(entryIndex); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("[IggyFile:").append("\r\n"); - sb.append(header).append("\r\n"); - sb.append("Entries:").append("\r\n"); - for (IggySubFileEntry entry : subFileEntries) { - sb.append(entry).append("\r\n"); - } - sb.append("]"); - return sb.toString(); - } - - public static void extractIggyFile(File iggyFile, File extractDir) throws IOException { - final String FILENAME_FORMAT = "index%d_type%d.bin"; - IggyFile ir = new IggyFile(iggyFile); - for (int i = 0; i < ir.getNumEntries(); i++) { - IggySubFileEntry entry = ir.getSubFileEntry(i); - try (FileOutputStream fos = new FileOutputStream(new File(extractDir, String.format(FILENAME_FORMAT, i, entry.type)))) { - fos.write(ir.getEntryData(i)); - } - } - } - - public String getSwfName() { - return iggySwf.getName(); - } - - public long getSwfXMin() { - return iggySwf.getHdr().getXMin(); - } - - public long getSwfYMin() { - return iggySwf.getHdr().getYMin(); - } - - public long getSwfXMax() { - return iggySwf.getHdr().getXMax(); - } - - public long getSwfYMax() { - return iggySwf.getHdr().getYMax(); - } - - public float getSwfFrameRate() { - return iggySwf.getHdr().getFrameRate(); - } - - /** - * Removes entries of type INDEX.There can be more than one INDEX, - * continuous. This removes all ot them. - */ - public void removeIndexEntries() { - long offsetsChange = 0; - final int ENTRY_SIZE = 16; - for (int i = 0; i < subFileEntries.size(); i++) { - IggySubFileEntry entry = subFileEntries.get(i); - entry.offset += offsetsChange; - if (entry.type == IggySubFileEntry.TYPE_INDEX) { - offsetsChange = offsetsChange - entry.size - ENTRY_SIZE; - subFileEntriesData.remove(i); - subFileEntries.remove(i); - i--; - } - } - } - - public boolean updateFlashEntry() throws IOException { - - byte replacementData[]; - byte replacementIndexData[]; - IggyIndexBuilder ib = new IggyIndexBuilder(); - try (DataStreamInterface stream = new TemporaryDataStream()) { - stream.setIndexing(ib); - iggySwf.writeToDataStream(stream); - replacementData = stream.getAllBytes(); - replacementIndexData = ib.getIndexBytes(); - } catch (IOException ex) { - Logger.getLogger(IggyFile.class.getName()).log(Level.SEVERE, "Error during updating SWF", ex); - return false; - } - - long offsetsChange = 0; - for (int i = 0; i < subFileEntries.size(); i++) { - IggySubFileEntry entry = subFileEntries.get(i); - entry.offset += offsetsChange; - if (entry.type == IggySubFileEntry.TYPE_FLASH) { - long oldSize = entry.size; - long newSize = replacementData.length; - entry.size = newSize; - entry.size2 = newSize; - offsetsChange = offsetsChange + (newSize - oldSize); //entries after this one will have modified offsets - subFileEntriesData.set(i, replacementData); - } - } - - removeIndexEntries(); - IggySubFileEntry indexEntry = new IggySubFileEntry(IggySubFileEntry.TYPE_INDEX, replacementIndexData.length, replacementIndexData.length, 0 /*offset will be set automatically*/); - subFileEntries.add(indexEntry); - subFileEntriesData.add(replacementIndexData); - return true; - } - - private void parseEntries() throws IOException { - for (int i = 0; i < subFileEntries.size(); i++) { - IggySubFileEntry entry = subFileEntries.get(i); - if (entry.type == IggySubFileEntry.TYPE_FLASH) { - iggySwf = new IggySwf(new TemporaryDataStream(getEntryData(i))); - break; - } - /*if (entry.type == IggySubFileEntry.TYPE_INDEX) { - IggyIndexParser.parseIndex(true, new TemporaryDataStream(getEntryData(i)), new ArrayList<>(), new ArrayList<>()); - }*/ - } - } - - @Override - public void readFromDataStream(ReadDataStreamInterface stream) throws IOException { - header = new IggyHeader(stream); - if (!header.is64()) { - throw new IOException("32 bit iggy files are not (yet) supported, sorry"); - } - for (int i = 0; i < header.getNumSubfiles(); i++) { - subFileEntries.add(new IggySubFileEntry(stream)); - } - for (IggySubFileEntry entry : subFileEntries) { - stream.seek(entry.offset, SeekMode.SET); - byte[] entryData = stream.readBytes((int) entry.size); - subFileEntriesData.add(entryData); - } - parseEntries(); - } - - public void saveChanges() throws IOException { - updateFlashEntry(); - try (RandomAccessFileDataStream raf = new RandomAccessFileDataStream(originalFile)) { - writeToDataStream(raf); - } - } - - @Override - public void writeToDataStream(WriteDataStreamInterface stream) throws IOException { - header.writeToDataStream(stream); - - long startOffset = IggyHeader.STRUCT_SIZE + IggySubFileEntry.STRUCTURE_SIZE * subFileEntries.size(); - long currentOffset = startOffset; - - for (int i = 0; i < subFileEntries.size(); i++) { - IggySubFileEntry entry = subFileEntries.get(i); - entry.offset = currentOffset; - currentOffset += entry.size; - entry.writeToDataStream(stream); - } - - for (int i = 0; i < subFileEntries.size(); i++) { - byte[] entryData = subFileEntriesData.get(i); - stream.writeBytes(entryData); - } - - } - -} +package com.jpexs.decompiler.flash.iggy; + +import com.jpexs.decompiler.flash.iggy.streams.DataStreamInterface; +import com.jpexs.decompiler.flash.iggy.streams.IggyIndexBuilder; +import com.jpexs.decompiler.flash.iggy.streams.RandomAccessFileDataStream; +import com.jpexs.decompiler.flash.iggy.streams.ReadDataStreamInterface; +import com.jpexs.decompiler.flash.iggy.streams.SeekMode; +import com.jpexs.decompiler.flash.iggy.streams.StructureInterface; +import com.jpexs.decompiler.flash.iggy.streams.TemporaryDataStream; +import com.jpexs.decompiler.flash.iggy.streams.WriteDataStreamInterface; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + * + * Based of works of somebody called eternity. + * + */ +public class IggyFile implements StructureInterface { + + final static Logger LOGGER = Logger.getLogger(IggyFile.class.getName()); + + private File originalFile; + + private IggyHeader header; + + private List subFileEntries = new ArrayList<>(); + + private List subFileEntriesData = new ArrayList<>(); + + private IggySwf iggySwf; + + public static final int FIRST_TAG_POSITION = 3; + + public IggySwf getSwf() { + return iggySwf; + } + + public IggyFile(String filePath) throws IOException { + this(new File(filePath)); + } + + public IggyFile(File file) throws IOException { + this.originalFile = file; + try (ReadDataStreamInterface stream = new RandomAccessFileDataStream(file)) { + readFromDataStream(stream); + } + } + + public File getOriginalFile() { + return originalFile; + } + + public IggyHeader getHeader() { + return header; + } + + public IggySubFileEntry getSubFileEntry(int entryIndex) { + if (entryIndex < 0 || entryIndex >= subFileEntries.size()) { + throw new ArrayIndexOutOfBoundsException("No entry with index " + entryIndex + " exists"); + } + return subFileEntries.get(entryIndex); + } + + public int getNumEntries() { + return subFileEntries.size(); + } + + public byte[] getEntryData(int entryIndex) { + if (entryIndex < 0 || entryIndex >= subFileEntries.size()) { + throw new ArrayIndexOutOfBoundsException("No entry with index " + entryIndex + " exists"); + } + return subFileEntriesData.get(entryIndex); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("[IggyFile:").append("\r\n"); + sb.append(header).append("\r\n"); + sb.append("Entries:").append("\r\n"); + for (IggySubFileEntry entry : subFileEntries) { + sb.append(entry).append("\r\n"); + } + sb.append("]"); + return sb.toString(); + } + + public static void extractIggyFile(File iggyFile, File extractDir) throws IOException { + final String FILENAME_FORMAT = "index%d_type%d.bin"; + IggyFile ir = new IggyFile(iggyFile); + for (int i = 0; i < ir.getNumEntries(); i++) { + IggySubFileEntry entry = ir.getSubFileEntry(i); + try (FileOutputStream fos = new FileOutputStream(new File(extractDir, String.format(FILENAME_FORMAT, i, entry.type)))) { + fos.write(ir.getEntryData(i)); + } + } + } + + public String getSwfName() { + return iggySwf.getName(); + } + + public long getSwfXMin() { + return iggySwf.getHdr().getXMin(); + } + + public long getSwfYMin() { + return iggySwf.getHdr().getYMin(); + } + + public long getSwfXMax() { + return iggySwf.getHdr().getXMax(); + } + + public long getSwfYMax() { + return iggySwf.getHdr().getYMax(); + } + + public float getSwfFrameRate() { + return iggySwf.getHdr().getFrameRate(); + } + + /** + * Removes entries of type INDEX.There can be more than one INDEX, + * continuous. This removes all ot them. + */ + public void removeIndexEntries() { + long offsetsChange = 0; + final int ENTRY_SIZE = 16; + for (int i = 0; i < subFileEntries.size(); i++) { + IggySubFileEntry entry = subFileEntries.get(i); + entry.offset += offsetsChange; + if (entry.type == IggySubFileEntry.TYPE_INDEX) { + offsetsChange = offsetsChange - entry.size - ENTRY_SIZE; + subFileEntriesData.remove(i); + subFileEntries.remove(i); + i--; + } + } + } + + public boolean updateFlashEntry() throws IOException { + + byte replacementData[]; + byte replacementIndexData[]; + IggyIndexBuilder ib = new IggyIndexBuilder(); + try (DataStreamInterface stream = new TemporaryDataStream()) { + stream.setIndexing(ib); + iggySwf.writeToDataStream(stream); + replacementData = stream.getAllBytes(); + replacementIndexData = ib.getIndexBytes(); + } catch (IOException ex) { + Logger.getLogger(IggyFile.class.getName()).log(Level.SEVERE, "Error during updating SWF", ex); + return false; + } + + long offsetsChange = 0; + for (int i = 0; i < subFileEntries.size(); i++) { + IggySubFileEntry entry = subFileEntries.get(i); + entry.offset += offsetsChange; + if (entry.type == IggySubFileEntry.TYPE_FLASH) { + long oldSize = entry.size; + long newSize = replacementData.length; + entry.size = newSize; + entry.size2 = newSize; + offsetsChange = offsetsChange + (newSize - oldSize); //entries after this one will have modified offsets + subFileEntriesData.set(i, replacementData); + } + } + + removeIndexEntries(); + IggySubFileEntry indexEntry = new IggySubFileEntry(IggySubFileEntry.TYPE_INDEX, replacementIndexData.length, replacementIndexData.length, 0 /*offset will be set automatically*/); + subFileEntries.add(indexEntry); + subFileEntriesData.add(replacementIndexData); + return true; + } + + private void parseEntries() throws IOException { + for (int i = 0; i < subFileEntries.size(); i++) { + IggySubFileEntry entry = subFileEntries.get(i); + if (entry.type == IggySubFileEntry.TYPE_FLASH) { + iggySwf = new IggySwf(new TemporaryDataStream(getEntryData(i))); + break; + } + /*if (entry.type == IggySubFileEntry.TYPE_INDEX) { + IggyIndexParser.parseIndex(true, new TemporaryDataStream(getEntryData(i)), new ArrayList<>(), new ArrayList<>()); + }*/ + } + } + + @Override + public void readFromDataStream(ReadDataStreamInterface stream) throws IOException { + header = new IggyHeader(stream); + if (!header.is64()) { + throw new IOException("32 bit iggy files are not (yet) supported, sorry"); + } + for (int i = 0; i < header.getNumSubfiles(); i++) { + subFileEntries.add(new IggySubFileEntry(stream)); + } + for (IggySubFileEntry entry : subFileEntries) { + stream.seek(entry.offset, SeekMode.SET); + byte[] entryData = stream.readBytes((int) entry.size); + subFileEntriesData.add(entryData); + } + parseEntries(); + } + + public void saveChanges() throws IOException { + updateFlashEntry(); + try (RandomAccessFileDataStream raf = new RandomAccessFileDataStream(originalFile)) { + writeToDataStream(raf); + } + } + + @Override + public void writeToDataStream(WriteDataStreamInterface stream) throws IOException { + header.writeToDataStream(stream); + + long startOffset = IggyHeader.STRUCT_SIZE + IggySubFileEntry.STRUCTURE_SIZE * subFileEntries.size(); + long currentOffset = startOffset; + + for (int i = 0; i < subFileEntries.size(); i++) { + IggySubFileEntry entry = subFileEntries.get(i); + entry.offset = currentOffset; + currentOffset += entry.size; + entry.writeToDataStream(stream); + } + + for (int i = 0; i < subFileEntries.size(); i++) { + byte[] entryData = subFileEntriesData.get(i); + stream.writeBytes(entryData); + } + + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader32.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader32.java index 6006b1c6a..113bb1898 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader32.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader32.java @@ -18,64 +18,94 @@ public class IggyFlashHeader32 implements IggyFlashHeaderInterface { @IggyFieldType(DataType.uint32_t) long main_offset; // 0 Relative offset to first section (matches sizeof header) + @IggyFieldType(DataType.uint32_t) long as3_section_offset; // 4 Relative offset to as3 file names table... + @IggyFieldType(DataType.uint32_t) long unk_offset; // 8 relative offset to something + @IggyFieldType(DataType.uint32_t) long unk_offset2; // 0xC relative offset to something + @IggyFieldType(DataType.uint32_t) long unk_offset3; // 0x10 relative offset to something + @IggyFieldType(DataType.uint32_t) long unk_offset4; // 0x14 relative offset to something + @IggyFieldType(DataType.uint32_t) long xmin; //0x18 in pixels + @IggyFieldType(DataType.uint32_t) long ymin; //0x0C in pixels + @IggyFieldType(DataType.uint32_t) long xmax; // 0x20 in pixels + @IggyFieldType(DataType.uint32_t) long ymax; // 0x24 in pixels + @IggyFieldType(DataType.uint32_t) long unk_28; // probably number of blocks/objects after header + @IggyFieldType(DataType.uint32_t) long unk_2C; + @IggyFieldType(DataType.uint32_t) long unk_30; + @IggyFieldType(DataType.uint32_t) long unk_34; + @IggyFieldType(DataType.uint32_t) long unk_38; + @IggyFieldType(DataType.uint32_t) long unk_3C; + @IggyFieldType(DataType.float_t) float frameRate; + @IggyFieldType(DataType.uint32_t) long unk_44; + @IggyFieldType(DataType.uint32_t) long unk_48; + @IggyFieldType(DataType.uint32_t) long unk_4C; + @IggyFieldType(DataType.uint32_t) long names_offset; // 0x50 relative offset to the names/import section of the file + @IggyFieldType(DataType.uint32_t) long unk_offset5; // 0x54 relative offset to something + @IggyFieldType(DataType.uint64_t) long unk_58; // Maybe number of imports/names pointed by names_offset + @IggyFieldType(DataType.uint32_t) long last_section_offset; // 0x60 relative offset, points to the small last section of the file + @IggyFieldType(DataType.uint32_t) long unk_offset6; // 0x64 relative offset to something + @IggyFieldType(DataType.uint32_t) long as3_code_offset; // 0x68 relative offset to as3 code (8 bytes header + abc blob) + @IggyFieldType(DataType.uint32_t) long as3_names_offset; // 0x6C relative offset to as3 file names table (or classes names or whatever) + @IggyFieldType(DataType.uint32_t) long unk_70; + @IggyFieldType(DataType.uint32_t) long unk_74; + @IggyFieldType(DataType.uint32_t) long unk_78; // Maybe number of classes / as3 names + @IggyFieldType(DataType.uint32_t) long unk_7C; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader64.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader64.java index 6f627bb76..5c9a6f6ad 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader64.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFlashHeader64.java @@ -9,7 +9,7 @@ import java.lang.reflect.Field; /** * - * @author Jindra + * @author JPEXS * * Based of works of somebody called eternity. */ @@ -17,62 +17,91 @@ public class IggyFlashHeader64 implements IggyFlashHeaderInterface { @IggyFieldType(DataType.uint64_t) long off_base; // 0 Relative offset to first section (matches sizeof header); + @IggyFieldType(DataType.uint64_t) long off_sequence_end; // 8 Relative offset to as3 file names table... + @IggyFieldType(DataType.uint64_t) long off_font_end; // 0x10 relative offset to something + @IggyFieldType(DataType.uint64_t) long off_sequence_start1; // 0x18 relative offset to something + @IggyFieldType(DataType.uint64_t) long off_sequence_start2; // 0x20 relative offset to something + @IggyFieldType(DataType.uint64_t) long off_sequence_start3; // 0x28 names_offset; 0x50 relative pointer to the names/import section of the file + @IggyFieldType(DataType.uint32_t) long xmin; // 0x30 in pixels + @IggyFieldType(DataType.uint32_t) long ymin; // 0x34 in pixels + @IggyFieldType(DataType.uint32_t) long xmax; // 0x38 in pixels + @IggyFieldType(DataType.uint32_t) long ymax; // 0x3C in pixels + @IggyFieldType(DataType.uint32_t) - long unk_40; // probably numer of blocks/objects after header + long unk_40; // probably number of blocks/objects after header + @IggyFieldType(DataType.uint32_t) long unk_44; + @IggyFieldType(DataType.uint32_t) long unk_48; + @IggyFieldType(DataType.uint32_t) long unk_4C; + @IggyFieldType(DataType.uint32_t) long unk_50; + @IggyFieldType(DataType.uint32_t) long unk_54; + @IggyFieldType(DataType.float_t) float frame_rate; + @IggyFieldType(DataType.uint32_t) long unk_5C; + @IggyFieldType(DataType.uint64_t) long imported_guid; + @IggyFieldType(DataType.uint64_t) long my_guid; // same for some fonts (eng + chinese) + @IggyFieldType(DataType.uint64_t) long off_names; // 0x70 relative offset to the names/import section of the file - end of fonts + @IggyFieldType(DataType.uint64_t) long off_unk78; // 0x78 relative offset to something + @IggyFieldType(DataType.uint64_t) long unk80; + @IggyFieldType(DataType.uint64_t) long off_last_section; + @IggyFieldType(DataType.uint64_t) long off_flash_filename; + @IggyFieldType(DataType.uint64_t) long off_decl_strings; + @IggyFieldType(DataType.uint64_t) long off_type_of_fonts; + @IggyFieldType(DataType.uint64_t) long flags; + @IggyFieldType(DataType.uint32_t) long font_count; + @IggyFieldType(DataType.uint32_t) long zero2; @@ -87,29 +116,51 @@ public class IggyFlashHeader64 implements IggyFlashHeaderInterface { } private long base_address; + private long sequence_end_address; + private long font_end_address; + private long sequence_start_address1; + private long sequence_start_address2; + private long sequence_start_address3; + private long names_address; + private long unk78_address; + private long last_section_address; + private long flash_filename_address; + private long decl_strings_address; + private long type_fonts_address; private long base_ofs_pos; + private long sequence_end_ofs_pos; + private long font_end_ofs_pos; + private long sequence_start1_ofs_pos; + private long sequence_start2_ofs_pos; + private long sequence_start3_ofs_pos; + private long names_ofs_pos; + private long unk78_ofs_pos; + private long last_section_ofs_pos; + private long flash_filename_ofs_pos; + private long decl_strings_ofs_pos; + private long type_fonts_ofs_pos; public long getBase_ofs_pos() { @@ -389,5 +440,4 @@ public class IggyFlashHeader64 implements IggyFlashHeaderInterface { public float getFrameRate() { return frame_rate; } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFontBinInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFontBinInfo.java index 97d01c1dc..d44a8066e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFontBinInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggyFontBinInfo.java @@ -16,24 +16,34 @@ public class IggyFontBinInfo implements StructureInterface { @IggyFieldType(DataType.uint64_t) long size_of_this_info = STRUCT_SIZE; + @IggyFieldType(value = DataType.uint16_t, count = 4) int font_specific[]; + @IggyFieldType(DataType.float_t) float normX; + @IggyFieldType(DataType.float_t) float zero; + @IggyFieldType(DataType.float_t) float zero2; + @IggyFieldType(DataType.float_t) float normY; + @IggyFieldType(DataType.float_t) float minSize; + @IggyFieldType(DataType.float_t) float maxSize; + @IggyFieldType(DataType.uint64_t) long order_in_iggy_file; + @IggyFieldType(DataType.int64_t) long address_back; //relative + @IggyFieldType(value = DataType.uint8_t, count = 40) byte pad[]; @@ -59,7 +69,7 @@ public class IggyFontBinInfo implements StructureInterface { maxSize = s.readFloat(); order_in_iggy_file = s.readUI64(); address_back = s.readSI64(); -//if(address_back + s.position() - 8 != text_offsets[i]) Printf("Wrong iggy font format (bininfo-offsetback) (%u)!\n",i); +//if(address_back + s.position() - 8 != text_offsets[i]) Printf("Wrong iggy font format (bininfo-offsetback) (%u)!\n",i); pad = s.readBytes(40); } @@ -79,5 +89,4 @@ public class IggyFontBinInfo implements StructureInterface { s.writeSI64(address_back); s.writeBytes(pad); } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggySwf.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggySwf.java index e5907428c..290e51513 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggySwf.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/IggySwf.java @@ -1,339 +1,346 @@ -package com.jpexs.decompiler.flash.iggy; - -import com.jpexs.decompiler.flash.iggy.annotations.IggyFieldType; -import com.jpexs.decompiler.flash.iggy.streams.IggyIndexBuilder; -import com.jpexs.decompiler.flash.iggy.streams.ReadDataStreamInterface; -import com.jpexs.decompiler.flash.iggy.streams.SeekMode; -import com.jpexs.decompiler.flash.iggy.streams.StructureInterface; -import com.jpexs.decompiler.flash.iggy.streams.WriteDataStreamInterface; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author JPEXS - */ -public class IggySwf implements StructureInterface { - - final static int NO_OFFSET = 1; - - @IggyFieldType(value = DataType.wchar_t, count = 48) - String name; - - private List fonts = new ArrayList<>(); - // private List font_data_addresses = new ArrayList<>(); - private List add_fonts = new ArrayList<>(); -// private List add_font_data_addresses = new ArrayList<>(); - - private IggyFlashHeader64 hdr; - - public IggySwf(ReadDataStreamInterface stream) throws IOException { - readFromDataStream(stream); - } - private List texts = new ArrayList<>(); - //private List text_data_addresses = new ArrayList<>(); - private List add_texts = new ArrayList<>(); - //private List add_text_data_addresses = new ArrayList<>(); - - //private byte font_add_data[]; - //private List font_additional_size = new ArrayList<>(); - private IggyFontBinInfo font_bin_info[]; - private List sequenceNames = new ArrayList<>(); - //private List sequenceValues = new ArrayList<>(); - - private IggyFontTypeInfo type_info[]; - private String type_info_name[]; - private IggyDeclStrings decl_strings; - private long ofs_additional; - private long additional_address; - - public IggyFlashHeader64 getHdr() { - return hdr; - } - - public List getFonts() { - return fonts; - } - - public List getAddFonts() { - return add_fonts; - } - - public List getTexts() { - return texts; - } - - public List getAddTexts() { - return add_texts; - } - - @Override - public void readFromDataStream(ReadDataStreamInterface s) throws IOException { - this.hdr = new IggyFlashHeader64(s); - //Save all font bytes to buffer for later easy modification - //here is offset[0] - 184 - name = s.readWChar(); - //here is offset[1] - 230 - int pad8 = 8 - (int) (s.position() % 8); - if (pad8 > 8) { - s.seek(pad8, SeekMode.CUR); - } - //here is offset [2] - 232 - s.seek(hdr.getBaseAddress(), SeekMode.SET); - s.readUI64(); //pad 1 - - List itemsAddresses = new ArrayList<>(); - - while (true) { - long offset = s.readUI64(); - if (offset == 1) { - break; - } - itemsAddresses.add(offset + s.position() - 8); - } - if (hdr.getImported_guid() != 0) { - ofs_additional = s.readUI64(); - additional_address = ofs_additional == 1 ? 0 : ofs_additional + s.position() - 8; - } - for (Long addr : itemsAddresses) { - s.seek(addr, SeekMode.SET); - int kind = s.readUI8(); - s.seek(-1, SeekMode.CUR); - switch (kind) { - case 22 /*FONT*/: - IggyFont font = new IggyFont(s); - //font_data_addresses.add(addr); - fonts.add(font); - break; - case 6 /*TEXT*/: - IggyText text = new IggyText(s); - //text_data_addresses.add(addr); - texts.add(text); - break; - default: - throw new RuntimeException("Unknown item kind: " + kind); - } - } - - if (additional_address != 0) { - s.seek(additional_address, SeekMode.SET); - List additionalItemsAddresses = new ArrayList<>(); - while (true) { - long offset = s.readUI64(); - if (offset == 1) { - break; - } - additionalItemsAddresses.add(offset + s.position() - 8); - } - for (Long addr : additionalItemsAddresses) { - s.seek(addr, SeekMode.SET); - int kind = s.readUI8(); - s.seek(-1, SeekMode.CUR); - switch (kind) { - case 22 /*FONT*/: - IggyFont font = new IggyFont(s); - //add_font_data_addresses.add(addr); - add_fonts.add(font); - break; - case 6 /*TEXT*/: - IggyText text = new IggyText(s); - //add_text_data_addresses.add(addr); - add_texts.add(text); - break; - default: - throw new RuntimeException("Unknown imported item kind: " + kind); - } - } - } - s.seek(hdr.getFontEndAddress(), SeekMode.SET); - //here is offset [4] - 856 ? - font_bin_info = new IggyFontBinInfo[(int) hdr.font_count]; - for (int i = 0; i < hdr.font_count; i++) { - font_bin_info[i] = new IggyFontBinInfo(s); - } - - sequenceNames = new ArrayList<>(); - - long seq_addresses[] = new long[]{hdr.getSequenceStartAddress1(), hdr.getSequenceStartAddress2(), hdr.getSequenceStartAddress3()}; - long seq_name_addresses[] = new long[3]; - for (int i = 0; i < 3; i++) { - if (seq_addresses[i] == 0) { - seq_name_addresses[i] = 0; - //0 - } else { - s.seek(seq_addresses[i], SeekMode.SET); - long ofs_seq_name = s.readUI64(); - seq_name_addresses[i] = ofs_seq_name == 1 ? 0 : ofs_seq_name + s.position() - 8; - s.readUI64(); //is this crucial? - } - } - - for (int i = 0; i < 3; i++) { - if (seq_name_addresses[i] > 0) { - s.seek(seq_name_addresses[i], SeekMode.SET); - sequenceNames.add(s.readWChar()); - } else { - sequenceNames.add(null); - } - } - s.pad8bytes(); - - //sequence = new IggySequence(s); - s.seek(hdr.getTypeFontsAddress(), SeekMode.SET); - type_info = new IggyFontTypeInfo[(int) hdr.font_count]; - type_info_name = new String[(int) hdr.font_count]; - for (int i = 0; i < hdr.font_count; i++) { - type_info[i] = new IggyFontTypeInfo(s); - } - for (int i = 0; i < hdr.font_count; i++) { - s.seek(type_info[i].getLocal_name_ofs_pos() + type_info[i].ofs_local_name, SeekMode.SET); - type_info_name[i] = s.readWChar(); - } - - s.seek(hdr.getDeclStringsAddress(), SeekMode.SET); - decl_strings = new IggyDeclStrings(s); - /*WriteDataStreamInterface outs = new TemporaryDataStream(); - writeToDataStream(outs); - Helper.writeFile("d:\\Dropbox\\jpexs-laptop\\iggi\\parts\\swf_out.bin", outs.getAllBytes());*/ - } - - public String getName() { - return name; - } - - @Override - public void writeToDataStream(WriteDataStreamInterface s) throws IOException { - IggyIndexBuilder ib = s.getIndexing(); - hdr.writeToDataStream(s); - s.writeWChar(name); - s.pad8bytes(); - s.writeUI64(1); - ib.write16bitArray(name.length() + 1); - ib.writeTwoPaddingBytes(); - ib.write64bitPointerArray(64); - long posBeforeOffsets = s.position(); - - final int FILL_LATER = 1; - - List fontPosFillLater = new ArrayList<>(); - - for (int i = 0; i < fonts.size(); i++) { - fontPosFillLater.add(s.position()); - s.writeUI64(FILL_LATER); - } - List textPosFillLater = new ArrayList<>(); - for (int i = 0; i < texts.size(); i++) { - textPosFillLater.add(s.position()); - s.writeUI64(FILL_LATER); - } - s.writeUI64(1); - - long addPosFillLater = s.position(); - s.writeUI64(FILL_LATER); - long posAfter = posBeforeOffsets + 64 * 8; - long curPos = s.position(); - long numLeft = posAfter - curPos; - long ofsLeft = numLeft / 8; - for (int i = 0; i < ofsLeft - 1; i++) { - s.writeUI64(FILL_LATER); - } - - for (int i = 0; i < fonts.size(); i++) { - s.setOlderOffsetToThisPos(fontPosFillLater.get(i)); - fonts.get(i).writeToDataStream(s); - } - for (int i = 0; i < texts.size(); i++) { - s.setOlderOffsetToThisPos(textPosFillLater.get(i)); - texts.get(i).writeToDataStream(s); - } - - if (!add_fonts.isEmpty() || !add_texts.isEmpty()) { - s.setOlderOffsetToThisPos(addPosFillLater); - - List addFontPosFillLater = new ArrayList<>(); - - for (int i = 0; i < add_fonts.size(); i++) { - addFontPosFillLater.add(s.position()); - s.writeUI64(FILL_LATER); - } - List addTextPosFillLater = new ArrayList<>(); - for (int i = 0; i < add_texts.size(); i++) { - addTextPosFillLater.add(s.position()); - s.writeUI64(FILL_LATER); - } - s.writeUI64(FILL_LATER); - for (int i = 0; i < add_fonts.size(); i++) { - s.setOlderOffsetToThisPos(addFontPosFillLater.get(i)); - add_fonts.get(i).writeToDataStream(s); - } - for (int i = 0; i < add_texts.size(); i++) { - s.setOlderOffsetToThisPos(addTextPosFillLater.get(i)); - add_texts.get(i).writeToDataStream(s); - } - } - s.setOlderOffsetToThisPos(hdr.getFont_end_ofs_pos()); - ib.writeConstLengthArray(IggyIndexBuilder.CONST_BIN_INFO_SIZE, hdr.font_count); - for (int i = 0; i < hdr.font_count; i++) { - font_bin_info[i].writeToDataStream(s); - } - - long seq_ofs_pos[] = new long[]{hdr.getSequence_start1_ofs_pos(), hdr.getSequence_start2_ofs_pos(), hdr.getSequence_start3_ofs_pos()}; - long off_seq_expected[] = new long[]{hdr.off_sequence_start1, hdr.off_sequence_start2, hdr.off_sequence_start3}; - - long seq_name_fill_later[] = new long[3]; - - s.setOlderOffsetToThisPos(seq_ofs_pos[0]); - s.writeUI64(1); - s.writeUI64(1); - ib.writeLengthCustom(16, new int[]{0}, new int[]{2}); - - seq_name_fill_later[2] = s.position(); - s.setOlderOffsetToThisPos(seq_ofs_pos[2]); - s.writeUI64(FILL_LATER); - s.writeUI64(0); - ib.writeConstLength(IggyIndexBuilder.CONST_SEQUENCE_SIZE); - for (int i = 0; i < 3; i++) { - if (sequenceNames.get(i) != null) { - s.setOlderOffsetToThisPos(seq_name_fill_later[i]); - ib.write16bitArray(sequenceNames.get(i).length() + 1); - s.writeWChar(sequenceNames.get(i)); - } - } - s.setOlderOffsetToThisPos(hdr.getSequence_end_ofs_pos()); - s.pad8bytes(); - ib.pad8bytes(); - - ib.writeConstLengthArray(IggyIndexBuilder.CONST_TYPE_INFO_SIZE, hdr.font_count); - s.setOlderOffsetToThisPos(hdr.getType_fonts_ofs_pos()); - //s.seek(hdr.getTypeFontsAddress(), SeekMode.SET); - for (int i = 0; i < hdr.font_count; i++) { - type_info[i].writeToDataStream(s); - } - - for (int i = 0; i < hdr.font_count; i++) { - ib.write16bitArray(type_info_name[i].length() + 1); - s.setOlderOffsetToThisPos(type_info[i].getLocal_name_ofs_pos()); - s.writeWChar(type_info_name[i]); - } - s.pad8bytes(); - ib.pad8bytes(); - - s.setOlderOffsetToThisPos(hdr.getDecl_strings_ofs_pos()); - //s.seek(hdr.getDeclStringsAddress(), SeekMode.SET); - decl_strings.writeToDataStream(s); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("[\r\n"); - sb.append("name ").append(name).append("\r\n"); - return sb.toString(); - } - - public IggyDeclStrings getDeclStrings() { - return decl_strings; - } - -} +package com.jpexs.decompiler.flash.iggy; + +import com.jpexs.decompiler.flash.iggy.annotations.IggyFieldType; +import com.jpexs.decompiler.flash.iggy.streams.IggyIndexBuilder; +import com.jpexs.decompiler.flash.iggy.streams.ReadDataStreamInterface; +import com.jpexs.decompiler.flash.iggy.streams.SeekMode; +import com.jpexs.decompiler.flash.iggy.streams.StructureInterface; +import com.jpexs.decompiler.flash.iggy.streams.WriteDataStreamInterface; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author JPEXS + */ +public class IggySwf implements StructureInterface { + + final static int NO_OFFSET = 1; + + @IggyFieldType(value = DataType.wchar_t, count = 48) + String name; + + private List fonts = new ArrayList<>(); + + // private List font_data_addresses = new ArrayList<>(); + private List add_fonts = new ArrayList<>(); +// private List add_font_data_addresses = new ArrayList<>(); + + private IggyFlashHeader64 hdr; + + public IggySwf(ReadDataStreamInterface stream) throws IOException { + readFromDataStream(stream); + } + + private List texts = new ArrayList<>(); + + //private List text_data_addresses = new ArrayList<>(); + private List add_texts = new ArrayList<>(); + //private List add_text_data_addresses = new ArrayList<>(); + + //private byte font_add_data[]; + //private List font_additional_size = new ArrayList<>(); + private IggyFontBinInfo font_bin_info[]; + + private List sequenceNames = new ArrayList<>(); + //private List sequenceValues = new ArrayList<>(); + + private IggyFontTypeInfo type_info[]; + + private String type_info_name[]; + + private IggyDeclStrings decl_strings; + + private long ofs_additional; + + private long additional_address; + + public IggyFlashHeader64 getHdr() { + return hdr; + } + + public List getFonts() { + return fonts; + } + + public List getAddFonts() { + return add_fonts; + } + + public List getTexts() { + return texts; + } + + public List getAddTexts() { + return add_texts; + } + + @Override + public void readFromDataStream(ReadDataStreamInterface s) throws IOException { + this.hdr = new IggyFlashHeader64(s); + //Save all font bytes to buffer for later easy modification + //here is offset[0] - 184 + name = s.readWChar(); + //here is offset[1] - 230 + int pad8 = 8 - (int) (s.position() % 8); + if (pad8 > 8) { + s.seek(pad8, SeekMode.CUR); + } + //here is offset [2] - 232 + s.seek(hdr.getBaseAddress(), SeekMode.SET); + s.readUI64(); //pad 1 + + List itemsAddresses = new ArrayList<>(); + + while (true) { + long offset = s.readUI64(); + if (offset == 1) { + break; + } + itemsAddresses.add(offset + s.position() - 8); + } + if (hdr.getImported_guid() != 0) { + ofs_additional = s.readUI64(); + additional_address = ofs_additional == 1 ? 0 : ofs_additional + s.position() - 8; + } + for (Long addr : itemsAddresses) { + s.seek(addr, SeekMode.SET); + int kind = s.readUI8(); + s.seek(-1, SeekMode.CUR); + switch (kind) { + case 22 /*FONT*/: + IggyFont font = new IggyFont(s); + //font_data_addresses.add(addr); + fonts.add(font); + break; + case 6 /*TEXT*/: + IggyText text = new IggyText(s); + //text_data_addresses.add(addr); + texts.add(text); + break; + default: + throw new RuntimeException("Unknown item kind: " + kind); + } + } + + if (additional_address != 0) { + s.seek(additional_address, SeekMode.SET); + List additionalItemsAddresses = new ArrayList<>(); + while (true) { + long offset = s.readUI64(); + if (offset == 1) { + break; + } + additionalItemsAddresses.add(offset + s.position() - 8); + } + for (Long addr : additionalItemsAddresses) { + s.seek(addr, SeekMode.SET); + int kind = s.readUI8(); + s.seek(-1, SeekMode.CUR); + switch (kind) { + case 22 /*FONT*/: + IggyFont font = new IggyFont(s); + //add_font_data_addresses.add(addr); + add_fonts.add(font); + break; + case 6 /*TEXT*/: + IggyText text = new IggyText(s); + //add_text_data_addresses.add(addr); + add_texts.add(text); + break; + default: + throw new RuntimeException("Unknown imported item kind: " + kind); + } + } + } + s.seek(hdr.getFontEndAddress(), SeekMode.SET); + //here is offset [4] - 856 ? + font_bin_info = new IggyFontBinInfo[(int) hdr.font_count]; + for (int i = 0; i < hdr.font_count; i++) { + font_bin_info[i] = new IggyFontBinInfo(s); + } + + sequenceNames = new ArrayList<>(); + + long seq_addresses[] = new long[]{hdr.getSequenceStartAddress1(), hdr.getSequenceStartAddress2(), hdr.getSequenceStartAddress3()}; + long seq_name_addresses[] = new long[3]; + for (int i = 0; i < 3; i++) { + if (seq_addresses[i] == 0) { + seq_name_addresses[i] = 0; + //0 + } else { + s.seek(seq_addresses[i], SeekMode.SET); + long ofs_seq_name = s.readUI64(); + seq_name_addresses[i] = ofs_seq_name == 1 ? 0 : ofs_seq_name + s.position() - 8; + s.readUI64(); //is this crucial? + } + } + + for (int i = 0; i < 3; i++) { + if (seq_name_addresses[i] > 0) { + s.seek(seq_name_addresses[i], SeekMode.SET); + sequenceNames.add(s.readWChar()); + } else { + sequenceNames.add(null); + } + } + s.pad8bytes(); + + //sequence = new IggySequence(s); + s.seek(hdr.getTypeFontsAddress(), SeekMode.SET); + type_info = new IggyFontTypeInfo[(int) hdr.font_count]; + type_info_name = new String[(int) hdr.font_count]; + for (int i = 0; i < hdr.font_count; i++) { + type_info[i] = new IggyFontTypeInfo(s); + } + for (int i = 0; i < hdr.font_count; i++) { + s.seek(type_info[i].getLocal_name_ofs_pos() + type_info[i].ofs_local_name, SeekMode.SET); + type_info_name[i] = s.readWChar(); + } + + s.seek(hdr.getDeclStringsAddress(), SeekMode.SET); + decl_strings = new IggyDeclStrings(s); + /*WriteDataStreamInterface outs = new TemporaryDataStream(); + writeToDataStream(outs); + Helper.writeFile("d:\\Dropbox\\jpexs-laptop\\iggi\\parts\\swf_out.bin", outs.getAllBytes());*/ + } + + public String getName() { + return name; + } + + @Override + public void writeToDataStream(WriteDataStreamInterface s) throws IOException { + IggyIndexBuilder ib = s.getIndexing(); + hdr.writeToDataStream(s); + s.writeWChar(name); + s.pad8bytes(); + s.writeUI64(1); + ib.write16bitArray(name.length() + 1); + ib.writeTwoPaddingBytes(); + ib.write64bitPointerArray(64); + long posBeforeOffsets = s.position(); + + final int FILL_LATER = 1; + + List fontPosFillLater = new ArrayList<>(); + + for (int i = 0; i < fonts.size(); i++) { + fontPosFillLater.add(s.position()); + s.writeUI64(FILL_LATER); + } + List textPosFillLater = new ArrayList<>(); + for (int i = 0; i < texts.size(); i++) { + textPosFillLater.add(s.position()); + s.writeUI64(FILL_LATER); + } + s.writeUI64(1); + + long addPosFillLater = s.position(); + s.writeUI64(FILL_LATER); + long posAfter = posBeforeOffsets + 64 * 8; + long curPos = s.position(); + long numLeft = posAfter - curPos; + long ofsLeft = numLeft / 8; + for (int i = 0; i < ofsLeft - 1; i++) { + s.writeUI64(FILL_LATER); + } + + for (int i = 0; i < fonts.size(); i++) { + s.setOlderOffsetToThisPos(fontPosFillLater.get(i)); + fonts.get(i).writeToDataStream(s); + } + for (int i = 0; i < texts.size(); i++) { + s.setOlderOffsetToThisPos(textPosFillLater.get(i)); + texts.get(i).writeToDataStream(s); + } + + if (!add_fonts.isEmpty() || !add_texts.isEmpty()) { + s.setOlderOffsetToThisPos(addPosFillLater); + + List addFontPosFillLater = new ArrayList<>(); + + for (int i = 0; i < add_fonts.size(); i++) { + addFontPosFillLater.add(s.position()); + s.writeUI64(FILL_LATER); + } + List addTextPosFillLater = new ArrayList<>(); + for (int i = 0; i < add_texts.size(); i++) { + addTextPosFillLater.add(s.position()); + s.writeUI64(FILL_LATER); + } + s.writeUI64(FILL_LATER); + for (int i = 0; i < add_fonts.size(); i++) { + s.setOlderOffsetToThisPos(addFontPosFillLater.get(i)); + add_fonts.get(i).writeToDataStream(s); + } + for (int i = 0; i < add_texts.size(); i++) { + s.setOlderOffsetToThisPos(addTextPosFillLater.get(i)); + add_texts.get(i).writeToDataStream(s); + } + } + s.setOlderOffsetToThisPos(hdr.getFont_end_ofs_pos()); + ib.writeConstLengthArray(IggyIndexBuilder.CONST_BIN_INFO_SIZE, hdr.font_count); + for (int i = 0; i < hdr.font_count; i++) { + font_bin_info[i].writeToDataStream(s); + } + + long seq_ofs_pos[] = new long[]{hdr.getSequence_start1_ofs_pos(), hdr.getSequence_start2_ofs_pos(), hdr.getSequence_start3_ofs_pos()}; + long off_seq_expected[] = new long[]{hdr.off_sequence_start1, hdr.off_sequence_start2, hdr.off_sequence_start3}; + + long seq_name_fill_later[] = new long[3]; + + s.setOlderOffsetToThisPos(seq_ofs_pos[0]); + s.writeUI64(1); + s.writeUI64(1); + ib.writeLengthCustom(16, new int[]{0}, new int[]{2}); + + seq_name_fill_later[2] = s.position(); + s.setOlderOffsetToThisPos(seq_ofs_pos[2]); + s.writeUI64(FILL_LATER); + s.writeUI64(0); + ib.writeConstLength(IggyIndexBuilder.CONST_SEQUENCE_SIZE); + for (int i = 0; i < 3; i++) { + if (sequenceNames.get(i) != null) { + s.setOlderOffsetToThisPos(seq_name_fill_later[i]); + ib.write16bitArray(sequenceNames.get(i).length() + 1); + s.writeWChar(sequenceNames.get(i)); + } + } + s.setOlderOffsetToThisPos(hdr.getSequence_end_ofs_pos()); + s.pad8bytes(); + ib.pad8bytes(); + + ib.writeConstLengthArray(IggyIndexBuilder.CONST_TYPE_INFO_SIZE, hdr.font_count); + s.setOlderOffsetToThisPos(hdr.getType_fonts_ofs_pos()); + //s.seek(hdr.getTypeFontsAddress(), SeekMode.SET); + for (int i = 0; i < hdr.font_count; i++) { + type_info[i].writeToDataStream(s); + } + + for (int i = 0; i < hdr.font_count; i++) { + ib.write16bitArray(type_info_name[i].length() + 1); + s.setOlderOffsetToThisPos(type_info[i].getLocal_name_ofs_pos()); + s.writeWChar(type_info_name[i]); + } + s.pad8bytes(); + ib.pad8bytes(); + + s.setOlderOffsetToThisPos(hdr.getDecl_strings_ofs_pos()); + //s.seek(hdr.getDeclStringsAddress(), SeekMode.SET); + decl_strings.writeToDataStream(s); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("[\r\n"); + sb.append("name ").append(name).append("\r\n"); + return sb.toString(); + } + + public IggyDeclStrings getDeclStrings() { + return decl_strings; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggySwfBundle.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggySwfBundle.java index e2010e7ed..1b05846ab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggySwfBundle.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/iggy/conversion/IggySwfBundle.java @@ -1,120 +1,109 @@ -package com.jpexs.decompiler.flash.iggy.conversion; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFBundle; -import com.jpexs.decompiler.flash.iggy.IggyFile; -import com.jpexs.decompiler.flash.iggy.IggyFont; -import com.jpexs.decompiler.flash.tags.DefineFont2Tag; -import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.tags.base.CharacterTag; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.MemoryInputStream; -import com.jpexs.helpers.ReReadableInputStream; -import com.jpexs.helpers.streams.SeekableInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class IggySwfBundle implements SWFBundle { - - private IggyFile iggyFile; - - public IggySwfBundle(InputStream is) throws IOException { - this(is, null); - } - - public IggySwfBundle(File filename) throws IOException { - this(null, filename); - } - - protected IggySwfBundle(InputStream is, File filename) throws IOException { - initBundle(is, filename); - } - - protected void initBundle(InputStream is, File filename) throws IOException { - if (filename == null) { - filename = File.createTempFile("bundle", ".iggy"); - Helper.saveStream(is, filename); - } - iggyFile = new IggyFile(filename); - } - - @Override - public int length() { - return 1; - } - - @Override - public Set getKeys() { - Set ret = new TreeSet<>(); - for (int i = 0; i < length(); i++) { - ret.add(iggyFile.getSwfName()); - } - return ret; - } - - private int keyToSwfIndex(String key) { - for (int i = 0; i < length(); i++) { - if (key.equals(iggyFile.getSwfName())) { - return i; - } - } - throw new IllegalArgumentException("Key " + key + " does not exist!"); - } - - @Override - public SeekableInputStream getSWF(String key) throws IOException { - SWF swf = IggyToSwfConvertor.getSwf(iggyFile); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - swf.saveTo(baos); - MemoryInputStream mis = new MemoryInputStream(baos.toByteArray()); - return mis; - } - - @Override - public Map getAll() throws IOException { - Map ret = new HashMap<>(); - for (String key : getKeys()) { - ret.put(key, getSWF(key)); - } - return ret; - } - - @Override - public String getExtension() { - return "iggy"; - } - - @Override - public boolean isReadOnly() { - return false; - } - - @Override - public boolean putSWF(String key, InputStream is) throws IOException { - try { - SWF swf = new SWF(is, false, false); - SwfToIggyConvertor.updateIggy(iggyFile.getSwf(), swf); - iggyFile.saveChanges(); - return true; - } catch (InterruptedException ex) { - return false; - } - - } - -} +package com.jpexs.decompiler.flash.iggy.conversion; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFBundle; +import com.jpexs.decompiler.flash.iggy.IggyFile; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.MemoryInputStream; +import com.jpexs.helpers.streams.SeekableInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +/** + * + * @author JPEXS + */ +public class IggySwfBundle implements SWFBundle { + + private IggyFile iggyFile; + + public IggySwfBundle(InputStream is) throws IOException { + this(is, null); + } + + public IggySwfBundle(File filename) throws IOException { + this(null, filename); + } + + protected IggySwfBundle(InputStream is, File filename) throws IOException { + initBundle(is, filename); + } + + protected void initBundle(InputStream is, File filename) throws IOException { + if (filename == null) { + filename = File.createTempFile("bundle", ".iggy"); + Helper.saveStream(is, filename); + } + iggyFile = new IggyFile(filename); + } + + @Override + public int length() { + return 1; + } + + @Override + public Set getKeys() { + Set ret = new TreeSet<>(); + for (int i = 0; i < length(); i++) { + ret.add(iggyFile.getSwfName()); + } + return ret; + } + + private int keyToSwfIndex(String key) { + for (int i = 0; i < length(); i++) { + if (key.equals(iggyFile.getSwfName())) { + return i; + } + } + throw new IllegalArgumentException("Key " + key + " does not exist!"); + } + + @Override + public SeekableInputStream getSWF(String key) throws IOException { + SWF swf = IggyToSwfConvertor.getSwf(iggyFile); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + swf.saveTo(baos); + MemoryInputStream mis = new MemoryInputStream(baos.toByteArray()); + return mis; + } + + @Override + public Map getAll() throws IOException { + Map ret = new HashMap<>(); + for (String key : getKeys()) { + ret.put(key, getSWF(key)); + } + return ret; + } + + @Override + public String getExtension() { + return "iggy"; + } + + @Override + public boolean isReadOnly() { + return false; + } + + @Override + public boolean putSWF(String key, InputStream is) throws IOException { + try { + SWF swf = new SWF(is, false, false); + SwfToIggyConvertor.updateIggy(iggyFile.getSwf(), swf); + iggyFile.saveChanges(); + return true; + } catch (InterruptedException ex) { + return false; + } + + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties index 8a9ca4b7d..2a1286504 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties @@ -19,6 +19,8 @@ decompilationError.timeout.description = No s'ha descompilat degut al l\u00edmit decompilationError.obfuscated = El codi pot estar ofuscat decompilationError.errorType = Tipus d'error decompilationError.error.description = No s'ha descompilat degut a l'error +decompilationError.actionCount = Recompte d'accions: +decompilationError.instructionCount = Recompe d'instruccions: decompilation.skipped = S'ha om\u00e8s la descompilaci\u00f3 decompilation.unsupported = No suportat pel descompilador diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java index 99fa23bc1..8c91abaf3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/graph/Graph.java @@ -1040,8 +1040,8 @@ public class Graph { private void getPrecontinues(String path, BaseLocalData localData, GraphPart parent, GraphPart part, Set allParts, List loops, List stopPart) throws InterruptedException { try { markLevels(path, localData, part, allParts, loops); - } catch (ThreadDeath | InterruptedException iex) { - throw iex; + } catch (ThreadDeath | InterruptedException ex) { + throw ex; } catch (Throwable ex) { //It is unusual code so markLevels failed, nevermind, it can still work } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 5b03d5f71..02782ff58 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.decompiler.flash.AbortRetryIgnoreHandler; import com.jpexs.decompiler.flash.ApplicationInfo; +import com.jpexs.decompiler.flash.DecompilerPool; import com.jpexs.decompiler.flash.EventListener; import com.jpexs.decompiler.flash.ReadOnlyTagList; import com.jpexs.decompiler.flash.SWF; @@ -245,6 +246,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private final MainFrameStatusPanel statusPanel; + private Thread taskThread; + private final MainFrameMenu mainMenu; private final JProgressBar progressBar = new JProgressBar(0, 100); @@ -843,6 +846,29 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } mainMenu.updateComponents(swf); + + if (taskThread != null) { + taskThread.interrupt(); + } + + Thread t = new Thread() { + @Override + public void run() { + while (!Thread.currentThread().isInterrupted()) { + DecompilerPool d = swf.getDecompilerPool(); + statusPanel.setStatus(swf.getFileTitle() + " " + d.getStat()); + + try { + Thread.sleep(100); + } catch (InterruptedException ex) { + break; + } + } + } + }; + + t.start(); + taskThread = t; } private void updateUi() { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 2c99fa210..12076c7f9 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -68,6 +68,7 @@ import com.jpexs.decompiler.flash.gui.abc.tablemodels.UIntTableModel; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.editor.LinkHandler; import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; +import com.jpexs.decompiler.flash.helpers.HighlightedText; import com.jpexs.decompiler.flash.importers.As3ScriptReplaceException; import com.jpexs.decompiler.flash.importers.As3ScriptReplaceExceptionItem; import com.jpexs.decompiler.flash.importers.As3ScriptReplacerInterface; @@ -100,6 +101,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -207,38 +209,45 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener> futures = new ArrayList<>(); + try { + loop: + for (final ScriptPack pack : allpacks) { + pos++; + if (!pack.isSimple && Configuration.ignoreCLikePackages.get()) { continue; } - for (String ns : ignoredNss) { - if (fullName.startsWith(ns + ".")) { - continue loop; + if (Configuration._ignoreAdditionalFlexClasses.get()) { + String fullName = pack.getClassPath().packageStr.add(pack.getClassPath().className, pack.getClassPath().namespaceSuffix).toRawString(); + if (ignoredClasses.contains(fullName)) { + continue; + } + for (String ns : ignoredNss) { + if (fullName.startsWith(ns + ".")) { + continue loop; + } } } - } - String workText = AppStrings.translate("work.searching"); - String decAdd = ""; - if (!SWF.isCached(pack)) { - decAdd = ", " + AppStrings.translate("work.decompiling"); - } - - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); - try { - if (pat.matcher(SWF.getCached(pack).text).find()) { - ABCPanelSearchResult searchResult = new ABCPanelSearchResult(pack); - found.add(searchResult); + String workText = AppStrings.translate("work.searching"); + String decAdd = ""; + if (!SWF.isCached(pack)) { + decAdd = ", " + AppStrings.translate("work.decompiling"); } - } catch (InterruptedException ex) { - break; + + Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); + Future text = SWF.getCachedFuture(pack, (HighlightedText result) -> { + if (pat.matcher(result.text).find()) { + ABCPanelSearchResult searchResult = new ABCPanelSearchResult(pack); + found.add(searchResult); + } + }); + + futures.add(text); + } + } catch (InterruptedException ex) { + for (Future future : futures) { + future.cancel(true); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index 4e9da7b4e..0261f0f6d 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -172,7 +172,7 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis } }; - // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in AciveXControl static constructor + // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { throw new FlashUnsupportedException(); @@ -205,7 +205,6 @@ public final class FlashPlayerPanel extends Panel implements Closeable, MediaDis timer = new Timer(); timer.schedule(new TimerTask() { - private boolean isPlaying = false; private int currentFrame = 0; From c3fc9785e33dff0ef7454512bfbbcb225ae2cd50 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 24 Dec 2016 21:06:23 +0100 Subject: [PATCH 002/114] #1240 JPEXS does not use multiple threads for decompilation on Text Search: AS2 is also multi thread now, work status improvements during search --- CHANGELOG.md | 4544 +++++++++-------- .../decompiler/flash/DecompilerPool.java | 44 +- .../src/com/jpexs/decompiler/flash/SWF.java | 4 +- .../flash/cache/ScriptDecompiledListener.java | 3 +- .../com/jpexs/helpers/ImmediateFuture.java | 34 +- .../flash/gui/AdvancedSettingsDialog.java | 2 + .../jpexs/decompiler/flash/gui/MainPanel.java | 30 +- .../decompiler/flash/gui/abc/ABCPanel.java | 36 +- .../flash/gui/action/ActionPanel.java | 50 +- 9 files changed, 2419 insertions(+), 2328 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd7af6992..8053d2ccd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2272 +1,2274 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [Unreleased] - -## [10.0.0] - 2016-12-24 -### Added -- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only -- optional AS3 direct editation with Flex SDK -- AS3 p-code editing - metadata read/write support -- AS3 p-code editing - end of the block command like in RABCDasm -- AS3 p-code editing - popup docs for more than instructions -- Debugger - New columns for variable details - scope, flags, trait -- Debugger - Add watch feature -- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases -- Deobfuscation Tool - Fix colliding trait/classes via toolbar command -- Auto rename identifiers option now fixes colliding trait/classes aswell -- [#1254] FLA export - detecting scripts on AS3 timeline -- [#907] FFDec Library JAR file has version inside it. -- [#1311], [#1313] actionScript source font size -- Display warning when library version and GUI version mismatch -- Changelog file -- [#1308] Search by all P-code files (AS 1/2 only) - -### Changed -- [#1189] AS3 - sort imports to have same order always -- GUI: AS3 P-code header show actual trait type and method type -- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" -- Set advance values button has confirm dialog with information -- [#1274] Linux package no longer requires Oracle Java only -- Library now packaged inside ZIP file - -### Fixed -- P-code docs formatting fix -- Export dialog - handling sprite and SWF frames correctly -- [#1275] debugger - show local variables fixes -- AS3 p-code editing - popup docs correctly displayed when label on line start -- [#1278] replacing DefineBits error -- [#1281] DefineFont 2/3 getting character advance value when replacing fix -- Set advance values button - Do not set advance if the char cannot be displayed in source font -- AS3 Goto declaration for single character names -- Identifier renaming for top level classes -- AS3 direct editation not correctly saving local register names -- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir -- Mac OS X installer fix (.pkg) -- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers -- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix -- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes -- [#1302] Callpropvoid instruction docblock not correct -- [#1309] recent files not getting updates -- [#1312] faster colliding usages finder -- [#1303] garbled text when exporting frame with text -- [#1314] user interface: button order -- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) -- [#1323] Audio playback fails - -## [9.0.0] - 2016-08-12 -### Added -- Instance metadata (AMF3) editing in PlaceObject4 -- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) -- [#1171] Export stroke scale to FLA -- FLA export - check invalid unicode characters -- [#1170] Extract from memory in commandline -- Reload one vs Reload all buttons -- ABC: Float and Float4 support -- AS3 p-code instruction documentation in GUI -- [#1241] Settings to show original bytes in hex view -- Search in dump view -- Jump to resources view from hex view -- Show warning on 32bit JRE - -### Changed -- [#1162] improved opening loaded SWF files -- Flash Viewer - skip frames when not on time -- [#1199] Automatically import alpha channel to JPEG3/4 from PNG - -### Fixed -- [#1151] Filters on texts fixed -- [#1128] Adding characters to font fixed (FontAlignZones not removed) -- [#1163] Clicking open->file makes program buggy -- Refresh tree after raw edit -- [#1172] Text double escape fix -- [#1174] Change language fix -- some AS2 deobfuscation fixes -- [#1183] Index out of bounds fix -- Implicit coersion on binary/unary opfix -- debugger: corect display variable values through getters -- Multiple XLF export fix -- [#1193] FLA export - text tag advance fix, one layer shape fix -- [#1193] FLA export - smoothed image detection, export raw JPEG data -- [#1193] Export space character to TTF correctly -- [#1200] Previous search text selected when quick find -- Flash viewer: aspect ratio on startup fix -- [#1198] Saving trait slot const value -- Zoom parameter commandline fixed -- [#1205] clipping fixed -- [#1194] Wrong sound effects in FLA -- [#1210] Frame Export fix -- Improved/fixed go to declaration in AS3 -- [#1217] PCode window not in same position as AS -- Hide memor search on non windows platform -- [#1244] Incorrect showing of NOP instructions -- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back -- [#1241] File content is different from hex view -- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont -- [#1236] won't open fixed -- [#1251] SWF not same after export XML and import back -- [#1265] Error during export -- [#1268] Font export - Using second glyph when two glyphs for one character found -- [#1268] GFX compacted font - fixed advance values on export - -## [8.0.1] - 2016-02-20 -### Changed -- FFDec debug tab in advanced settings moved to other tabs - -### Fixed -- [#1161] AS1/2 deobfuscation broken -- AS1/2 Simplify expressions fix - -## [8.0.0] - 2016-02-18 -### Added -- Debugger - AS1/2 Show registers -- Debugger - display variables in the tree structure -- Debugger - set value of variable -- Debugger - AS1/2 View constantpool -- Debugger - P-code level debugging for both AS1/2 and AS3 -- Basic SVG import for shapes -- Simplify expression setting -- [#1118] Loading characters through ImportAssets - show as readonly -- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 -- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) -- [#1121] Ability to save binary data by its name -- [#1052] Add object to existing frame -- Allow adding tag to main timeline -- AS1/2: Ctrl+click to declaration of variables, registers -- Allow trait specification in pcode import -- Icons for tag types in Dump view -- Show error message when a text tag is invalid (glyph index problem) -- AS3 direct editation - store local register names in debug info = allow to rename them - -### Changed -- New application icon and splash screen -- [#1145] AS3 better declaration type detection, better convert_x instruction handling -- Binary export - use .swf extension for swf files -- Better tree labels in generic tag editor (Raw edit) -- [#758] Allow zooming more than preview area in internal viewer - -### Fixed -- [#1096] FLA export - pretty print -- [#1104] AS1/2/3 Script Importat not working -- [#1107] Text Offset Incorrect fixed -- [#1106] New Shapes replace function fix -- [#1113] It takes too long to switch between rendered sprite -- [#1075] Lenght of DefineText in some cases -- [#1127] autoRenameIdentifiers is not supported in CLI mode -- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed -- [#1103] Foreach variables fixes -- AS3 Switch fixes -- Default clause position in switch -- [#1133] Incorrect frame order for nested sprite -- [#1135] Handle try "to" in p-code correctly -- Font wideOffsets,wideCodes fixed in DefineFont2/3 -- AS3: super method call -- [#1138] All exported videos are the same file which may be broken -- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages -- [#1137] running flashplayer(debugger) executable in Linux/MacOs -- [#1144] Command line argument renameInvalidIdentifiers -- [#1145] double not (!!) not removed -- [#1147] Sprite is exported incorrectly -- [#1148] handing end of stream exception in abc reader, loc exception -- [#1152] Font info tag modified tag was not set => saved swf was corrupt -- [#1154] Some 32bit JRE problems - program won't start -- [#1145] Correct precedence handling on binary operators -- [#116] not resolving unusual tags in DefineSprite - -## [7.1.2] - 2015-12-03 -### Fixed -- AS3 debugger start halt fix -- AS1/2 debugger fix on nondebug enabled SWFs -- AS1/2 debugger fix for functions -- Debug menu item enabled fix -- AS3 local reg index fix -- Advanced settings calendar -- AVM2 instructions in hex view -- [#1070] Incorrect switch decompilation -- [#1098] Import XML fix - -## [7.1.1] - 2015-11-23 -### Fixed -- Critical debugger fix - widelines - -## [7.1.0] - 2015-11-23 -### Added -- AS1/2 debugger -- Breakpoint/IP marker on line beginning - -### Changed -- Starting debugger on demand -- Installer message about playerglobal is only warning now - -### Fixed -- [#1033], [#1083] AS3 deobfuscation issues -- [#1091] AS 1/2 direct editation saving - -## [7.0.1] - 2015-11-18 -### Fixed -- Debugger: Adding breakpoint if script initializer not displayed - -## [7.0.0] - 2015-11-18 -### Added -- AS3 Debugger - breakpoints, stepping, show variables -- Faster AS3 direct editation - -### Changed -- Better Configuration of flashplayer paths - -### Removed -- Removed old "debugger" buttons -- Removed search from browsers cache - inactual code - -### Fixed -- Many AS3 direct editation related bugs -- [#1076] export fix - -## [6.1.1] - 2015-10-30 -### Fixed -- Deobfuscate AS3 metadata -- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix -- [#1063] AS3 direct edit - script initializer fix, generating method names -- XML export/import fixes -- [#1019] Namespace imports fix -- AVM2 code execution fix -- [#1016] AS3 direct editation fixes -- [#1010] AS2 direct editation - internal and override is not a reserved word -- [#1008] pushshort instruction diassembly -- [#1004] this/super can be AS1/2 variable -- [#933] AS3 allow numbers as object literal keys - -## [6.1.0] - 2015-10-26 -### Added -- Open other loaded SWFs during playback (useful for loaders) -- Export uncompressed data from dump tree -- Print performance statistics from commandline -- [#1062] Editing/displaying script initializers -- Enable debugging on SWF file (commandline) - -### Changed -- Faster syntax highlighting -- Better AS1/2 deobfuscator -- [#418] AS3 deobfuscator improved - -### Fixed -- AS call method fix (first parameter is "this") -- [#1047] open all scripts folders -- [#812] decompile fail -- [#1056] deltaY missing when adding a new StraightEdgeRecord -- [#1057] Editing as in editor results in package name moving -- [#991] GUI export -- [#689] Ignore Case not correctly toggled -- [#1060] reversed and/or detection in some cases -- [#1037] isXML call - -## [6.0.2] - 2015-09-12 -### Added -- AS3: Display and direct edit trait Metadata -- Allow to specify tag type on image or shape import -- Convert image tags from commandline -- [#489] Hex decode very large integers -- Add new tags without show empty folders -- Dependent characters in basic tag info -- [#1007] replace bytearray in raw editing -- Italian translation - -### Changed -- AS2 parser - add string to constant pool if there is not enough space -- [#1044] AS2 - order scripts by physical location, name by offset - -### Removed -- Deprecated commandline parameters removed - -### Fixed -- JNA problems on some JDKs -- [#947] Marklevels errors ignored 17a94b7 -- [#953] Mac application permission fix (maybe) -- [#954] IndexOutOfBounds fix -- [#950] AddTrait setting modified fix -- [#945] AS1/2 directeditation fix - member named as global function -- [#957] AS1/2 IndexOutOfBounds fix -- [#956] Invalid jump offsets warning -- [#968] Sprites export with wrong coloring -- [#978] case sensitivity of filenames -- [#955] AS2 decompilation problem -- Image alpha fixes -- [#966] Go to document class -- [#991] scripts exporting -- [#999] save as fla -- [#1000] image export for malformed JPEG3 tags -- [#1017] store alchemy opcodes with wrong order -- [#1030] stack overflow fix - -## [6.0.1] - 2015-07-06 -### Added -- Special §§ instructions marked as red -- [#949] Replace alpha channel from commandline -- AS3 deobfuscation from commandline -- Option to ignore FlashCC/Alchemy packages - -### Changed -- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements - -### Fixed -- AS1/2 deobfuscation fixed -- [#952] Not loading SWF without extension - -## [6.0.0] - 2015-07-04 -### Added -- New AS3 deobfuscation method -- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... -- Allow reload FFDec when no SWF is opened -- [#858] Allow to set compression type in header -- [#905] Show codec details for sound items -- Better alchemy/DomainMemory instruction handling -- Better obfuscated names handling -- [#920] Export instance name to SVG -- [#921] Export html DefineEditText to SVG -- Open multiple files with drag and drop -- Better "multi packs" handling (Alchemy) -- SWF version 29 to flash player 18 mapping -- ImportAssets2 sha1 field -- [#924] Sprites to image from commandline -- AS1/2 direct editation big numbers fix -- Allow to add FILTERs and SHAPERECORDs in generic tag editor -- Enable close all menu when no swf is selected -- Restore modified state even when something goes wrong -- Some old tags added - -### Changed -- AS decompilation highly improved -- Better &&, || handling -- DoABCDefine renamed to DoABC2 -- Separated Sprite export settings - -### Deprecated -- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) - -### Fixed -- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. -- Few menu issues -- [#895] Correct handling CMYK JPEG -- [#884] AS direct edit assignment -- [#899] Show script after AS3 direct editation -- Some AS1/2 parser problems -- [#903] FLA export - fix for missing fontname, lastframe -- [#855] AS3 direct edit - for..in variable declaration fix -- [#850] Constant initialization for same multinames -- [#832] AS3 direct edit - other ABCs resolving fix -- [#904] Cannot export images -- [#910] Missing instructions -- Opening not existent files on restoring last session -- [#922] Edit text leading -- Put image before shape on shape replace -- [#916] Replacing Shape corrupts SWF -- JRE setup parameters fixed -- [#938] Parallel speedup limit fix - -## [5.3.0] - 2015-05-25 -### Added -- Generic tag editor: improved table editing (import/export assets tags, etc.) - -### Changed -- Classic (nonribbon) UI improved - has same items as Ribbon UI -- Icons improvements -- Disabling menu items when work in progress - -### Fixed -- [#897] Classic UI fix - -## [5.2.0] - 2015-05-22 -### Added -- UI8 editbox for swf version in header panel -- Basic tag information panel - -### Changed -- AS1/2: Shown only the constant pool(s) in pcode editor -- Do not allow to chage tag tree selection, when current tag is under editing -- Faster bitmap export -- Using less memory when playing sounds -- Error message changed when the opened file is not swf - -### Fixed -- [#470] panels size after resizing from/to full screen -- [#877] A small glitch after search in AS -- [#878] small glitch after saving P-code or swf file -- [#470] glitch -- [#845] If frame consist 2 DoAction then it imports only first one -- pdf export (when no frame exists) -- text rendering (alpha channel was ignored), -- bmp export (paddings when width%2==1) -- [#883] -dumpSWF option does not work anymore -- [#882] Canvas export border size -- [#760] Internal viewer line linear gradient fill is not working -- [#887] error on export a special swf's P-CODE -- Extensions of exported images fixed - -## [5.1.0] - 2015-05-04 -### Added -- Allow to copy/move multiple tags, and dependencies -- [#842] For reconstruction if debug line info present -- [#841] Loop control for sound preview -- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button -- Scrollbar added to fontpanel -- SWF header editor -- Configure what object types to export in exportdialog - -### Changed -- Better gif exporter -- [#772]: closing loading dialog now cancels the loading of the swf -- [#762] export pcode with different extension - -### Fixed -- CRITICAL: Update System Bug causing updates not working -- [#862] AS3 asm: do not read beyond return/throw instructions -- [#865], [#613]: ribbon prefered width fix -- [#868] export path fix, allow to export buttons -- [#865] TagTree font size problem on high resolution screens -- [#713],[#807] Installer for 4.0+ fails to access Adobe Website -- [#728] Large fonts, [#857] add scroll on DefineFont3 - -## [5.0.2] - 2015-04-18 -### Added -- Reopen last session - -### Fixed -- ffdec.sh file line endings fixed - -## [5.0.1] - 2015-04-18 -### Fixed -- [#860]: Opening bundle (zip, swc, any binary file) files fixed - -## [5.0.0] - 2015-04-18 -### Added -- Color skins -- [#824] Mac OS X package -- [#809] Move left,right buttons for DefineTexts using translatex parameter -- [#805] Editor mode for DefineTexts -- [#825] Hotkeys for next/previous DefineText -- Export/Import symbol classes/export asset tags -- Frame export progress -- [#737] Single file script export -- Displaying changed AS3 scripts in GUI as bold -- Additional character info tags placed under character node -- New icons for other tags (metadata,fileattributes,setbackground,place/remove) -- Metadata tag editor - -### Changed -- Default color skin altered -- [#350] Allow only one running instance (Windows only, can be turned off) -- SWFs in zip based bundles (SWC for example) can be modified & saved -- Performace improvements -- More compact SWF-XML format -- Marking changed parentnodes as bold too - -### Fixed -- [#814] Exporting with scale problem -- [#816] P-code not shown after class initializer trait selection -- [#835] Static initializer improvements -- AS3 direct editing - local register decrement fix -- AS3 direct editing - maintain register order/names -- [#836] AS1/2/3 Correct expression precedence handling -- AS3 preincrement -- [#848] Correct toggling text switches -- [#817] AS1/2 for..in variable declaration -- [#849] Attribute member -- [#852] Ignore case for russian characters -- [#837] AS3 try..finally without catch - -## [4.1.1] - 2015-02-21 -### Added -- Export/Import XML added to ribbon menu -- Few GUI enhancements -- Undo tag changes context menu - -### Changed -- Java 8 now required - -### Removed -- Removed support for Java below 8 - -### Fixed -- [#811] export ActionScript - -## [4.1.0] - 2015-02-18 -### Added -- XML export/import -- confirmation dialogs added -- Add support for non-standard ABC-compressed SWF file -- [#745] Copy tag to another SWF -- [#803] Align text in DefineText - -### Changed -- performance improvements -- [#758] Zoom to fit is dynamic - -### Fixed -- [#738] Frame export -- [#742] Can't edit frames -- [#747] Move tag to adds extra frame -- [#749] Internal viewer Sprite fill color -- [#752] Sound is not stopped -- [#753] Reload swf -- [#759] Decompilation § symbol -- [#766] Can't extract all resources -- [#768] Super calls not being correctly recognized -- [#773] Scripts associated with ClipActions are not shown -- [#776] Stop working after setting "number of threads" to 0 -- [#783] No OK box when edited script or text was saved -- [#785] Text search. Remember last choise, Unicode case insensitive search -- [#787] Search in AS bug (when navigating to searched results) -- [#788] Add DefineCompactedFont Tag to gfx file -- [#790] Impossible to change letters under a font -- [#794] Font extraction fails sometimes -- [#798] Close file streams after export, exporting progress -- [#800] Unexpected deleted carrier return in DefineEditText -- Build fix on Linux -- Fis Startup Script for OpenJDK -- Other minor fixes - -## [4.0.5] - 2014-12-01 -### Added -- Escape control characters in strings, identifier names -- [#676] import text error messages / logging enhancement -- [#734] \xAB escapes, \uABCD escapes -- [#687] AS3 - allowing p-code comments on separate line -- [#709] Text Export to Single File with custom filename - -### Fixed -- [#732] Random freezing - JavactiveX library updated. -- [#730] Not working without ActiveX fix on Windows -- [#735] Automatic deobfuscation not correctly switched (required restart) - -## [4.0.4] - 2014-11-23 -### Changed -- better file cache, removing unneccessary temp files - -### Fixed -- obfuscated identifiers - -## [4.0.3] - 2014-11-23 -### Added -- [#722] Go to next/previous frame -- BMP file format export (images,frames,shapes) and import(images) - -### Fixed -- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type -- [#715] namespace resolving fix -- [#635],[#726] placing cursor inside Unicode characters - -## [4.0.2] - 2014-11-22 -### Added -- show frame number during play -- flashplayer - show controls for DefineSprite -- goto frame -- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design - -### Changed -- [#720]: edited shape tag is not marked as modified after replacing -- reorganized about dialog - -### Fixed -- [#719] null swf name in Proxy after cancelling rename dialog -- flashplayer - font display -- [#723]: saving swf with invalid referenced characters -- DefineCompactedFont paging -- [#288] Less memory usage during FLA export -- Corrected syntax hilighting for AS3 P-code - -## [4.0.1] - 2014-11-12 -### Fixed -- [#713] Installer can continue when no file can be downloaded -- Fixed shapes -- Checking for updates moved to separate thread - -## [4.0.0] - 2014-11-11 -### Added -- [#677] Zoom level in export settings -- internal viewer: linear/srgb gradients -- zooming buttons for flashplayer/internal viewer -- stroke scaling modes for canvas export -- create snapshot button -- [#389] Selecting font face on import -- [#701] Importing font from TTF file -- Reorganized font panel -- [#707] Debugger for logging messages -- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets -- [#685] Getting local register names from debug info can be disabled -- Adding new tags -- [#698] Allowing unicode letters in identifiers -- [#710] Information about deobfuscation in error comments -- One EXE for 32/64 bit, uses percentage memory. -- EXE SplashScreen -- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc -- Config setting to load inner SWFs automatically -- Replace shape with image - -### Changed -- better FlashPlayer integration using JavactiveX library -- Faster building tag tree -- Faster timeline construction -- [#711] Improved folder view - faster and with correct context menu - -### Fixed -- AS2 deobfuscation fixes -- AS2 loops fix -- [#681] Linux script fixes -- AS2 constructor name fix -- [#688] AS3 direct edit fixes -- [#691] AS3 p-code reading/saving fix -- AS3 direct edit -submethod name resolve fix -- frames to html canvas fix -- [#524] Mask layer not applied when nonempty script layer -- [#663] AS3 imports fixes -- Font export of dot character -- Font panel Yes button fixed -- [#702] GFX font reading fix -- Better obfuscated names handling -- [#539] for(each) in declaration fixes - -## [3.0.0] - 2014-09-20 -### Added -- Separated GUI (GPL) and library (now LGPL) -- Editing obfuscated identifiers via new paragraph(§) syntax -- Timeline View with preview and object hilighting -- Show GFX data in dump view -- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline -- Dump view - selecting node -- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption - -### Removed -- Removed deprecated commandline export formats (see --help) - -### Fixed -- FileAttributes tag reading fix -- [#649] GFX reading fixed -- [#656] Search in memory - 64 bit processes fix -- [#661] scripts not showing -- [#664] expanding fillStyles in raw edit -- [#668] add missing character fix, text tags fix -- [#674] texts hilighting initialization fix -- [#675] AS1/2 and/or operator compilation -- [#632] Locking file after opening (cannot save, etc.) -- [#651] Unnecessary removing expression killed in unreachable part -- [#678] Windows batch file paths fixed -- [#672] Disabling transparency slider on RGB only selection -- [#684] Sound streams inside DefineSprites, soundstream handling - -## [2.1.4] - 2014-08-23 -### Added -- AS1/2: New method for deobfuscation (can be switched off in settings) -- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters - -### Fixed -- [#647] Skipping FileAttributesTag with Parallel speedup on -- [#648] Export from embedded SWF - -## [2.1.3] - 2014-08-18 -### Added -- Show "save" and "saveas" in application menu -- Saving data range in dump view -- Show actions, abcdata in dumpview (context menu on the tree node) -- [#612] show color in hex format - -### Changed -- Faster dump info collecting (less memory) -- Allow selecting multiple files in open file dialog - -### Fixed -- [#623] ffdec.sh UNIX file endings, executable -- [#624] search in embedded swf files -- [#632] AS1/2 Unnecessary GetVariable before NewObject -- [#627] filter swf not working -- LZMA saving -- Export pcode&hex from commandline -- [#640] text import fixed, ignore BOM - -## [2.1.2] - 2014-07-20 -### Added -- Dump view -- Context menu: Jump to character, raw edit all tags -- Catalan translation -- SWF header display - -### Fixed -- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes -- [#592] AS3 Multiname resolving in P-code causing different bytecode -- [#585] AS3 moving popped values to output -- [#578] Always on top fixed on search results -- [#501] GotoFrame2 fix -- [#616] Frames to PNG export -- Export context menu -- [#559] Bitmap export opacity -- [#401] Placeobject 3/4 fix -- [#593] Return object newline -- [#594] Setting for curly brace - -## [2.1.1] - 2014-06-05 -### Added -- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers -- AS1/2 direct edit - global functions improvements -- AS1/2 negate operator, unary minus operator -- Opening SWFs in BinaryData tags -- AS1: Old string operators support, and/or, <> operator (editation) -- Statusbar loading animation improved -- [#579] AS3 direct editation - removing old class/methods from ABC -- remove character without the dependencies (remove only the place/remove tags) -- Running on system with no home directory -- [#428] PDF export (as images only) -- Commandline FlashPaper to PDF export -- Select frames / Characters commandline options - -### Changed -- [#337] quickfind visibility improved -- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) - -### Fixed -- [#576] AS1/2 direct editation: DefineFunction2 fix -- AS1/2 property fix -- AS1/2 typeof operator fix -- [#250] line spacing fix -- PlaceObject 3-4 className -- [#579] AS3 direct editation bugfixes - property resolving, integer values -- Morphshape canvas export fix -- Canvas export fix - closing path -- [#580] Rename invalid identifiers commandline fix -- [#510] JSyntaxPane find and replace dialog wrap around fix -- No more frame caching during export => memory saving (like [#583]) -- [#586] DropShadow filter fix -- Canvas export colortransform fix - -## [2.1.0 update 2] - 2014-05-08 -### Added -- AS3 decompilation/editation: Vector initializers -- AS3 direct editation: more classes in one file - -### Fixed -- [#574] DefineSprite editing fix -- Various AS3 direct editation fixes - -## [2.1.0 update 1] - 2014-05-05 -### Added -- Portugese-brasilian translation - -### Changed -- HTML Canvas export improvements - -### Fixed -- Various AS3 direct editation bugs, like [#570] - -## [2.1.0] - 2014-05-01 -### Added -- AS3 direct editation (Experimental!) -- Frames SVG Export -- Shape/MorphShape/Frames HTML 5 Canvas Export -- [#559] morphshapes as animated SVG -- [#563] Single file text export/import -- Font WOFF export -- Advanced settings dialog with tabs, config names, descriptions - -### Fixed -- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments -- Internal viewer: Filters fix - -## [2.0.1 update 2] - 2014-04-05 -### Fixed -- [#557] AS3 null namespace fix - p-code not working - -## [2.0.1 update 1] - 2014-04-04 -### Fixed -- [#556] Goto main class on startup fix -- [#557] Nullpointer fix (private namespaces) - -## [2.0.1] - 2014-04-03 -### Added -- Thumbnail view -- Font TTF export -- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) -- Expand all context menu -- Internal viewer: Button mouse move and click handling -- Playing sounds without flash player -- Internal viewer: Sounds on stage -- All sounds to WAV export -- Internal viewer: Showing texts, dynamic text border/fill -- [#504]: Unicode characters in JSyntaxPane -- Internal viewer: showing object under cursor -- Folder icons -- Sound/Image format on command line. -- Removing placeobject tags -- Removing frames -- AS: "elseif" statements -- Code formatting: space before parenthesis - -### Changed -- Single frames animated. - -### Fixed -- [#529] limit the number of displayed binaryData bytes -- [#538] Interface are sometimes dynamic -- [#537] super is sometime preceded by a dot -- [#540] Saving SWF changes very large static uint values -- [#387] Frames preview bugged -- AS:loop mismatch fix on parallel speedup -- [#552] Some timeout exceptions -- [#494] Fixed nightly builds updates - -## [2.0.0] - 2014-03-02 -### Added -- Generic tag tree editor -- Timeline view (stub only) -- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) -- [#513]: command line option to extract swf from binary file -- Configurable code formatting (Indentation + brace position) -- [#262] Export FLA: Font character ranges export -- Configurable checking for updates - -### Changed -- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes -- Improved commandline usage -- Automatic deobfuscation default value set to False (See News on webpages) -- Check for updates can be configured to inform about Nightly builds aswell - -### Deprecated -- Some commandline options are now deprecated, see --help - -### Fixed -- [#499] Cannot save via Proxy fixed -- [#504] font name reading fixed -- [#508] Support for OS without GUI -- [#305] Export FLA: empty sound layers -- [#312] Export FLA: Improved Shape/MorphShape fix -- [#503] Export FLA: Smoothing invalid shapes -- [#401] Invalid GFX tags in non GFX files -- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues -- [#361] FFDec icon is not visible on application start -- [#392] Video stream data fix -- [#516] AS3 P-code editor - Null name namespace handling - -## [1.8.1 update 1] - 2014-02-02 -### Fixed -- [#495] font embedding fix -- [#496] date format in new version dialog -- cosmetic changes - -## [1.8.1] - 2014-01-30 -### Added -- [#299] replace DefineBits images -- [#303] open folder with exported FLA -- [#324],[#346] SWC/zip/other binary file support -- [#371] detailed logging -- [#426] command line switch to rename identifiers -- [#457] clear recent opened files list -- [#458] save selected system font for swf fonts -- [#460] text editor: do not scroll to the end automatically -- [#462] font embedding dialog: show more sample characters -- [#463] global search in texts -- [#465] make font properties editable -- [#466] font preview - -### Changed -- [#369] new SVG and preview image rendering -- [#390] refresh font list without reloading the application -- [#453] update texts aftert adding new character to a font tag -- [#459] remember text panel splitter position -- [#461] font panel gui redesigned - -### Fixed -- [#451] dialog windows are not on the center of the screen -- [#454] Text syntax highlighting -- [#455],[#465] classic interface issues -- [#474] changeing language only available one time -- [#477] log window localization -- [#481] SVG export fix -- [#484] Oversized advance value after editing DefineText with DefineFont2 font -- [#493] missing search results - -## [1.8.0 update 1] - 2013-12-27 -### Added -- [#453] refresh (edit+save action) all texts button - -### Fixed -- Flash panel and font panel fixed - -## [1.8.0] - 2013-12-27 -### Added -- [#350] Allow to open multiple SWFs -- [#365] Filter fake SWFs during memory search -- [#366] Allow to sort the result list in memory search window -- [#429] Auto rename invalid identifiers setting -- [#447] Non-ribbon interface - -### Fixed -- [#354] Infinite decompilation fixed -- [#438] Case sensitive Command line arguments fixed -- [#436] Saving actionscript fixed -- [#446] Precedence issue fixed -- [#451] Dialogue window positions on a multi-monitor configuration fixed - -## [1.7.4 update 1] - 2013-12-05 -### Added -- [#426] Command line parameter for renaming invalid identifiers - -### Fixed -- [#427] Exception on linux fixed -- [#405], [#420], [#421] Some decompilation issues fixed -- [#430] Configuration default value problem fixed -- [#397], [#431] Deobfuscation stucked sometimes problem fixed - -## [1.7.4] - 2013-11-10 -### Added -- [#169] hexedit method body bytes -- [#335] last opened files -- [#404] Exporting P-code and Hex + console parameters -- [#407] register name is configurable -- Advanced settings -- Cancellable decompiling, exporting and searching - -### Fixed -- [#399], [#400] performance optimizations - -## [1.7.3 update 2] - 2013-09-29 -### Fixed -- [#398] AS3 p-code values with index 0 (null) - -## [1.7.3 update 1] - 2013-09-28 -### Added -- [#382] AS3: Adding new method - -## [1.7.3] - 2013-09-27 -### Added -- AS3: Multiname and namespace editing. -- [#382],[#396] AS3: Adding new trait (method/slot/const) -- AS3: Highlighting pair parenthesis/bracket -- AS3: Editing various new P-code parameters -- AS3: Highligting of trait names/types/parameters -- AS3: Global rename identifier for traits -- [#357] Playback controls for DefineSound -- [#391] AS3: Native methods mark -- [#395] Support for GFx ScaleForm SWFs (with fonts editing) -- Displaying fonts in internal viewer -- [#334], [#395] New Embed font dialog - selecting character ranges with preview -- Replacing characters in font (Yes/No to all dialog) - -### Changed -- AS3: New p-code syntax inspired by RABCDasm -- AS3: Editing whole trait in one textarea -- AS3: Removed messages about adding new constants -- AS3: Modified colors in editor -- [#301] Clearing error log causes icon to reset - -## [1.7.2 update 2] - 2013-09-13 -### Changed -- Updated translations - -### Fixed -- [#383] Firefox browser cache handling -- [#386] SWF resizing - -## [1.7.2 update 1] - 2013-09-11 -### Changed -- updated translations - -### Fixed -- [#383] Fixed cache loading when Firefox not used - -## [1.7.2] - 2013-09-11 -### Added -- [#357] Sounds Preview (Windows only) -- Movies preview (Windows only) -- Whole SWF display -- Preview controls (Play,Pause,Stop) -- Search SWFs in browsers cache (Firefox, Chrome) -- [#367] Memory search: Save selected files to disk -- Portugese translation - -### Changed -- [#380] Faster displaying DefineBitsLossless(2) images - -### Fixed -- [#292] Background color for Fonts preview fixed -- [#375] Replacing DefineBitsLossless image tag -- [#378] Refreshing language of JSyntaxPane -- MORPHGRADIENT reading fix - -## [1.7.1] - 2013-08-25 -### Added -- Loading SWFs from other processes memory (Windows only, sorry) -- [#325] Spanish translation -- [#210] Ukrainian and Dutch translation -- [#355] Chinese translation -- [#292] Change background color in SWF preview -- [#301] Clear errors log button -- [#313] Command line parameter for ignore all errors -- [#330] Protection agains adding same characters -- [#332] AS1/2 Showing elapsed times during commandline export -- [#344] Reload opened SWF -- Decompilation timeouts - -### Fixed -- [#295] Export FLA: wrong font -- [#297] Too bright titlebar button colors -- [#307] Export FLA: fixed empty textfields -- [#309] Export FLA: static text letter spacing detection -- [#310] Export FLA: Strokes -- [#311] Export FLA: BitmapFill -- [#327] AS1/2 Disassembly error stop application -- [#328] Fixed replacing images in DefineBitsJPEGX -- [#333] AS1/2 action reading -- [#336] Graph window is too small -- [#337] Quick search panel barely visible in same cases -- [#338] Expand/collapse icon in errorlog - -## [1.7.0 update 1] - 2013-08-11 -### Added -- [#315] German translation (partial) - -### Fixed -- [#123] Better context menu integration -- [#243],[#326] Better deobfuscation -- [#287] Typo in parallelSpeedUp parameter -- [#290],[#291] improved select language dialog -- [#294] minor GUI fixes -- [#298] Progressbar positition issues -- [#296] better export directory remembering -- [#314] Better deobfuscating filenames -- [#316] Readonly editor panes accepted Ctrl+Z/Y -- [#318] Export FLA: Shapes export fix -- [#319] AS3: Improved try..catch..finally decompilation -- [#323] AS3: Fixed default switch part - -## [1.7.0] - 2013-08-03 -### Added -- Listing contributors on about page -- [#223] AS2: Detecting uninitialized class fields -- [#250] Export FLA: Detecting static fields margin and spacing -- [#261] Export FLA: AS1/2 Frame scripts on first layer -- [#269] Commandline parameters for switching configuration -- [#274] AS3 Displaying elapsed time during commandline export -- [#275] AS3 Removing returnvoid as last statement - -### Changed -- New GUI based on Substance look and feel -- Menu changed to ribbon panel -- New round icon -- [#258] AS1/2: Improved chained assignments -- [#267] Starting program without choosing a file -- [#286] Saving to temp file first - -### Fixed -- [#123] Improved context menu integration on Windows -- [#233] Globally rename identifier deselects item in the tree -- [#235] Export FLA: Dynamic text fields coordinates -- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation -- [#251] Export FLA: Fixed filter strength rounding -- [#257] Export FLA: Text field color and size issues -- [#259] Fixed images alpha -- [#260] Export FLA: Labels position -- [#268] AS1/2 Function parameter shown as register instead loc -- [#272] AS3 Class initializer editation fix -- [#276] Fixed anonymous/inline functions handling -- [#220] Improved editing fonts / texts -- [#284],... other small fixes - -## [1.6.7] - 2013-07-20 -### Added -- [#220] Selection of font to import characters from -- [#232] Automatically add .swf extension in saveas dialog -- [#253] Abort/Retry/Ignore dialog on errors with file saving - -### Changed -- Improved translations - -### Fixed -- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation -- [#203] AS1/2 improved direct editing -- [#220] Adding characters to font fix -- [#225] AS1/2 object literal without name quotes -- [#236] AS1/2 Rename invalid identifiers issues -- [#245] AS3 Double space around "as" keyword -- [#247] AS3 Scrolling to main class at startup -- [#248] Memory issues (slowdown) -- [#254] Expressions as commands -- [#255] Windows 7 loading issues -- [#256] AS3 Object literal in return clause -- SWF text parsing (new lines) -- Labels size by locales - -## [1.6.6 update 2] - 2013-07-16 -### Fixed -- [#241] Program could not be started - -## [1.6.6 update 1] - 2013-07-16 -### Changed -- Better localization support - -### Fixed -- [#238],[#239],[#240] Fixed deobfuscation related problems -- [#237] Parentheses in AS1/2 add,subtract - -## [1.6.6] - 2013-07-16 -### Added -- [#217] Russian translation (focus) -- [#219] Hungarian translation (honfika) -- [#224] Swedish translation (Capasha) -- [#220] Adding characters to Fonts, displaying font info -- [#121] Search progress indication -- Error log - -### Changed -- [#203] Improved direct editing of AS1/2 -- [#207] Update SWF preview after switching external/internal flash player - -### Fixed -- [#151] Memory caching -- [#171] Skipping invalid AS3 code - newobject, newarray -- [#206] AS3 switch problem -- [#208] Renaming anonymous functions -- [#209],[#229] FLA export texts positions -- [#213],[#221] other decompilation issues -- [#225] AS object literal broken with ternar operator -- [#226] onClip indentation in FLA export -- [#227] gotoAndStop wrong frame index -- [#230] FLA export missing strokes -- Shapes viewer - missing strokes - -## [1.6.5 update 1] - 2013-07-09 -### Fixed -- [#151] Fixed caching in memory -- [#172] AS1/2 constant detection fix -- [#174] Renaming SymbolClass fix -- [#175],[#212] Fixed create directory issues on export -- [#185],[#186] on-clip actions indentation -- [#197] AS1/2 Missing storeregister before switch -- [#216] AS2 Fixed field order -- [#213] AS2 Fixed var fields quotes, switch nullpointer - -## [1.6.5] - 2013-07-08 -### Added -- Multilanguage support (currently English and Czech) -- [#151] Option for caching in memory instead of files -- [#168] Export selection in tree context menu -- [#176] option to show main class on startup -- [#177] saving window maximized state -- [#202] Removing tags other than DefineSprite - -### Changed -- [#173],[#190] Better renaming -- [#129], [#153] Better deobfuscation -- [#180] better error handling -- [#185],[#186] better displaying and exporting onclip actions - -### Fixed -- [#123] Better context menu integration -- [#136] FLA export - text sizes -- [#137],[#179] foreach issues (hasNext) -- [#144] Plain text export - empty line fix -- [#144] Not displaying texts -- [#164] DefineMorphShape issues -- [#167] Sprite tag appearing twice in export filename -- [#170] AS3 Try in loop -- [#172] loop detection fix -- [#175] use empty namespace -- [#178] AS subtract with negate -- [#181] AS3 missing quotes in object field -- [#182] missing namespace imports -- [#183] wrong stage size -- [#184] wrong video link -- [#189] Fixed three dots in tree -- [#191] Focalgradient fill fix -- [#195] AS2 issues -- [#196],[#197] switch issues -- [#198] DefineFont2 empty check -- [#200] DefineBitsLossLess fix -- [#201] Nonworking main window in Linux/MacOS (due toAssociation) - -## [1.6.4 update 1] - 2013-06-30 -### Fixed -- [#166] For loops detection -- [#165] AS3:direct lookupswitch support - -## [1.6.4] - 2013-06-30 -### Added -- [#63] Globally rename identifier -- [#67] Deobfuscation - rename identifiers according to type -- [#117] Drag & Drop SWF file to main window opens it -- [#123] Context menu integration on Windows -- [#127] Drag & Drop items from tree outside of application -- [#134] AS3: Find document class -- [#144] New lines in plain text export -- [#155] Remembering window size + splitbar positions between runs - -### Changed -- [#142] Using exportassets tag for tag names -- [#146] Display AS2 classes as tree of packages -- Better loop detection - -### Fixed -- [#129] AS1/2: not refreshing decompiled after rename -- [#130] Renaming SymbolClass identifiers too -- [#132] Renaming identifiers renamed strings -- [#136] Invalid text positions in FLA export -- [#145] Unicode support -- [#147] Escape filenames during obfuscated AS3 export -- [#148] Better package vs classname handling -- [#152] Empty if branches not inverted -- [#156] Better search handling (not freezing) -- [#157] AS3: Try statements in loops -- [#158] Graph repaint problem -- [#159] AS3: Improper rest parameter handling -- [#160] Commandline binaryData export -- [#162] DefineBitsJPEG2 image replacing -- [#163] Closing SWF file after loading -- other minor fixes - -## [1.6.3 update 2] - 2013-06-21 -### Changed -- [#149] Ifs with empty onTrue branches now inverted - -### Fixed -- [#150] Long line restriction removed - -## [1.6.3 update 1] - 2013-06-21 -### Fixed -- Memory limit decreased - FFDec was not working on 32 bit JVM. - -## [1.6.3] - 2013-06-20 -### Changed -- Parallel SpeedUp can be disabled in menu -- Better loop detection - -### Fixed -- [#119] Replacements file not found issue -- [#101] AS1/2 postincrement fix -- [#114],[#116],[#135],[#141] Fixed loop detection -- [#102] Fixed loop highlighting in export -- [#124] Flash player file path detection -- [#128] Improved imports -- [#135] CommentItem fix -- [#129],[#131] Better deobfuscation -- [#104] AS3 inc/dec local deobfuscation fix -- [#113],[#133],[#140] Memory limit increased - -## [1.6.2] - 2013-06-09 -### Added -- New loop detection algorithm - -### Changed -- [#108] - Faster loading and decompiling (Parallelism) -- Improved Internal flash viewer - shapes and morphshapes - -### Fixed -- Ternar operator fix -- [#102] Fixed Shapes to FLA export -- AS1/2 class detection fix -- [#105],[#104],[#101] fixed via new loop detection - -## [1.6.1] - 2013-06-03 -### Added -- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) -- [#109], [#106], [#107] some code improvements - -### Changed -- Application needs Java 1.7 to run - -### Removed -- Support for Java before 1.7 - -### Fixed -- [#102], [#110] AS3: Class highlight fix -- [#103] AS3:Fixed setslot handling -- [#104] AS3:Inc/Declocal nullpointer fix -- [#104] Multiple conditions in loop fix -- [#111] AS3:Object literal truncates line -- [#105] Better do while..break handling -- loop fixes - -## [1.6.0 update 1] - 2013-05-25 -### Added -- better FLA export - -### Fixed -- Many FLA export related bugs (like [#96]) -- [#98] Empty initializers do not cause empty lines now -- [#99] small logging issues -- [#100] large obfuscated code support - -## [1.6.0] - 2013-05-20 -### Added -- Export to FLA (Experimental BETA!) -- [#85] Search text in all ActionScripts -- SWF 11 support - -### Fixed -- [#79] ActionStartDrag constraint fix -- [#92] Inversed GreaterThan/LessThan -- [#93] AS1/2 fixed switch detection -- [#94] AS1/2 ActionTry - register cast fix -- [#95] Better script end handling - -## [1.5.2] - 2013-05-05 -### Added -- Improved automatic update system (changes log). -- Handling script traits as separate objects. -- [#86] open/save file dialog now accepts absolute paths in quotes - -### Fixed -- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 -- [#88] Fixed graph building -- [#89] AS3: bracket in property name lead to missing dot -- [#82] printgraph issue - -## [1.5.1 update 1] - 2013-05-04 -### Added -- Exporting texts via commandline -- Exporting all via commandline - -### Fixed -- DefineText2 color parameter -- AS3 GetSlot,SetSlot -- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... -- [#83] Fixed images transparency (zlib fix) -- Fixed graphparts with only jump in it (obfuscators) -- MORPHGRADIENT FIX -- Trasparency in DefineBitsJPEG3 and 4 -- Displaying shapes,morphshapes and sprites with bitmaps - -## [1.5.1] - 2013-05-01 -### Added -- Support for larger switches (10+cases) -- Editing text tags -- [#65] Exporting text tags -- Removing sprites -- Replacing images - -### Fixed -- DefineMorphShape2 fix -- [#79] - AS1/2 class detection fix, wrong printgraph fix -- [#78] - script trait slots fix - -## [1.5.0 update 1] - 2013-04-21 -### Fixed -- Automatic deobfuscation config defaulted to Off for AS1/2. - -## [1.5.0] - 2013-04-20 -### Added -- Direct editing of ActionScript 1/2 code (Beta) -- AS1/2: ifFrameLoaded support -- Automatic deobfuscation can be disabled in the menu -- [#48] - Decompile only specified class (commandline option) -- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices -- [#66] - Decompressing LZMA via commandline -- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) -- [#69] - DoABC vs DoABCDefine tags decompilation -- [#75] - Comma separator in while/do..while conditions, better if..return handling -- AS1/2: parsing NaN,Infinity value (Fix for [#73]) - -### Changed -- New icons (edit/save/cancel and main menu) - -### Fixed -- [#62] - Errors on not defined character tags (import tag) -- [#72] - First ternary operator expression was always true -- Fixed many deobfuscation related bugs - -## [1.4.3 update 2] - 2013-04-10 -### Fixed -- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) -- Try to fix lib/FlashPlayer.exe issue - -## [1.4.3 update 1] - 2013-04-06 -### Fixed -- [#38] - Indentation in const/var initializers, missing semicolon -- [#56] - Test output left in last release -- [#57] - Unknown instructions now do not log an exception (obfuscators do this) -- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. -- AS3 loops fix -- While true fix - -## [1.4.3] - 2013-04-04 -### Added -- AS1/2 Better deobfuscation - -### Fixed -- [#45] - Unicode characters fix -- [#50] - AS1/2 Function body deobfuscation fix -- [#51] - Displaying java class names instead of expressions -- [#52] - AS1/2 Better constantpool detection (deobfuscation) -- [#38] - AS3 indentation in initialized const/var value for newobject -- Fixed ImportAssets2 tag id - -## [1.4.2 update 1] - 2013-03-25 -### Fixed -- [#47] - wrong AS3 deobfuscation -- AS3 deobfuscation issues -- AS3 switch - -## [1.4.2] - 2013-03-24 -### Added -- [#42] - Displaying code as hex -- AS1/2: Renaming identifiers (deobfuscation) -- AS1/2,AS3: Better deobfuscation -- Storing configuration to user home -- Installer for Windows systems - -### Changed -- Graph button changed to icon. - -### Fixed -- [#39] - AS1/2 NewMethod..Pop fix -- [#40] - No logging + For..in..return decompilation -- [#44] - DefineFont2 fix -- [#36] - Multiname with invalid index -- [#43] - Ternary operator and more -- [#46] - Ifs with empty branches got ignored -- [#3] - Ignoring unknown opcodes -- Logging exceptions during export - -## [1.4.1] - 2013-03-10 -### Added -- Exporting sounds -- Better AS1/2 deobfuscation (disassembly & decompilation) - -### Fixed -- Exporting only first 1000 frames of the movie -- Decompiled code was not refreshed on AS1/2 changes -- Application no longer creates empty directories on export - -## [1.4.0 update 1] - 2013-03-04 -### Fixed -- [#37] - AS3: Reversed loop conditions - -## [1.4.0] - 2013-03-03 -### Added -- AS3: ignoring return void at the end of methods -- New icons - Silk icons -- AS3: Traits list sort button -- Better Graph display -- Frames view -- Exporting of movies (No audio) -- Some AS3 related Tests -- Homepage & Donate link in the menu - -### Changed -- Tree view instead of tabs -- AS1/2 and AS3 now share same decompiling method. - -### Fixed -- [#34] - Reversed loop conditions -- [#35] - Fixed unicode strings (Japanese) - -## [1.3.1] - 2013-02-23 -### Changed -- Flash player no longer uses SWT library - -### Fixed -- [#32] - AS2: Action255 bug -- [#31] - Erorrneous tags are now ignored -- DefineBitsLossLess 1&2 on 8bit colormapped images - -## [1.3.0] - 2013-02-17 -### Added -- Decompilation is more resistant to obfuscation -- Shapes SVG export -- AS2: Decompiling classes & interfaces -- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) -- AS3: Deobfuscation menu -- Graph button for displaying code flow Graph - -### Changed -- Complete new decompiling method in both AS1/2 and AS3 -- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". -- To edit source, Edit button must be pressed first (Due to click&go feature) - -### Fixed -- AS3: Method info editor fixed -- Edittext & Button displaying - -## [1.2.0] - 2013-01-19 -### Added -- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). -- Images display and export -- AS2: Exporting selection -- Progressbar during loading - -### Changed -- One merged window for AS1/2 and 3. -- Updated icons - -### Fixed -- AS3: xml attrib, switch in anonymous function (in AS2 too) - -## [1.1.0] - 2013-01-02 -### Added -- Checking for updates -- AS2: Exporting -- AS3: Decompiling whole scripts instead of just classes -- AS3: Exporting selected scripts -- AS3: Script search bar -- AS3: List of DoABCTags now has default "- all -" item -- AS3: Better imports, use namespaces -- AS3: XML related instructions -- AS3: Anonymous functions with names -- AS3: Better initialization of const values -- Logging exceptions to log.txt file - -### Fixed -- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops - -## [1.0.1] - 2012-12-26 -### Added -- AS3: Runtime namespace resolving -- AS3: Arguments variable -- AS3: Better recognizing Pre/Post Increments/Decrements -- AS3: Better declarations - -### Fixed -- AS3: Fixed static variables - -## [1.0.0] - 2012-12-24 -### Added -- Support for LZMA compressed files -- AS3: Detecting local register types for declaration. -- AS3: Displaying inline functions -- AS3: Last save/open dir is remembered -- AS3: Better usage detection for multinames -- AS3: Commandline arguments for exporting -- AS3: Better chained assignments -- AS2: FSCommand2 instruction support -- Proxy: Mimetype application/octet-stream added -- Added executable for Windows users. - -### Changed -- AS3: GUI - Constants tab moved to the top -- AS3: Deobfuscation is now optional, can be accessed via menu - -### Fixed -- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) -- Other minor fixes - -## [beta 1] - 2011-07-30 -### Added -- AS3: Automatic computing method body parameters (EXPERIMENTAL) -- AS3: Editing return type of methods -- AS3: Editing type and default value for variables/constants (Slot/Const traits) -- AS1/2: Few enhancements -- About dialog - -### Changed -- Gui: Updated Icons - -### Fixed -- AS 1/2: Fixed large bug causing Ifs to not decompile properly -- Proxy: Some minor fixes - -## [alpha 10] - 2011-07-13 -### Added -- AS3:Highlighting actual line -- AS3:Completing instruction names via Ctrl+Space -- AS3:Editing method parameters, method body parameters via tab panel -- AS3:ByteCode minor_version 17 supported - decimal datatypes -- AS3:Local variables and method parameters take name from debug information if present -- AS3:Automatic renaming of classes/methods when obfuscated names -- AS3:Better error messages (When cannot decompile obfuscated code) - -### Fixed -- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) -- AS3:Hilighting fixes -- AS3:Fixed decrement/increment statements decompilation -- AS3:Decompiler now adds variable declarations on the beginning of decompiled method -- AS3:Try/catch statements fixed when debug information present -- AS3:Fixed for each statements -- AS3:Other minor fixes - -## [alpha 9] - 2011-07-02 -### Added -- AS3: Added disassembling of some new types of instructions -- AS3: Exporting source as PCode - -### Fixed -- AS3: Many other bugfixes... - -## [alpha 8] - 2010-09-19 -### Added -- AS3: Editing exceptions -- AS3: Finding usage of multinames from constant table - -### Changed -- AS1/2: Better GUI -- AS1/2: Better decompiling of Ifs, For..in - -## [alpha 7] - 2010-09-04 -### Added -- Initial public release - -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev -[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 -[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 -[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 -[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 -[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 -[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 -[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 -[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 -[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 -[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 -[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 -[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 -[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 -[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 -[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 -[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 -[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 -[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 -[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 -[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 -[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 -[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 -[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 -[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 -[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 -[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 -[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 -[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 -[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 -[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 -[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 -[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 -[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 -[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 -[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 -[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 -[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 -[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 -[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 -[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 -[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 -[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 -[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 -[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 -[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 -[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 -[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 -[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 -[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 -[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 -[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 -[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 -[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 -[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 -[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 -[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 -[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 -[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 -[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 -[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 -[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 -[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 -[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 -[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 -[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 -[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 -[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 -[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 -[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 -[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 -[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 -[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 -[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 -[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 -[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 -[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 -[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 -[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 -[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 -[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 -[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 -[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 -[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 -[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 -[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 -[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 -[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 -[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 -[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 -[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 -[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 -[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 -[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 -[#1156]: https://www.free-decompiler.com/flash/issues/1156 -[#1171]: https://www.free-decompiler.com/flash/issues/1171 -[#1170]: https://www.free-decompiler.com/flash/issues/1170 -[#1241]: https://www.free-decompiler.com/flash/issues/1241 -[#1162]: https://www.free-decompiler.com/flash/issues/1162 -[#1199]: https://www.free-decompiler.com/flash/issues/1199 -[#1151]: https://www.free-decompiler.com/flash/issues/1151 -[#1128]: https://www.free-decompiler.com/flash/issues/1128 -[#1163]: https://www.free-decompiler.com/flash/issues/1163 -[#1172]: https://www.free-decompiler.com/flash/issues/1172 -[#1174]: https://www.free-decompiler.com/flash/issues/1174 -[#1183]: https://www.free-decompiler.com/flash/issues/1183 -[#1193]: https://www.free-decompiler.com/flash/issues/1193 -[#1200]: https://www.free-decompiler.com/flash/issues/1200 -[#1198]: https://www.free-decompiler.com/flash/issues/1198 -[#1205]: https://www.free-decompiler.com/flash/issues/1205 -[#1194]: https://www.free-decompiler.com/flash/issues/1194 -[#1210]: https://www.free-decompiler.com/flash/issues/1210 -[#1217]: https://www.free-decompiler.com/flash/issues/1217 -[#1244]: https://www.free-decompiler.com/flash/issues/1244 -[#1247]: https://www.free-decompiler.com/flash/issues/1247 -[#1236]: https://www.free-decompiler.com/flash/issues/1236 -[#1251]: https://www.free-decompiler.com/flash/issues/1251 -[#1265]: https://www.free-decompiler.com/flash/issues/1265 -[#1268]: https://www.free-decompiler.com/flash/issues/1268 -[#1161]: https://www.free-decompiler.com/flash/issues/1161 -[#1118]: https://www.free-decompiler.com/flash/issues/1118 -[#409]: https://www.free-decompiler.com/flash/issues/409 -[#1132]: https://www.free-decompiler.com/flash/issues/1132 -[#1134]: https://www.free-decompiler.com/flash/issues/1134 -[#1121]: https://www.free-decompiler.com/flash/issues/1121 -[#1052]: https://www.free-decompiler.com/flash/issues/1052 -[#1145]: https://www.free-decompiler.com/flash/issues/1145 -[#758]: https://www.free-decompiler.com/flash/issues/758 -[#1096]: https://www.free-decompiler.com/flash/issues/1096 -[#1104]: https://www.free-decompiler.com/flash/issues/1104 -[#1107]: https://www.free-decompiler.com/flash/issues/1107 -[#1106]: https://www.free-decompiler.com/flash/issues/1106 -[#1113]: https://www.free-decompiler.com/flash/issues/1113 -[#1075]: https://www.free-decompiler.com/flash/issues/1075 -[#1127]: https://www.free-decompiler.com/flash/issues/1127 -[#1103]: https://www.free-decompiler.com/flash/issues/1103 -[#1133]: https://www.free-decompiler.com/flash/issues/1133 -[#1135]: https://www.free-decompiler.com/flash/issues/1135 -[#1138]: https://www.free-decompiler.com/flash/issues/1138 -[#1139]: https://www.free-decompiler.com/flash/issues/1139 -[#930]: https://www.free-decompiler.com/flash/issues/930 -[#1137]: https://www.free-decompiler.com/flash/issues/1137 -[#1144]: https://www.free-decompiler.com/flash/issues/1144 -[#1147]: https://www.free-decompiler.com/flash/issues/1147 -[#1148]: https://www.free-decompiler.com/flash/issues/1148 -[#1152]: https://www.free-decompiler.com/flash/issues/1152 -[#1154]: https://www.free-decompiler.com/flash/issues/1154 -[#116]: https://www.free-decompiler.com/flash/issues/116 -[#1070]: https://www.free-decompiler.com/flash/issues/1070 -[#1098]: https://www.free-decompiler.com/flash/issues/1098 -[#1033]: https://www.free-decompiler.com/flash/issues/1033 -[#1083]: https://www.free-decompiler.com/flash/issues/1083 -[#1091]: https://www.free-decompiler.com/flash/issues/1091 -[#1076]: https://www.free-decompiler.com/flash/issues/1076 -[#1068]: https://www.free-decompiler.com/flash/issues/1068 -[#1063]: https://www.free-decompiler.com/flash/issues/1063 -[#1019]: https://www.free-decompiler.com/flash/issues/1019 -[#1016]: https://www.free-decompiler.com/flash/issues/1016 -[#1010]: https://www.free-decompiler.com/flash/issues/1010 -[#1008]: https://www.free-decompiler.com/flash/issues/1008 -[#1004]: https://www.free-decompiler.com/flash/issues/1004 -[#933]: https://www.free-decompiler.com/flash/issues/933 -[#1062]: https://www.free-decompiler.com/flash/issues/1062 -[#418]: https://www.free-decompiler.com/flash/issues/418 -[#1047]: https://www.free-decompiler.com/flash/issues/1047 -[#812]: https://www.free-decompiler.com/flash/issues/812 -[#1056]: https://www.free-decompiler.com/flash/issues/1056 -[#1057]: https://www.free-decompiler.com/flash/issues/1057 -[#991]: https://www.free-decompiler.com/flash/issues/991 -[#689]: https://www.free-decompiler.com/flash/issues/689 -[#1060]: https://www.free-decompiler.com/flash/issues/1060 -[#1037]: https://www.free-decompiler.com/flash/issues/1037 -[#489]: https://www.free-decompiler.com/flash/issues/489 -[#1007]: https://www.free-decompiler.com/flash/issues/1007 -[#1044]: https://www.free-decompiler.com/flash/issues/1044 -[#947]: https://www.free-decompiler.com/flash/issues/947 -[#953]: https://www.free-decompiler.com/flash/issues/953 -[#954]: https://www.free-decompiler.com/flash/issues/954 -[#950]: https://www.free-decompiler.com/flash/issues/950 -[#945]: https://www.free-decompiler.com/flash/issues/945 -[#957]: https://www.free-decompiler.com/flash/issues/957 -[#956]: https://www.free-decompiler.com/flash/issues/956 -[#968]: https://www.free-decompiler.com/flash/issues/968 -[#978]: https://www.free-decompiler.com/flash/issues/978 -[#955]: https://www.free-decompiler.com/flash/issues/955 -[#966]: https://www.free-decompiler.com/flash/issues/966 -[#999]: https://www.free-decompiler.com/flash/issues/999 -[#1000]: https://www.free-decompiler.com/flash/issues/1000 -[#1017]: https://www.free-decompiler.com/flash/issues/1017 -[#1030]: https://www.free-decompiler.com/flash/issues/1030 -[#949]: https://www.free-decompiler.com/flash/issues/949 -[#944]: https://www.free-decompiler.com/flash/issues/944 -[#939]: https://www.free-decompiler.com/flash/issues/939 -[#942]: https://www.free-decompiler.com/flash/issues/942 -[#952]: https://www.free-decompiler.com/flash/issues/952 -[#858]: https://www.free-decompiler.com/flash/issues/858 -[#905]: https://www.free-decompiler.com/flash/issues/905 -[#920]: https://www.free-decompiler.com/flash/issues/920 -[#921]: https://www.free-decompiler.com/flash/issues/921 -[#924]: https://www.free-decompiler.com/flash/issues/924 -[#895]: https://www.free-decompiler.com/flash/issues/895 -[#884]: https://www.free-decompiler.com/flash/issues/884 -[#899]: https://www.free-decompiler.com/flash/issues/899 -[#903]: https://www.free-decompiler.com/flash/issues/903 -[#855]: https://www.free-decompiler.com/flash/issues/855 -[#850]: https://www.free-decompiler.com/flash/issues/850 -[#832]: https://www.free-decompiler.com/flash/issues/832 -[#904]: https://www.free-decompiler.com/flash/issues/904 -[#910]: https://www.free-decompiler.com/flash/issues/910 -[#922]: https://www.free-decompiler.com/flash/issues/922 -[#916]: https://www.free-decompiler.com/flash/issues/916 -[#938]: https://www.free-decompiler.com/flash/issues/938 -[#897]: https://www.free-decompiler.com/flash/issues/897 -[#470]: https://www.free-decompiler.com/flash/issues/470 -[#877]: https://www.free-decompiler.com/flash/issues/877 -[#878]: https://www.free-decompiler.com/flash/issues/878 -[#845]: https://www.free-decompiler.com/flash/issues/845 -[#883]: https://www.free-decompiler.com/flash/issues/883 -[#882]: https://www.free-decompiler.com/flash/issues/882 -[#760]: https://www.free-decompiler.com/flash/issues/760 -[#887]: https://www.free-decompiler.com/flash/issues/887 -[#842]: https://www.free-decompiler.com/flash/issues/842 -[#841]: https://www.free-decompiler.com/flash/issues/841 -[#772]: https://www.free-decompiler.com/flash/issues/772 -[#762]: https://www.free-decompiler.com/flash/issues/762 -[#862]: https://www.free-decompiler.com/flash/issues/862 -[#865]: https://www.free-decompiler.com/flash/issues/865 -[#613]: https://www.free-decompiler.com/flash/issues/613 -[#868]: https://www.free-decompiler.com/flash/issues/868 -[#713]: https://www.free-decompiler.com/flash/issues/713 -[#807]: https://www.free-decompiler.com/flash/issues/807 -[#728]: https://www.free-decompiler.com/flash/issues/728 -[#857]: https://www.free-decompiler.com/flash/issues/857 -[#860]: https://www.free-decompiler.com/flash/issues/860 -[#824]: https://www.free-decompiler.com/flash/issues/824 -[#809]: https://www.free-decompiler.com/flash/issues/809 -[#805]: https://www.free-decompiler.com/flash/issues/805 -[#825]: https://www.free-decompiler.com/flash/issues/825 -[#737]: https://www.free-decompiler.com/flash/issues/737 -[#350]: https://www.free-decompiler.com/flash/issues/350 -[#814]: https://www.free-decompiler.com/flash/issues/814 -[#816]: https://www.free-decompiler.com/flash/issues/816 -[#835]: https://www.free-decompiler.com/flash/issues/835 -[#836]: https://www.free-decompiler.com/flash/issues/836 -[#848]: https://www.free-decompiler.com/flash/issues/848 -[#817]: https://www.free-decompiler.com/flash/issues/817 -[#849]: https://www.free-decompiler.com/flash/issues/849 -[#852]: https://www.free-decompiler.com/flash/issues/852 -[#837]: https://www.free-decompiler.com/flash/issues/837 -[#811]: https://www.free-decompiler.com/flash/issues/811 -[#745]: https://www.free-decompiler.com/flash/issues/745 -[#803]: https://www.free-decompiler.com/flash/issues/803 -[#738]: https://www.free-decompiler.com/flash/issues/738 -[#742]: https://www.free-decompiler.com/flash/issues/742 -[#747]: https://www.free-decompiler.com/flash/issues/747 -[#749]: https://www.free-decompiler.com/flash/issues/749 -[#752]: https://www.free-decompiler.com/flash/issues/752 -[#753]: https://www.free-decompiler.com/flash/issues/753 -[#759]: https://www.free-decompiler.com/flash/issues/759 -[#766]: https://www.free-decompiler.com/flash/issues/766 -[#768]: https://www.free-decompiler.com/flash/issues/768 -[#773]: https://www.free-decompiler.com/flash/issues/773 -[#776]: https://www.free-decompiler.com/flash/issues/776 -[#783]: https://www.free-decompiler.com/flash/issues/783 -[#785]: https://www.free-decompiler.com/flash/issues/785 -[#787]: https://www.free-decompiler.com/flash/issues/787 -[#788]: https://www.free-decompiler.com/flash/issues/788 -[#790]: https://www.free-decompiler.com/flash/issues/790 -[#794]: https://www.free-decompiler.com/flash/issues/794 -[#798]: https://www.free-decompiler.com/flash/issues/798 -[#800]: https://www.free-decompiler.com/flash/issues/800 -[#676]: https://www.free-decompiler.com/flash/issues/676 -[#734]: https://www.free-decompiler.com/flash/issues/734 -[#687]: https://www.free-decompiler.com/flash/issues/687 -[#709]: https://www.free-decompiler.com/flash/issues/709 -[#732]: https://www.free-decompiler.com/flash/issues/732 -[#730]: https://www.free-decompiler.com/flash/issues/730 -[#735]: https://www.free-decompiler.com/flash/issues/735 -[#722]: https://www.free-decompiler.com/flash/issues/722 -[#725]: https://www.free-decompiler.com/flash/issues/725 -[#715]: https://www.free-decompiler.com/flash/issues/715 -[#635]: https://www.free-decompiler.com/flash/issues/635 -[#726]: https://www.free-decompiler.com/flash/issues/726 -[#716]: https://www.free-decompiler.com/flash/issues/716 -[#717]: https://www.free-decompiler.com/flash/issues/717 -[#718]: https://www.free-decompiler.com/flash/issues/718 -[#720]: https://www.free-decompiler.com/flash/issues/720 -[#719]: https://www.free-decompiler.com/flash/issues/719 -[#723]: https://www.free-decompiler.com/flash/issues/723 -[#288]: https://www.free-decompiler.com/flash/issues/288 -[#677]: https://www.free-decompiler.com/flash/issues/677 -[#389]: https://www.free-decompiler.com/flash/issues/389 -[#701]: https://www.free-decompiler.com/flash/issues/701 -[#707]: https://www.free-decompiler.com/flash/issues/707 -[#302]: https://www.free-decompiler.com/flash/issues/302 -[#685]: https://www.free-decompiler.com/flash/issues/685 -[#698]: https://www.free-decompiler.com/flash/issues/698 -[#710]: https://www.free-decompiler.com/flash/issues/710 -[#711]: https://www.free-decompiler.com/flash/issues/711 -[#681]: https://www.free-decompiler.com/flash/issues/681 -[#688]: https://www.free-decompiler.com/flash/issues/688 -[#691]: https://www.free-decompiler.com/flash/issues/691 -[#524]: https://www.free-decompiler.com/flash/issues/524 -[#663]: https://www.free-decompiler.com/flash/issues/663 -[#702]: https://www.free-decompiler.com/flash/issues/702 -[#539]: https://www.free-decompiler.com/flash/issues/539 -[#650]: https://www.free-decompiler.com/flash/issues/650 -[#680]: https://www.free-decompiler.com/flash/issues/680 -[#649]: https://www.free-decompiler.com/flash/issues/649 -[#656]: https://www.free-decompiler.com/flash/issues/656 -[#661]: https://www.free-decompiler.com/flash/issues/661 -[#664]: https://www.free-decompiler.com/flash/issues/664 -[#668]: https://www.free-decompiler.com/flash/issues/668 -[#674]: https://www.free-decompiler.com/flash/issues/674 -[#675]: https://www.free-decompiler.com/flash/issues/675 -[#632]: https://www.free-decompiler.com/flash/issues/632 -[#651]: https://www.free-decompiler.com/flash/issues/651 -[#678]: https://www.free-decompiler.com/flash/issues/678 -[#672]: https://www.free-decompiler.com/flash/issues/672 -[#684]: https://www.free-decompiler.com/flash/issues/684 -[#647]: https://www.free-decompiler.com/flash/issues/647 -[#648]: https://www.free-decompiler.com/flash/issues/648 -[#612]: https://www.free-decompiler.com/flash/issues/612 -[#623]: https://www.free-decompiler.com/flash/issues/623 -[#624]: https://www.free-decompiler.com/flash/issues/624 -[#627]: https://www.free-decompiler.com/flash/issues/627 -[#640]: https://www.free-decompiler.com/flash/issues/640 -[#595]: https://www.free-decompiler.com/flash/issues/595 -[#592]: https://www.free-decompiler.com/flash/issues/592 -[#585]: https://www.free-decompiler.com/flash/issues/585 -[#578]: https://www.free-decompiler.com/flash/issues/578 -[#501]: https://www.free-decompiler.com/flash/issues/501 -[#616]: https://www.free-decompiler.com/flash/issues/616 -[#559]: https://www.free-decompiler.com/flash/issues/559 -[#401]: https://www.free-decompiler.com/flash/issues/401 -[#593]: https://www.free-decompiler.com/flash/issues/593 -[#594]: https://www.free-decompiler.com/flash/issues/594 -[#579]: https://www.free-decompiler.com/flash/issues/579 -[#428]: https://www.free-decompiler.com/flash/issues/428 -[#337]: https://www.free-decompiler.com/flash/issues/337 -[#584]: https://www.free-decompiler.com/flash/issues/584 -[#576]: https://www.free-decompiler.com/flash/issues/576 -[#250]: https://www.free-decompiler.com/flash/issues/250 -[#580]: https://www.free-decompiler.com/flash/issues/580 -[#510]: https://www.free-decompiler.com/flash/issues/510 -[#583]: https://www.free-decompiler.com/flash/issues/583 -[#586]: https://www.free-decompiler.com/flash/issues/586 -[#574]: https://www.free-decompiler.com/flash/issues/574 -[#570]: https://www.free-decompiler.com/flash/issues/570 -[#563]: https://www.free-decompiler.com/flash/issues/563 -[#561]: https://www.free-decompiler.com/flash/issues/561 -[#509]: https://www.free-decompiler.com/flash/issues/509 -[#433]: https://www.free-decompiler.com/flash/issues/433 -[#557]: https://www.free-decompiler.com/flash/issues/557 -[#556]: https://www.free-decompiler.com/flash/issues/556 -[#504]: https://www.free-decompiler.com/flash/issues/504 -[#529]: https://www.free-decompiler.com/flash/issues/529 -[#538]: https://www.free-decompiler.com/flash/issues/538 -[#537]: https://www.free-decompiler.com/flash/issues/537 -[#540]: https://www.free-decompiler.com/flash/issues/540 -[#387]: https://www.free-decompiler.com/flash/issues/387 -[#552]: https://www.free-decompiler.com/flash/issues/552 -[#494]: https://www.free-decompiler.com/flash/issues/494 -[#513]: https://www.free-decompiler.com/flash/issues/513 -[#262]: https://www.free-decompiler.com/flash/issues/262 -[#499]: https://www.free-decompiler.com/flash/issues/499 -[#508]: https://www.free-decompiler.com/flash/issues/508 -[#305]: https://www.free-decompiler.com/flash/issues/305 -[#312]: https://www.free-decompiler.com/flash/issues/312 -[#503]: https://www.free-decompiler.com/flash/issues/503 -[#304]: https://www.free-decompiler.com/flash/issues/304 -[#306]: https://www.free-decompiler.com/flash/issues/306 -[#507]: https://www.free-decompiler.com/flash/issues/507 -[#424]: https://www.free-decompiler.com/flash/issues/424 -[#425]: https://www.free-decompiler.com/flash/issues/425 -[#478]: https://www.free-decompiler.com/flash/issues/478 -[#485]: https://www.free-decompiler.com/flash/issues/485 -[#517]: https://www.free-decompiler.com/flash/issues/517 -[#518]: https://www.free-decompiler.com/flash/issues/518 -[#361]: https://www.free-decompiler.com/flash/issues/361 -[#392]: https://www.free-decompiler.com/flash/issues/392 -[#516]: https://www.free-decompiler.com/flash/issues/516 -[#495]: https://www.free-decompiler.com/flash/issues/495 -[#496]: https://www.free-decompiler.com/flash/issues/496 -[#299]: https://www.free-decompiler.com/flash/issues/299 -[#303]: https://www.free-decompiler.com/flash/issues/303 -[#324]: https://www.free-decompiler.com/flash/issues/324 -[#346]: https://www.free-decompiler.com/flash/issues/346 -[#371]: https://www.free-decompiler.com/flash/issues/371 -[#426]: https://www.free-decompiler.com/flash/issues/426 -[#457]: https://www.free-decompiler.com/flash/issues/457 -[#458]: https://www.free-decompiler.com/flash/issues/458 -[#460]: https://www.free-decompiler.com/flash/issues/460 -[#462]: https://www.free-decompiler.com/flash/issues/462 -[#463]: https://www.free-decompiler.com/flash/issues/463 -[#465]: https://www.free-decompiler.com/flash/issues/465 -[#466]: https://www.free-decompiler.com/flash/issues/466 -[#369]: https://www.free-decompiler.com/flash/issues/369 -[#390]: https://www.free-decompiler.com/flash/issues/390 -[#453]: https://www.free-decompiler.com/flash/issues/453 -[#459]: https://www.free-decompiler.com/flash/issues/459 -[#461]: https://www.free-decompiler.com/flash/issues/461 -[#451]: https://www.free-decompiler.com/flash/issues/451 -[#454]: https://www.free-decompiler.com/flash/issues/454 -[#455]: https://www.free-decompiler.com/flash/issues/455 -[#474]: https://www.free-decompiler.com/flash/issues/474 -[#477]: https://www.free-decompiler.com/flash/issues/477 -[#481]: https://www.free-decompiler.com/flash/issues/481 -[#484]: https://www.free-decompiler.com/flash/issues/484 -[#493]: https://www.free-decompiler.com/flash/issues/493 -[#365]: https://www.free-decompiler.com/flash/issues/365 -[#366]: https://www.free-decompiler.com/flash/issues/366 -[#429]: https://www.free-decompiler.com/flash/issues/429 -[#447]: https://www.free-decompiler.com/flash/issues/447 -[#354]: https://www.free-decompiler.com/flash/issues/354 -[#438]: https://www.free-decompiler.com/flash/issues/438 -[#436]: https://www.free-decompiler.com/flash/issues/436 -[#446]: https://www.free-decompiler.com/flash/issues/446 -[#427]: https://www.free-decompiler.com/flash/issues/427 -[#405]: https://www.free-decompiler.com/flash/issues/405 -[#420]: https://www.free-decompiler.com/flash/issues/420 -[#421]: https://www.free-decompiler.com/flash/issues/421 -[#430]: https://www.free-decompiler.com/flash/issues/430 -[#397]: https://www.free-decompiler.com/flash/issues/397 -[#431]: https://www.free-decompiler.com/flash/issues/431 -[#169]: https://www.free-decompiler.com/flash/issues/169 -[#335]: https://www.free-decompiler.com/flash/issues/335 -[#404]: https://www.free-decompiler.com/flash/issues/404 -[#407]: https://www.free-decompiler.com/flash/issues/407 -[#399]: https://www.free-decompiler.com/flash/issues/399 -[#400]: https://www.free-decompiler.com/flash/issues/400 -[#398]: https://www.free-decompiler.com/flash/issues/398 -[#382]: https://www.free-decompiler.com/flash/issues/382 -[#396]: https://www.free-decompiler.com/flash/issues/396 -[#357]: https://www.free-decompiler.com/flash/issues/357 -[#391]: https://www.free-decompiler.com/flash/issues/391 -[#395]: https://www.free-decompiler.com/flash/issues/395 -[#334]: https://www.free-decompiler.com/flash/issues/334 -[#301]: https://www.free-decompiler.com/flash/issues/301 -[#383]: https://www.free-decompiler.com/flash/issues/383 -[#386]: https://www.free-decompiler.com/flash/issues/386 -[#367]: https://www.free-decompiler.com/flash/issues/367 -[#380]: https://www.free-decompiler.com/flash/issues/380 -[#292]: https://www.free-decompiler.com/flash/issues/292 -[#375]: https://www.free-decompiler.com/flash/issues/375 -[#378]: https://www.free-decompiler.com/flash/issues/378 -[#325]: https://www.free-decompiler.com/flash/issues/325 -[#210]: https://www.free-decompiler.com/flash/issues/210 -[#355]: https://www.free-decompiler.com/flash/issues/355 -[#313]: https://www.free-decompiler.com/flash/issues/313 -[#330]: https://www.free-decompiler.com/flash/issues/330 -[#332]: https://www.free-decompiler.com/flash/issues/332 -[#344]: https://www.free-decompiler.com/flash/issues/344 -[#295]: https://www.free-decompiler.com/flash/issues/295 -[#297]: https://www.free-decompiler.com/flash/issues/297 -[#307]: https://www.free-decompiler.com/flash/issues/307 -[#309]: https://www.free-decompiler.com/flash/issues/309 -[#310]: https://www.free-decompiler.com/flash/issues/310 -[#311]: https://www.free-decompiler.com/flash/issues/311 -[#327]: https://www.free-decompiler.com/flash/issues/327 -[#328]: https://www.free-decompiler.com/flash/issues/328 -[#333]: https://www.free-decompiler.com/flash/issues/333 -[#336]: https://www.free-decompiler.com/flash/issues/336 -[#338]: https://www.free-decompiler.com/flash/issues/338 -[#315]: https://www.free-decompiler.com/flash/issues/315 -[#123]: https://www.free-decompiler.com/flash/issues/123 -[#243]: https://www.free-decompiler.com/flash/issues/243 -[#326]: https://www.free-decompiler.com/flash/issues/326 -[#287]: https://www.free-decompiler.com/flash/issues/287 -[#290]: https://www.free-decompiler.com/flash/issues/290 -[#291]: https://www.free-decompiler.com/flash/issues/291 -[#294]: https://www.free-decompiler.com/flash/issues/294 -[#298]: https://www.free-decompiler.com/flash/issues/298 -[#296]: https://www.free-decompiler.com/flash/issues/296 -[#314]: https://www.free-decompiler.com/flash/issues/314 -[#316]: https://www.free-decompiler.com/flash/issues/316 -[#318]: https://www.free-decompiler.com/flash/issues/318 -[#319]: https://www.free-decompiler.com/flash/issues/319 -[#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 -[#261]: https://www.free-decompiler.com/flash/issues/261 -[#269]: https://www.free-decompiler.com/flash/issues/269 -[#274]: https://www.free-decompiler.com/flash/issues/274 -[#275]: https://www.free-decompiler.com/flash/issues/275 -[#258]: https://www.free-decompiler.com/flash/issues/258 -[#267]: https://www.free-decompiler.com/flash/issues/267 -[#286]: https://www.free-decompiler.com/flash/issues/286 -[#233]: https://www.free-decompiler.com/flash/issues/233 -[#235]: https://www.free-decompiler.com/flash/issues/235 -[#263]: https://www.free-decompiler.com/flash/issues/263 -[#264]: https://www.free-decompiler.com/flash/issues/264 -[#265]: https://www.free-decompiler.com/flash/issues/265 -[#266]: https://www.free-decompiler.com/flash/issues/266 -[#281]: https://www.free-decompiler.com/flash/issues/281 -[#251]: https://www.free-decompiler.com/flash/issues/251 -[#257]: https://www.free-decompiler.com/flash/issues/257 -[#259]: https://www.free-decompiler.com/flash/issues/259 -[#260]: https://www.free-decompiler.com/flash/issues/260 -[#268]: https://www.free-decompiler.com/flash/issues/268 -[#272]: https://www.free-decompiler.com/flash/issues/272 -[#276]: https://www.free-decompiler.com/flash/issues/276 -[#220]: https://www.free-decompiler.com/flash/issues/220 -[#284]: https://www.free-decompiler.com/flash/issues/284 -[#232]: https://www.free-decompiler.com/flash/issues/232 -[#253]: https://www.free-decompiler.com/flash/issues/253 -[#137]: https://www.free-decompiler.com/flash/issues/137 -[#242]: https://www.free-decompiler.com/flash/issues/242 -[#244]: https://www.free-decompiler.com/flash/issues/244 -[#203]: https://www.free-decompiler.com/flash/issues/203 -[#225]: https://www.free-decompiler.com/flash/issues/225 -[#236]: https://www.free-decompiler.com/flash/issues/236 -[#245]: https://www.free-decompiler.com/flash/issues/245 -[#247]: https://www.free-decompiler.com/flash/issues/247 -[#248]: https://www.free-decompiler.com/flash/issues/248 -[#254]: https://www.free-decompiler.com/flash/issues/254 -[#255]: https://www.free-decompiler.com/flash/issues/255 -[#256]: https://www.free-decompiler.com/flash/issues/256 -[#241]: https://www.free-decompiler.com/flash/issues/241 -[#238]: https://www.free-decompiler.com/flash/issues/238 -[#239]: https://www.free-decompiler.com/flash/issues/239 -[#240]: https://www.free-decompiler.com/flash/issues/240 -[#237]: https://www.free-decompiler.com/flash/issues/237 -[#217]: https://www.free-decompiler.com/flash/issues/217 -[#219]: https://www.free-decompiler.com/flash/issues/219 -[#224]: https://www.free-decompiler.com/flash/issues/224 -[#121]: https://www.free-decompiler.com/flash/issues/121 -[#207]: https://www.free-decompiler.com/flash/issues/207 -[#151]: https://www.free-decompiler.com/flash/issues/151 -[#171]: https://www.free-decompiler.com/flash/issues/171 -[#206]: https://www.free-decompiler.com/flash/issues/206 -[#208]: https://www.free-decompiler.com/flash/issues/208 -[#209]: https://www.free-decompiler.com/flash/issues/209 -[#229]: https://www.free-decompiler.com/flash/issues/229 -[#213]: https://www.free-decompiler.com/flash/issues/213 -[#221]: https://www.free-decompiler.com/flash/issues/221 -[#226]: https://www.free-decompiler.com/flash/issues/226 -[#227]: https://www.free-decompiler.com/flash/issues/227 -[#230]: https://www.free-decompiler.com/flash/issues/230 -[#172]: https://www.free-decompiler.com/flash/issues/172 -[#174]: https://www.free-decompiler.com/flash/issues/174 -[#175]: https://www.free-decompiler.com/flash/issues/175 -[#212]: https://www.free-decompiler.com/flash/issues/212 -[#185]: https://www.free-decompiler.com/flash/issues/185 -[#186]: https://www.free-decompiler.com/flash/issues/186 -[#197]: https://www.free-decompiler.com/flash/issues/197 -[#216]: https://www.free-decompiler.com/flash/issues/216 -[#168]: https://www.free-decompiler.com/flash/issues/168 -[#176]: https://www.free-decompiler.com/flash/issues/176 -[#177]: https://www.free-decompiler.com/flash/issues/177 -[#202]: https://www.free-decompiler.com/flash/issues/202 -[#173]: https://www.free-decompiler.com/flash/issues/173 -[#190]: https://www.free-decompiler.com/flash/issues/190 -[#129]: https://www.free-decompiler.com/flash/issues/129 -[#153]: https://www.free-decompiler.com/flash/issues/153 -[#180]: https://www.free-decompiler.com/flash/issues/180 -[#136]: https://www.free-decompiler.com/flash/issues/136 -[#179]: https://www.free-decompiler.com/flash/issues/179 -[#144]: https://www.free-decompiler.com/flash/issues/144 -[#164]: https://www.free-decompiler.com/flash/issues/164 -[#167]: https://www.free-decompiler.com/flash/issues/167 -[#170]: https://www.free-decompiler.com/flash/issues/170 -[#178]: https://www.free-decompiler.com/flash/issues/178 -[#181]: https://www.free-decompiler.com/flash/issues/181 -[#182]: https://www.free-decompiler.com/flash/issues/182 -[#183]: https://www.free-decompiler.com/flash/issues/183 -[#184]: https://www.free-decompiler.com/flash/issues/184 -[#189]: https://www.free-decompiler.com/flash/issues/189 -[#191]: https://www.free-decompiler.com/flash/issues/191 -[#195]: https://www.free-decompiler.com/flash/issues/195 -[#196]: https://www.free-decompiler.com/flash/issues/196 -[#198]: https://www.free-decompiler.com/flash/issues/198 -[#200]: https://www.free-decompiler.com/flash/issues/200 -[#201]: https://www.free-decompiler.com/flash/issues/201 -[#166]: https://www.free-decompiler.com/flash/issues/166 -[#165]: https://www.free-decompiler.com/flash/issues/165 -[#63]: https://www.free-decompiler.com/flash/issues/63 -[#67]: https://www.free-decompiler.com/flash/issues/67 -[#117]: https://www.free-decompiler.com/flash/issues/117 -[#127]: https://www.free-decompiler.com/flash/issues/127 -[#134]: https://www.free-decompiler.com/flash/issues/134 -[#155]: https://www.free-decompiler.com/flash/issues/155 -[#142]: https://www.free-decompiler.com/flash/issues/142 -[#146]: https://www.free-decompiler.com/flash/issues/146 -[#130]: https://www.free-decompiler.com/flash/issues/130 -[#132]: https://www.free-decompiler.com/flash/issues/132 -[#145]: https://www.free-decompiler.com/flash/issues/145 -[#147]: https://www.free-decompiler.com/flash/issues/147 -[#148]: https://www.free-decompiler.com/flash/issues/148 -[#152]: https://www.free-decompiler.com/flash/issues/152 -[#156]: https://www.free-decompiler.com/flash/issues/156 -[#157]: https://www.free-decompiler.com/flash/issues/157 -[#158]: https://www.free-decompiler.com/flash/issues/158 -[#159]: https://www.free-decompiler.com/flash/issues/159 -[#160]: https://www.free-decompiler.com/flash/issues/160 -[#162]: https://www.free-decompiler.com/flash/issues/162 -[#163]: https://www.free-decompiler.com/flash/issues/163 -[#149]: https://www.free-decompiler.com/flash/issues/149 -[#150]: https://www.free-decompiler.com/flash/issues/150 -[#119]: https://www.free-decompiler.com/flash/issues/119 -[#101]: https://www.free-decompiler.com/flash/issues/101 -[#114]: https://www.free-decompiler.com/flash/issues/114 -[#135]: https://www.free-decompiler.com/flash/issues/135 -[#141]: https://www.free-decompiler.com/flash/issues/141 -[#102]: https://www.free-decompiler.com/flash/issues/102 -[#124]: https://www.free-decompiler.com/flash/issues/124 -[#128]: https://www.free-decompiler.com/flash/issues/128 -[#131]: https://www.free-decompiler.com/flash/issues/131 -[#104]: https://www.free-decompiler.com/flash/issues/104 -[#113]: https://www.free-decompiler.com/flash/issues/113 -[#133]: https://www.free-decompiler.com/flash/issues/133 -[#140]: https://www.free-decompiler.com/flash/issues/140 -[#108]: https://www.free-decompiler.com/flash/issues/108 -[#105]: https://www.free-decompiler.com/flash/issues/105 -[#109]: https://www.free-decompiler.com/flash/issues/109 -[#106]: https://www.free-decompiler.com/flash/issues/106 -[#107]: https://www.free-decompiler.com/flash/issues/107 -[#110]: https://www.free-decompiler.com/flash/issues/110 -[#103]: https://www.free-decompiler.com/flash/issues/103 -[#111]: https://www.free-decompiler.com/flash/issues/111 -[#96]: https://www.free-decompiler.com/flash/issues/96 -[#98]: https://www.free-decompiler.com/flash/issues/98 -[#99]: https://www.free-decompiler.com/flash/issues/99 -[#100]: https://www.free-decompiler.com/flash/issues/100 -[#85]: https://www.free-decompiler.com/flash/issues/85 -[#79]: https://www.free-decompiler.com/flash/issues/79 -[#92]: https://www.free-decompiler.com/flash/issues/92 -[#93]: https://www.free-decompiler.com/flash/issues/93 -[#94]: https://www.free-decompiler.com/flash/issues/94 -[#95]: https://www.free-decompiler.com/flash/issues/95 -[#86]: https://www.free-decompiler.com/flash/issues/86 -[#87]: https://www.free-decompiler.com/flash/issues/87 -[#88]: https://www.free-decompiler.com/flash/issues/88 -[#89]: https://www.free-decompiler.com/flash/issues/89 -[#82]: https://www.free-decompiler.com/flash/issues/82 -[#78]: https://www.free-decompiler.com/flash/issues/78 -[#81]: https://www.free-decompiler.com/flash/issues/81 -[#84]: https://www.free-decompiler.com/flash/issues/84 -[#83]: https://www.free-decompiler.com/flash/issues/83 -[#65]: https://www.free-decompiler.com/flash/issues/65 -[#48]: https://www.free-decompiler.com/flash/issues/48 -[#53]: https://www.free-decompiler.com/flash/issues/53 -[#66]: https://www.free-decompiler.com/flash/issues/66 -[#68]: https://www.free-decompiler.com/flash/issues/68 -[#69]: https://www.free-decompiler.com/flash/issues/69 -[#75]: https://www.free-decompiler.com/flash/issues/75 -[#73]: https://www.free-decompiler.com/flash/issues/73 -[#62]: https://www.free-decompiler.com/flash/issues/62 -[#72]: https://www.free-decompiler.com/flash/issues/72 -[#64]: https://www.free-decompiler.com/flash/issues/64 -[#38]: https://www.free-decompiler.com/flash/issues/38 -[#56]: https://www.free-decompiler.com/flash/issues/56 -[#57]: https://www.free-decompiler.com/flash/issues/57 -[#58]: https://www.free-decompiler.com/flash/issues/58 -[#45]: https://www.free-decompiler.com/flash/issues/45 -[#50]: https://www.free-decompiler.com/flash/issues/50 -[#51]: https://www.free-decompiler.com/flash/issues/51 -[#52]: https://www.free-decompiler.com/flash/issues/52 -[#47]: https://www.free-decompiler.com/flash/issues/47 -[#42]: https://www.free-decompiler.com/flash/issues/42 -[#39]: https://www.free-decompiler.com/flash/issues/39 -[#40]: https://www.free-decompiler.com/flash/issues/40 -[#44]: https://www.free-decompiler.com/flash/issues/44 -[#36]: https://www.free-decompiler.com/flash/issues/36 -[#43]: https://www.free-decompiler.com/flash/issues/43 -[#46]: https://www.free-decompiler.com/flash/issues/46 -[#3]: https://www.free-decompiler.com/flash/issues/3 -[#37]: https://www.free-decompiler.com/flash/issues/37 -[#34]: https://www.free-decompiler.com/flash/issues/34 -[#35]: https://www.free-decompiler.com/flash/issues/35 -[#32]: https://www.free-decompiler.com/flash/issues/32 +# Change Log +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added +- [#1240] AS search using multiple threads when parallel speedup is enabled + +## [10.0.0] - 2016-12-24 +### Added +- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only +- optional AS3 direct editation with Flex SDK +- AS3 p-code editing - metadata read/write support +- AS3 p-code editing - end of the block command like in RABCDasm +- AS3 p-code editing - popup docs for more than instructions +- Debugger - New columns for variable details - scope, flags, trait +- Debugger - Add watch feature +- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases +- Deobfuscation Tool - Fix colliding trait/classes via toolbar command +- Auto rename identifiers option now fixes colliding trait/classes aswell +- [#1254] FLA export - detecting scripts on AS3 timeline +- [#907] FFDec Library JAR file has version inside it. +- [#1311], [#1313] actionScript source font size +- Display warning when library version and GUI version mismatch +- Changelog file +- [#1308] Search by all P-code files (AS 1/2 only) + +### Changed +- [#1189] AS3 - sort imports to have same order always +- GUI: AS3 P-code header show actual trait type and method type +- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" +- Set advance values button has confirm dialog with information +- [#1274] Linux package no longer requires Oracle Java only +- Library now packaged inside ZIP file + +### Fixed +- P-code docs formatting fix +- Export dialog - handling sprite and SWF frames correctly +- [#1275] debugger - show local variables fixes +- AS3 p-code editing - popup docs correctly displayed when label on line start +- [#1278] replacing DefineBits error +- [#1281] DefineFont 2/3 getting character advance value when replacing fix +- Set advance values button - Do not set advance if the char cannot be displayed in source font +- AS3 Goto declaration for single character names +- Identifier renaming for top level classes +- AS3 direct editation not correctly saving local register names +- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir +- Mac OS X installer fix (.pkg) +- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers +- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix +- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes +- [#1302] Callpropvoid instruction docblock not correct +- [#1309] recent files not getting updates +- [#1312] faster colliding usages finder +- [#1303] garbled text when exporting frame with text +- [#1314] user interface: button order +- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) +- [#1323] Audio playback fails + +## [9.0.0] - 2016-08-12 +### Added +- Instance metadata (AMF3) editing in PlaceObject4 +- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) +- [#1171] Export stroke scale to FLA +- FLA export - check invalid unicode characters +- [#1170] Extract from memory in commandline +- Reload one vs Reload all buttons +- ABC: Float and Float4 support +- AS3 p-code instruction documentation in GUI +- [#1241] Settings to show original bytes in hex view +- Search in dump view +- Jump to resources view from hex view +- Show warning on 32bit JRE + +### Changed +- [#1162] improved opening loaded SWF files +- Flash Viewer - skip frames when not on time +- [#1199] Automatically import alpha channel to JPEG3/4 from PNG + +### Fixed +- [#1151] Filters on texts fixed +- [#1128] Adding characters to font fixed (FontAlignZones not removed) +- [#1163] Clicking open->file makes program buggy +- Refresh tree after raw edit +- [#1172] Text double escape fix +- [#1174] Change language fix +- some AS2 deobfuscation fixes +- [#1183] Index out of bounds fix +- Implicit coersion on binary/unary opfix +- debugger: corect display variable values through getters +- Multiple XLF export fix +- [#1193] FLA export - text tag advance fix, one layer shape fix +- [#1193] FLA export - smoothed image detection, export raw JPEG data +- [#1193] Export space character to TTF correctly +- [#1200] Previous search text selected when quick find +- Flash viewer: aspect ratio on startup fix +- [#1198] Saving trait slot const value +- Zoom parameter commandline fixed +- [#1205] clipping fixed +- [#1194] Wrong sound effects in FLA +- [#1210] Frame Export fix +- Improved/fixed go to declaration in AS3 +- [#1217] PCode window not in same position as AS +- Hide memor search on non windows platform +- [#1244] Incorrect showing of NOP instructions +- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back +- [#1241] File content is different from hex view +- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont +- [#1236] won't open fixed +- [#1251] SWF not same after export XML and import back +- [#1265] Error during export +- [#1268] Font export - Using second glyph when two glyphs for one character found +- [#1268] GFX compacted font - fixed advance values on export + +## [8.0.1] - 2016-02-20 +### Changed +- FFDec debug tab in advanced settings moved to other tabs + +### Fixed +- [#1161] AS1/2 deobfuscation broken +- AS1/2 Simplify expressions fix + +## [8.0.0] - 2016-02-18 +### Added +- Debugger - AS1/2 Show registers +- Debugger - display variables in the tree structure +- Debugger - set value of variable +- Debugger - AS1/2 View constantpool +- Debugger - P-code level debugging for both AS1/2 and AS3 +- Basic SVG import for shapes +- Simplify expression setting +- [#1118] Loading characters through ImportAssets - show as readonly +- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 +- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) +- [#1121] Ability to save binary data by its name +- [#1052] Add object to existing frame +- Allow adding tag to main timeline +- AS1/2: Ctrl+click to declaration of variables, registers +- Allow trait specification in pcode import +- Icons for tag types in Dump view +- Show error message when a text tag is invalid (glyph index problem) +- AS3 direct editation - store local register names in debug info = allow to rename them + +### Changed +- New application icon and splash screen +- [#1145] AS3 better declaration type detection, better convert_x instruction handling +- Binary export - use .swf extension for swf files +- Better tree labels in generic tag editor (Raw edit) +- [#758] Allow zooming more than preview area in internal viewer + +### Fixed +- [#1096] FLA export - pretty print +- [#1104] AS1/2/3 Script Importat not working +- [#1107] Text Offset Incorrect fixed +- [#1106] New Shapes replace function fix +- [#1113] It takes too long to switch between rendered sprite +- [#1075] Lenght of DefineText in some cases +- [#1127] autoRenameIdentifiers is not supported in CLI mode +- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed +- [#1103] Foreach variables fixes +- AS3 Switch fixes +- Default clause position in switch +- [#1133] Incorrect frame order for nested sprite +- [#1135] Handle try "to" in p-code correctly +- Font wideOffsets,wideCodes fixed in DefineFont2/3 +- AS3: super method call +- [#1138] All exported videos are the same file which may be broken +- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages +- [#1137] running flashplayer(debugger) executable in Linux/MacOs +- [#1144] Command line argument renameInvalidIdentifiers +- [#1145] double not (!!) not removed +- [#1147] Sprite is exported incorrectly +- [#1148] handing end of stream exception in abc reader, loc exception +- [#1152] Font info tag modified tag was not set => saved swf was corrupt +- [#1154] Some 32bit JRE problems - program won't start +- [#1145] Correct precedence handling on binary operators +- [#116] not resolving unusual tags in DefineSprite + +## [7.1.2] - 2015-12-03 +### Fixed +- AS3 debugger start halt fix +- AS1/2 debugger fix on nondebug enabled SWFs +- AS1/2 debugger fix for functions +- Debug menu item enabled fix +- AS3 local reg index fix +- Advanced settings calendar +- AVM2 instructions in hex view +- [#1070] Incorrect switch decompilation +- [#1098] Import XML fix + +## [7.1.1] - 2015-11-23 +### Fixed +- Critical debugger fix - widelines + +## [7.1.0] - 2015-11-23 +### Added +- AS1/2 debugger +- Breakpoint/IP marker on line beginning + +### Changed +- Starting debugger on demand +- Installer message about playerglobal is only warning now + +### Fixed +- [#1033], [#1083] AS3 deobfuscation issues +- [#1091] AS 1/2 direct editation saving + +## [7.0.1] - 2015-11-18 +### Fixed +- Debugger: Adding breakpoint if script initializer not displayed + +## [7.0.0] - 2015-11-18 +### Added +- AS3 Debugger - breakpoints, stepping, show variables +- Faster AS3 direct editation + +### Changed +- Better Configuration of flashplayer paths + +### Removed +- Removed old "debugger" buttons +- Removed search from browsers cache - inactual code + +### Fixed +- Many AS3 direct editation related bugs +- [#1076] export fix + +## [6.1.1] - 2015-10-30 +### Fixed +- Deobfuscate AS3 metadata +- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix +- [#1063] AS3 direct edit - script initializer fix, generating method names +- XML export/import fixes +- [#1019] Namespace imports fix +- AVM2 code execution fix +- [#1016] AS3 direct editation fixes +- [#1010] AS2 direct editation - internal and override is not a reserved word +- [#1008] pushshort instruction diassembly +- [#1004] this/super can be AS1/2 variable +- [#933] AS3 allow numbers as object literal keys + +## [6.1.0] - 2015-10-26 +### Added +- Open other loaded SWFs during playback (useful for loaders) +- Export uncompressed data from dump tree +- Print performance statistics from commandline +- [#1062] Editing/displaying script initializers +- Enable debugging on SWF file (commandline) + +### Changed +- Faster syntax highlighting +- Better AS1/2 deobfuscator +- [#418] AS3 deobfuscator improved + +### Fixed +- AS call method fix (first parameter is "this") +- [#1047] open all scripts folders +- [#812] decompile fail +- [#1056] deltaY missing when adding a new StraightEdgeRecord +- [#1057] Editing as in editor results in package name moving +- [#991] GUI export +- [#689] Ignore Case not correctly toggled +- [#1060] reversed and/or detection in some cases +- [#1037] isXML call + +## [6.0.2] - 2015-09-12 +### Added +- AS3: Display and direct edit trait Metadata +- Allow to specify tag type on image or shape import +- Convert image tags from commandline +- [#489] Hex decode very large integers +- Add new tags without show empty folders +- Dependent characters in basic tag info +- [#1007] replace bytearray in raw editing +- Italian translation + +### Changed +- AS2 parser - add string to constant pool if there is not enough space +- [#1044] AS2 - order scripts by physical location, name by offset + +### Removed +- Deprecated commandline parameters removed + +### Fixed +- JNA problems on some JDKs +- [#947] Marklevels errors ignored 17a94b7 +- [#953] Mac application permission fix (maybe) +- [#954] IndexOutOfBounds fix +- [#950] AddTrait setting modified fix +- [#945] AS1/2 directeditation fix - member named as global function +- [#957] AS1/2 IndexOutOfBounds fix +- [#956] Invalid jump offsets warning +- [#968] Sprites export with wrong coloring +- [#978] case sensitivity of filenames +- [#955] AS2 decompilation problem +- Image alpha fixes +- [#966] Go to document class +- [#991] scripts exporting +- [#999] save as fla +- [#1000] image export for malformed JPEG3 tags +- [#1017] store alchemy opcodes with wrong order +- [#1030] stack overflow fix + +## [6.0.1] - 2015-07-06 +### Added +- Special §§ instructions marked as red +- [#949] Replace alpha channel from commandline +- AS3 deobfuscation from commandline +- Option to ignore FlashCC/Alchemy packages + +### Changed +- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements + +### Fixed +- AS1/2 deobfuscation fixed +- [#952] Not loading SWF without extension + +## [6.0.0] - 2015-07-04 +### Added +- New AS3 deobfuscation method +- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... +- Allow reload FFDec when no SWF is opened +- [#858] Allow to set compression type in header +- [#905] Show codec details for sound items +- Better alchemy/DomainMemory instruction handling +- Better obfuscated names handling +- [#920] Export instance name to SVG +- [#921] Export html DefineEditText to SVG +- Open multiple files with drag and drop +- Better "multi packs" handling (Alchemy) +- SWF version 29 to flash player 18 mapping +- ImportAssets2 sha1 field +- [#924] Sprites to image from commandline +- AS1/2 direct editation big numbers fix +- Allow to add FILTERs and SHAPERECORDs in generic tag editor +- Enable close all menu when no swf is selected +- Restore modified state even when something goes wrong +- Some old tags added + +### Changed +- AS decompilation highly improved +- Better &&, || handling +- DoABCDefine renamed to DoABC2 +- Separated Sprite export settings + +### Deprecated +- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) + +### Fixed +- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. +- Few menu issues +- [#895] Correct handling CMYK JPEG +- [#884] AS direct edit assignment +- [#899] Show script after AS3 direct editation +- Some AS1/2 parser problems +- [#903] FLA export - fix for missing fontname, lastframe +- [#855] AS3 direct edit - for..in variable declaration fix +- [#850] Constant initialization for same multinames +- [#832] AS3 direct edit - other ABCs resolving fix +- [#904] Cannot export images +- [#910] Missing instructions +- Opening not existent files on restoring last session +- [#922] Edit text leading +- Put image before shape on shape replace +- [#916] Replacing Shape corrupts SWF +- JRE setup parameters fixed +- [#938] Parallel speedup limit fix + +## [5.3.0] - 2015-05-25 +### Added +- Generic tag editor: improved table editing (import/export assets tags, etc.) + +### Changed +- Classic (nonribbon) UI improved - has same items as Ribbon UI +- Icons improvements +- Disabling menu items when work in progress + +### Fixed +- [#897] Classic UI fix + +## [5.2.0] - 2015-05-22 +### Added +- UI8 editbox for swf version in header panel +- Basic tag information panel + +### Changed +- AS1/2: Shown only the constant pool(s) in pcode editor +- Do not allow to chage tag tree selection, when current tag is under editing +- Faster bitmap export +- Using less memory when playing sounds +- Error message changed when the opened file is not swf + +### Fixed +- [#470] panels size after resizing from/to full screen +- [#877] A small glitch after search in AS +- [#878] small glitch after saving P-code or swf file +- [#470] glitch +- [#845] If frame consist 2 DoAction then it imports only first one +- pdf export (when no frame exists) +- text rendering (alpha channel was ignored), +- bmp export (paddings when width%2==1) +- [#883] -dumpSWF option does not work anymore +- [#882] Canvas export border size +- [#760] Internal viewer line linear gradient fill is not working +- [#887] error on export a special swf's P-CODE +- Extensions of exported images fixed + +## [5.1.0] - 2015-05-04 +### Added +- Allow to copy/move multiple tags, and dependencies +- [#842] For reconstruction if debug line info present +- [#841] Loop control for sound preview +- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button +- Scrollbar added to fontpanel +- SWF header editor +- Configure what object types to export in exportdialog + +### Changed +- Better gif exporter +- [#772]: closing loading dialog now cancels the loading of the swf +- [#762] export pcode with different extension + +### Fixed +- CRITICAL: Update System Bug causing updates not working +- [#862] AS3 asm: do not read beyond return/throw instructions +- [#865], [#613]: ribbon prefered width fix +- [#868] export path fix, allow to export buttons +- [#865] TagTree font size problem on high resolution screens +- [#713],[#807] Installer for 4.0+ fails to access Adobe Website +- [#728] Large fonts, [#857] add scroll on DefineFont3 + +## [5.0.2] - 2015-04-18 +### Added +- Reopen last session + +### Fixed +- ffdec.sh file line endings fixed + +## [5.0.1] - 2015-04-18 +### Fixed +- [#860]: Opening bundle (zip, swc, any binary file) files fixed + +## [5.0.0] - 2015-04-18 +### Added +- Color skins +- [#824] Mac OS X package +- [#809] Move left,right buttons for DefineTexts using translatex parameter +- [#805] Editor mode for DefineTexts +- [#825] Hotkeys for next/previous DefineText +- Export/Import symbol classes/export asset tags +- Frame export progress +- [#737] Single file script export +- Displaying changed AS3 scripts in GUI as bold +- Additional character info tags placed under character node +- New icons for other tags (metadata,fileattributes,setbackground,place/remove) +- Metadata tag editor + +### Changed +- Default color skin altered +- [#350] Allow only one running instance (Windows only, can be turned off) +- SWFs in zip based bundles (SWC for example) can be modified & saved +- Performace improvements +- More compact SWF-XML format +- Marking changed parentnodes as bold too + +### Fixed +- [#814] Exporting with scale problem +- [#816] P-code not shown after class initializer trait selection +- [#835] Static initializer improvements +- AS3 direct editing - local register decrement fix +- AS3 direct editing - maintain register order/names +- [#836] AS1/2/3 Correct expression precedence handling +- AS3 preincrement +- [#848] Correct toggling text switches +- [#817] AS1/2 for..in variable declaration +- [#849] Attribute member +- [#852] Ignore case for russian characters +- [#837] AS3 try..finally without catch + +## [4.1.1] - 2015-02-21 +### Added +- Export/Import XML added to ribbon menu +- Few GUI enhancements +- Undo tag changes context menu + +### Changed +- Java 8 now required + +### Removed +- Removed support for Java below 8 + +### Fixed +- [#811] export ActionScript + +## [4.1.0] - 2015-02-18 +### Added +- XML export/import +- confirmation dialogs added +- Add support for non-standard ABC-compressed SWF file +- [#745] Copy tag to another SWF +- [#803] Align text in DefineText + +### Changed +- performance improvements +- [#758] Zoom to fit is dynamic + +### Fixed +- [#738] Frame export +- [#742] Can't edit frames +- [#747] Move tag to adds extra frame +- [#749] Internal viewer Sprite fill color +- [#752] Sound is not stopped +- [#753] Reload swf +- [#759] Decompilation § symbol +- [#766] Can't extract all resources +- [#768] Super calls not being correctly recognized +- [#773] Scripts associated with ClipActions are not shown +- [#776] Stop working after setting "number of threads" to 0 +- [#783] No OK box when edited script or text was saved +- [#785] Text search. Remember last choise, Unicode case insensitive search +- [#787] Search in AS bug (when navigating to searched results) +- [#788] Add DefineCompactedFont Tag to gfx file +- [#790] Impossible to change letters under a font +- [#794] Font extraction fails sometimes +- [#798] Close file streams after export, exporting progress +- [#800] Unexpected deleted carrier return in DefineEditText +- Build fix on Linux +- Fis Startup Script for OpenJDK +- Other minor fixes + +## [4.0.5] - 2014-12-01 +### Added +- Escape control characters in strings, identifier names +- [#676] import text error messages / logging enhancement +- [#734] \xAB escapes, \uABCD escapes +- [#687] AS3 - allowing p-code comments on separate line +- [#709] Text Export to Single File with custom filename + +### Fixed +- [#732] Random freezing - JavactiveX library updated. +- [#730] Not working without ActiveX fix on Windows +- [#735] Automatic deobfuscation not correctly switched (required restart) + +## [4.0.4] - 2014-11-23 +### Changed +- better file cache, removing unneccessary temp files + +### Fixed +- obfuscated identifiers + +## [4.0.3] - 2014-11-23 +### Added +- [#722] Go to next/previous frame +- BMP file format export (images,frames,shapes) and import(images) + +### Fixed +- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type +- [#715] namespace resolving fix +- [#635],[#726] placing cursor inside Unicode characters + +## [4.0.2] - 2014-11-22 +### Added +- show frame number during play +- flashplayer - show controls for DefineSprite +- goto frame +- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design + +### Changed +- [#720]: edited shape tag is not marked as modified after replacing +- reorganized about dialog + +### Fixed +- [#719] null swf name in Proxy after cancelling rename dialog +- flashplayer - font display +- [#723]: saving swf with invalid referenced characters +- DefineCompactedFont paging +- [#288] Less memory usage during FLA export +- Corrected syntax hilighting for AS3 P-code + +## [4.0.1] - 2014-11-12 +### Fixed +- [#713] Installer can continue when no file can be downloaded +- Fixed shapes +- Checking for updates moved to separate thread + +## [4.0.0] - 2014-11-11 +### Added +- [#677] Zoom level in export settings +- internal viewer: linear/srgb gradients +- zooming buttons for flashplayer/internal viewer +- stroke scaling modes for canvas export +- create snapshot button +- [#389] Selecting font face on import +- [#701] Importing font from TTF file +- Reorganized font panel +- [#707] Debugger for logging messages +- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets +- [#685] Getting local register names from debug info can be disabled +- Adding new tags +- [#698] Allowing unicode letters in identifiers +- [#710] Information about deobfuscation in error comments +- One EXE for 32/64 bit, uses percentage memory. +- EXE SplashScreen +- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc +- Config setting to load inner SWFs automatically +- Replace shape with image + +### Changed +- better FlashPlayer integration using JavactiveX library +- Faster building tag tree +- Faster timeline construction +- [#711] Improved folder view - faster and with correct context menu + +### Fixed +- AS2 deobfuscation fixes +- AS2 loops fix +- [#681] Linux script fixes +- AS2 constructor name fix +- [#688] AS3 direct edit fixes +- [#691] AS3 p-code reading/saving fix +- AS3 direct edit -submethod name resolve fix +- frames to html canvas fix +- [#524] Mask layer not applied when nonempty script layer +- [#663] AS3 imports fixes +- Font export of dot character +- Font panel Yes button fixed +- [#702] GFX font reading fix +- Better obfuscated names handling +- [#539] for(each) in declaration fixes + +## [3.0.0] - 2014-09-20 +### Added +- Separated GUI (GPL) and library (now LGPL) +- Editing obfuscated identifiers via new paragraph(§) syntax +- Timeline View with preview and object hilighting +- Show GFX data in dump view +- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline +- Dump view - selecting node +- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption + +### Removed +- Removed deprecated commandline export formats (see --help) + +### Fixed +- FileAttributes tag reading fix +- [#649] GFX reading fixed +- [#656] Search in memory - 64 bit processes fix +- [#661] scripts not showing +- [#664] expanding fillStyles in raw edit +- [#668] add missing character fix, text tags fix +- [#674] texts hilighting initialization fix +- [#675] AS1/2 and/or operator compilation +- [#632] Locking file after opening (cannot save, etc.) +- [#651] Unnecessary removing expression killed in unreachable part +- [#678] Windows batch file paths fixed +- [#672] Disabling transparency slider on RGB only selection +- [#684] Sound streams inside DefineSprites, soundstream handling + +## [2.1.4] - 2014-08-23 +### Added +- AS1/2: New method for deobfuscation (can be switched off in settings) +- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters + +### Fixed +- [#647] Skipping FileAttributesTag with Parallel speedup on +- [#648] Export from embedded SWF + +## [2.1.3] - 2014-08-18 +### Added +- Show "save" and "saveas" in application menu +- Saving data range in dump view +- Show actions, abcdata in dumpview (context menu on the tree node) +- [#612] show color in hex format + +### Changed +- Faster dump info collecting (less memory) +- Allow selecting multiple files in open file dialog + +### Fixed +- [#623] ffdec.sh UNIX file endings, executable +- [#624] search in embedded swf files +- [#632] AS1/2 Unnecessary GetVariable before NewObject +- [#627] filter swf not working +- LZMA saving +- Export pcode&hex from commandline +- [#640] text import fixed, ignore BOM + +## [2.1.2] - 2014-07-20 +### Added +- Dump view +- Context menu: Jump to character, raw edit all tags +- Catalan translation +- SWF header display + +### Fixed +- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes +- [#592] AS3 Multiname resolving in P-code causing different bytecode +- [#585] AS3 moving popped values to output +- [#578] Always on top fixed on search results +- [#501] GotoFrame2 fix +- [#616] Frames to PNG export +- Export context menu +- [#559] Bitmap export opacity +- [#401] Placeobject 3/4 fix +- [#593] Return object newline +- [#594] Setting for curly brace + +## [2.1.1] - 2014-06-05 +### Added +- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers +- AS1/2 direct edit - global functions improvements +- AS1/2 negate operator, unary minus operator +- Opening SWFs in BinaryData tags +- AS1: Old string operators support, and/or, <> operator (editation) +- Statusbar loading animation improved +- [#579] AS3 direct editation - removing old class/methods from ABC +- remove character without the dependencies (remove only the place/remove tags) +- Running on system with no home directory +- [#428] PDF export (as images only) +- Commandline FlashPaper to PDF export +- Select frames / Characters commandline options + +### Changed +- [#337] quickfind visibility improved +- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) + +### Fixed +- [#576] AS1/2 direct editation: DefineFunction2 fix +- AS1/2 property fix +- AS1/2 typeof operator fix +- [#250] line spacing fix +- PlaceObject 3-4 className +- [#579] AS3 direct editation bugfixes - property resolving, integer values +- Morphshape canvas export fix +- Canvas export fix - closing path +- [#580] Rename invalid identifiers commandline fix +- [#510] JSyntaxPane find and replace dialog wrap around fix +- No more frame caching during export => memory saving (like [#583]) +- [#586] DropShadow filter fix +- Canvas export colortransform fix + +## [2.1.0 update 2] - 2014-05-08 +### Added +- AS3 decompilation/editation: Vector initializers +- AS3 direct editation: more classes in one file + +### Fixed +- [#574] DefineSprite editing fix +- Various AS3 direct editation fixes + +## [2.1.0 update 1] - 2014-05-05 +### Added +- Portugese-brasilian translation + +### Changed +- HTML Canvas export improvements + +### Fixed +- Various AS3 direct editation bugs, like [#570] + +## [2.1.0] - 2014-05-01 +### Added +- AS3 direct editation (Experimental!) +- Frames SVG Export +- Shape/MorphShape/Frames HTML 5 Canvas Export +- [#559] morphshapes as animated SVG +- [#563] Single file text export/import +- Font WOFF export +- Advanced settings dialog with tabs, config names, descriptions + +### Fixed +- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments +- Internal viewer: Filters fix + +## [2.0.1 update 2] - 2014-04-05 +### Fixed +- [#557] AS3 null namespace fix - p-code not working + +## [2.0.1 update 1] - 2014-04-04 +### Fixed +- [#556] Goto main class on startup fix +- [#557] Nullpointer fix (private namespaces) + +## [2.0.1] - 2014-04-03 +### Added +- Thumbnail view +- Font TTF export +- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) +- Expand all context menu +- Internal viewer: Button mouse move and click handling +- Playing sounds without flash player +- Internal viewer: Sounds on stage +- All sounds to WAV export +- Internal viewer: Showing texts, dynamic text border/fill +- [#504]: Unicode characters in JSyntaxPane +- Internal viewer: showing object under cursor +- Folder icons +- Sound/Image format on command line. +- Removing placeobject tags +- Removing frames +- AS: "elseif" statements +- Code formatting: space before parenthesis + +### Changed +- Single frames animated. + +### Fixed +- [#529] limit the number of displayed binaryData bytes +- [#538] Interface are sometimes dynamic +- [#537] super is sometime preceded by a dot +- [#540] Saving SWF changes very large static uint values +- [#387] Frames preview bugged +- AS:loop mismatch fix on parallel speedup +- [#552] Some timeout exceptions +- [#494] Fixed nightly builds updates + +## [2.0.0] - 2014-03-02 +### Added +- Generic tag tree editor +- Timeline view (stub only) +- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) +- [#513]: command line option to extract swf from binary file +- Configurable code formatting (Indentation + brace position) +- [#262] Export FLA: Font character ranges export +- Configurable checking for updates + +### Changed +- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes +- Improved commandline usage +- Automatic deobfuscation default value set to False (See News on webpages) +- Check for updates can be configured to inform about Nightly builds aswell + +### Deprecated +- Some commandline options are now deprecated, see --help + +### Fixed +- [#499] Cannot save via Proxy fixed +- [#504] font name reading fixed +- [#508] Support for OS without GUI +- [#305] Export FLA: empty sound layers +- [#312] Export FLA: Improved Shape/MorphShape fix +- [#503] Export FLA: Smoothing invalid shapes +- [#401] Invalid GFX tags in non GFX files +- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues +- [#361] FFDec icon is not visible on application start +- [#392] Video stream data fix +- [#516] AS3 P-code editor - Null name namespace handling + +## [1.8.1 update 1] - 2014-02-02 +### Fixed +- [#495] font embedding fix +- [#496] date format in new version dialog +- cosmetic changes + +## [1.8.1] - 2014-01-30 +### Added +- [#299] replace DefineBits images +- [#303] open folder with exported FLA +- [#324],[#346] SWC/zip/other binary file support +- [#371] detailed logging +- [#426] command line switch to rename identifiers +- [#457] clear recent opened files list +- [#458] save selected system font for swf fonts +- [#460] text editor: do not scroll to the end automatically +- [#462] font embedding dialog: show more sample characters +- [#463] global search in texts +- [#465] make font properties editable +- [#466] font preview + +### Changed +- [#369] new SVG and preview image rendering +- [#390] refresh font list without reloading the application +- [#453] update texts aftert adding new character to a font tag +- [#459] remember text panel splitter position +- [#461] font panel gui redesigned + +### Fixed +- [#451] dialog windows are not on the center of the screen +- [#454] Text syntax highlighting +- [#455],[#465] classic interface issues +- [#474] changeing language only available one time +- [#477] log window localization +- [#481] SVG export fix +- [#484] Oversized advance value after editing DefineText with DefineFont2 font +- [#493] missing search results + +## [1.8.0 update 1] - 2013-12-27 +### Added +- [#453] refresh (edit+save action) all texts button + +### Fixed +- Flash panel and font panel fixed + +## [1.8.0] - 2013-12-27 +### Added +- [#350] Allow to open multiple SWFs +- [#365] Filter fake SWFs during memory search +- [#366] Allow to sort the result list in memory search window +- [#429] Auto rename invalid identifiers setting +- [#447] Non-ribbon interface + +### Fixed +- [#354] Infinite decompilation fixed +- [#438] Case sensitive Command line arguments fixed +- [#436] Saving actionscript fixed +- [#446] Precedence issue fixed +- [#451] Dialogue window positions on a multi-monitor configuration fixed + +## [1.7.4 update 1] - 2013-12-05 +### Added +- [#426] Command line parameter for renaming invalid identifiers + +### Fixed +- [#427] Exception on linux fixed +- [#405], [#420], [#421] Some decompilation issues fixed +- [#430] Configuration default value problem fixed +- [#397], [#431] Deobfuscation stucked sometimes problem fixed + +## [1.7.4] - 2013-11-10 +### Added +- [#169] hexedit method body bytes +- [#335] last opened files +- [#404] Exporting P-code and Hex + console parameters +- [#407] register name is configurable +- Advanced settings +- Cancellable decompiling, exporting and searching + +### Fixed +- [#399], [#400] performance optimizations + +## [1.7.3 update 2] - 2013-09-29 +### Fixed +- [#398] AS3 p-code values with index 0 (null) + +## [1.7.3 update 1] - 2013-09-28 +### Added +- [#382] AS3: Adding new method + +## [1.7.3] - 2013-09-27 +### Added +- AS3: Multiname and namespace editing. +- [#382],[#396] AS3: Adding new trait (method/slot/const) +- AS3: Highlighting pair parenthesis/bracket +- AS3: Editing various new P-code parameters +- AS3: Highligting of trait names/types/parameters +- AS3: Global rename identifier for traits +- [#357] Playback controls for DefineSound +- [#391] AS3: Native methods mark +- [#395] Support for GFx ScaleForm SWFs (with fonts editing) +- Displaying fonts in internal viewer +- [#334], [#395] New Embed font dialog - selecting character ranges with preview +- Replacing characters in font (Yes/No to all dialog) + +### Changed +- AS3: New p-code syntax inspired by RABCDasm +- AS3: Editing whole trait in one textarea +- AS3: Removed messages about adding new constants +- AS3: Modified colors in editor +- [#301] Clearing error log causes icon to reset + +## [1.7.2 update 2] - 2013-09-13 +### Changed +- Updated translations + +### Fixed +- [#383] Firefox browser cache handling +- [#386] SWF resizing + +## [1.7.2 update 1] - 2013-09-11 +### Changed +- updated translations + +### Fixed +- [#383] Fixed cache loading when Firefox not used + +## [1.7.2] - 2013-09-11 +### Added +- [#357] Sounds Preview (Windows only) +- Movies preview (Windows only) +- Whole SWF display +- Preview controls (Play,Pause,Stop) +- Search SWFs in browsers cache (Firefox, Chrome) +- [#367] Memory search: Save selected files to disk +- Portugese translation + +### Changed +- [#380] Faster displaying DefineBitsLossless(2) images + +### Fixed +- [#292] Background color for Fonts preview fixed +- [#375] Replacing DefineBitsLossless image tag +- [#378] Refreshing language of JSyntaxPane +- MORPHGRADIENT reading fix + +## [1.7.1] - 2013-08-25 +### Added +- Loading SWFs from other processes memory (Windows only, sorry) +- [#325] Spanish translation +- [#210] Ukrainian and Dutch translation +- [#355] Chinese translation +- [#292] Change background color in SWF preview +- [#301] Clear errors log button +- [#313] Command line parameter for ignore all errors +- [#330] Protection agains adding same characters +- [#332] AS1/2 Showing elapsed times during commandline export +- [#344] Reload opened SWF +- Decompilation timeouts + +### Fixed +- [#295] Export FLA: wrong font +- [#297] Too bright titlebar button colors +- [#307] Export FLA: fixed empty textfields +- [#309] Export FLA: static text letter spacing detection +- [#310] Export FLA: Strokes +- [#311] Export FLA: BitmapFill +- [#327] AS1/2 Disassembly error stop application +- [#328] Fixed replacing images in DefineBitsJPEGX +- [#333] AS1/2 action reading +- [#336] Graph window is too small +- [#337] Quick search panel barely visible in same cases +- [#338] Expand/collapse icon in errorlog + +## [1.7.0 update 1] - 2013-08-11 +### Added +- [#315] German translation (partial) + +### Fixed +- [#123] Better context menu integration +- [#243],[#326] Better deobfuscation +- [#287] Typo in parallelSpeedUp parameter +- [#290],[#291] improved select language dialog +- [#294] minor GUI fixes +- [#298] Progressbar positition issues +- [#296] better export directory remembering +- [#314] Better deobfuscating filenames +- [#316] Readonly editor panes accepted Ctrl+Z/Y +- [#318] Export FLA: Shapes export fix +- [#319] AS3: Improved try..catch..finally decompilation +- [#323] AS3: Fixed default switch part + +## [1.7.0] - 2013-08-03 +### Added +- Listing contributors on about page +- [#223] AS2: Detecting uninitialized class fields +- [#250] Export FLA: Detecting static fields margin and spacing +- [#261] Export FLA: AS1/2 Frame scripts on first layer +- [#269] Commandline parameters for switching configuration +- [#274] AS3 Displaying elapsed time during commandline export +- [#275] AS3 Removing returnvoid as last statement + +### Changed +- New GUI based on Substance look and feel +- Menu changed to ribbon panel +- New round icon +- [#258] AS1/2: Improved chained assignments +- [#267] Starting program without choosing a file +- [#286] Saving to temp file first + +### Fixed +- [#123] Improved context menu integration on Windows +- [#233] Globally rename identifier deselects item in the tree +- [#235] Export FLA: Dynamic text fields coordinates +- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation +- [#251] Export FLA: Fixed filter strength rounding +- [#257] Export FLA: Text field color and size issues +- [#259] Fixed images alpha +- [#260] Export FLA: Labels position +- [#268] AS1/2 Function parameter shown as register instead loc +- [#272] AS3 Class initializer editation fix +- [#276] Fixed anonymous/inline functions handling +- [#220] Improved editing fonts / texts +- [#284],... other small fixes + +## [1.6.7] - 2013-07-20 +### Added +- [#220] Selection of font to import characters from +- [#232] Automatically add .swf extension in saveas dialog +- [#253] Abort/Retry/Ignore dialog on errors with file saving + +### Changed +- Improved translations + +### Fixed +- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation +- [#203] AS1/2 improved direct editing +- [#220] Adding characters to font fix +- [#225] AS1/2 object literal without name quotes +- [#236] AS1/2 Rename invalid identifiers issues +- [#245] AS3 Double space around "as" keyword +- [#247] AS3 Scrolling to main class at startup +- [#248] Memory issues (slowdown) +- [#254] Expressions as commands +- [#255] Windows 7 loading issues +- [#256] AS3 Object literal in return clause +- SWF text parsing (new lines) +- Labels size by locales + +## [1.6.6 update 2] - 2013-07-16 +### Fixed +- [#241] Program could not be started + +## [1.6.6 update 1] - 2013-07-16 +### Changed +- Better localization support + +### Fixed +- [#238],[#239],[#240] Fixed deobfuscation related problems +- [#237] Parentheses in AS1/2 add,subtract + +## [1.6.6] - 2013-07-16 +### Added +- [#217] Russian translation (focus) +- [#219] Hungarian translation (honfika) +- [#224] Swedish translation (Capasha) +- [#220] Adding characters to Fonts, displaying font info +- [#121] Search progress indication +- Error log + +### Changed +- [#203] Improved direct editing of AS1/2 +- [#207] Update SWF preview after switching external/internal flash player + +### Fixed +- [#151] Memory caching +- [#171] Skipping invalid AS3 code - newobject, newarray +- [#206] AS3 switch problem +- [#208] Renaming anonymous functions +- [#209],[#229] FLA export texts positions +- [#213],[#221] other decompilation issues +- [#225] AS object literal broken with ternar operator +- [#226] onClip indentation in FLA export +- [#227] gotoAndStop wrong frame index +- [#230] FLA export missing strokes +- Shapes viewer - missing strokes + +## [1.6.5 update 1] - 2013-07-09 +### Fixed +- [#151] Fixed caching in memory +- [#172] AS1/2 constant detection fix +- [#174] Renaming SymbolClass fix +- [#175],[#212] Fixed create directory issues on export +- [#185],[#186] on-clip actions indentation +- [#197] AS1/2 Missing storeregister before switch +- [#216] AS2 Fixed field order +- [#213] AS2 Fixed var fields quotes, switch nullpointer + +## [1.6.5] - 2013-07-08 +### Added +- Multilanguage support (currently English and Czech) +- [#151] Option for caching in memory instead of files +- [#168] Export selection in tree context menu +- [#176] option to show main class on startup +- [#177] saving window maximized state +- [#202] Removing tags other than DefineSprite + +### Changed +- [#173],[#190] Better renaming +- [#129], [#153] Better deobfuscation +- [#180] better error handling +- [#185],[#186] better displaying and exporting onclip actions + +### Fixed +- [#123] Better context menu integration +- [#136] FLA export - text sizes +- [#137],[#179] foreach issues (hasNext) +- [#144] Plain text export - empty line fix +- [#144] Not displaying texts +- [#164] DefineMorphShape issues +- [#167] Sprite tag appearing twice in export filename +- [#170] AS3 Try in loop +- [#172] loop detection fix +- [#175] use empty namespace +- [#178] AS subtract with negate +- [#181] AS3 missing quotes in object field +- [#182] missing namespace imports +- [#183] wrong stage size +- [#184] wrong video link +- [#189] Fixed three dots in tree +- [#191] Focalgradient fill fix +- [#195] AS2 issues +- [#196],[#197] switch issues +- [#198] DefineFont2 empty check +- [#200] DefineBitsLossLess fix +- [#201] Nonworking main window in Linux/MacOS (due toAssociation) + +## [1.6.4 update 1] - 2013-06-30 +### Fixed +- [#166] For loops detection +- [#165] AS3:direct lookupswitch support + +## [1.6.4] - 2013-06-30 +### Added +- [#63] Globally rename identifier +- [#67] Deobfuscation - rename identifiers according to type +- [#117] Drag & Drop SWF file to main window opens it +- [#123] Context menu integration on Windows +- [#127] Drag & Drop items from tree outside of application +- [#134] AS3: Find document class +- [#144] New lines in plain text export +- [#155] Remembering window size + splitbar positions between runs + +### Changed +- [#142] Using exportassets tag for tag names +- [#146] Display AS2 classes as tree of packages +- Better loop detection + +### Fixed +- [#129] AS1/2: not refreshing decompiled after rename +- [#130] Renaming SymbolClass identifiers too +- [#132] Renaming identifiers renamed strings +- [#136] Invalid text positions in FLA export +- [#145] Unicode support +- [#147] Escape filenames during obfuscated AS3 export +- [#148] Better package vs classname handling +- [#152] Empty if branches not inverted +- [#156] Better search handling (not freezing) +- [#157] AS3: Try statements in loops +- [#158] Graph repaint problem +- [#159] AS3: Improper rest parameter handling +- [#160] Commandline binaryData export +- [#162] DefineBitsJPEG2 image replacing +- [#163] Closing SWF file after loading +- other minor fixes + +## [1.6.3 update 2] - 2013-06-21 +### Changed +- [#149] Ifs with empty onTrue branches now inverted + +### Fixed +- [#150] Long line restriction removed + +## [1.6.3 update 1] - 2013-06-21 +### Fixed +- Memory limit decreased - FFDec was not working on 32 bit JVM. + +## [1.6.3] - 2013-06-20 +### Changed +- Parallel SpeedUp can be disabled in menu +- Better loop detection + +### Fixed +- [#119] Replacements file not found issue +- [#101] AS1/2 postincrement fix +- [#114],[#116],[#135],[#141] Fixed loop detection +- [#102] Fixed loop highlighting in export +- [#124] Flash player file path detection +- [#128] Improved imports +- [#135] CommentItem fix +- [#129],[#131] Better deobfuscation +- [#104] AS3 inc/dec local deobfuscation fix +- [#113],[#133],[#140] Memory limit increased + +## [1.6.2] - 2013-06-09 +### Added +- New loop detection algorithm + +### Changed +- [#108] - Faster loading and decompiling (Parallelism) +- Improved Internal flash viewer - shapes and morphshapes + +### Fixed +- Ternar operator fix +- [#102] Fixed Shapes to FLA export +- AS1/2 class detection fix +- [#105],[#104],[#101] fixed via new loop detection + +## [1.6.1] - 2013-06-03 +### Added +- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) +- [#109], [#106], [#107] some code improvements + +### Changed +- Application needs Java 1.7 to run + +### Removed +- Support for Java before 1.7 + +### Fixed +- [#102], [#110] AS3: Class highlight fix +- [#103] AS3:Fixed setslot handling +- [#104] AS3:Inc/Declocal nullpointer fix +- [#104] Multiple conditions in loop fix +- [#111] AS3:Object literal truncates line +- [#105] Better do while..break handling +- loop fixes + +## [1.6.0 update 1] - 2013-05-25 +### Added +- better FLA export + +### Fixed +- Many FLA export related bugs (like [#96]) +- [#98] Empty initializers do not cause empty lines now +- [#99] small logging issues +- [#100] large obfuscated code support + +## [1.6.0] - 2013-05-20 +### Added +- Export to FLA (Experimental BETA!) +- [#85] Search text in all ActionScripts +- SWF 11 support + +### Fixed +- [#79] ActionStartDrag constraint fix +- [#92] Inversed GreaterThan/LessThan +- [#93] AS1/2 fixed switch detection +- [#94] AS1/2 ActionTry - register cast fix +- [#95] Better script end handling + +## [1.5.2] - 2013-05-05 +### Added +- Improved automatic update system (changes log). +- Handling script traits as separate objects. +- [#86] open/save file dialog now accepts absolute paths in quotes + +### Fixed +- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 +- [#88] Fixed graph building +- [#89] AS3: bracket in property name lead to missing dot +- [#82] printgraph issue + +## [1.5.1 update 1] - 2013-05-04 +### Added +- Exporting texts via commandline +- Exporting all via commandline + +### Fixed +- DefineText2 color parameter +- AS3 GetSlot,SetSlot +- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... +- [#83] Fixed images transparency (zlib fix) +- Fixed graphparts with only jump in it (obfuscators) +- MORPHGRADIENT FIX +- Trasparency in DefineBitsJPEG3 and 4 +- Displaying shapes,morphshapes and sprites with bitmaps + +## [1.5.1] - 2013-05-01 +### Added +- Support for larger switches (10+cases) +- Editing text tags +- [#65] Exporting text tags +- Removing sprites +- Replacing images + +### Fixed +- DefineMorphShape2 fix +- [#79] - AS1/2 class detection fix, wrong printgraph fix +- [#78] - script trait slots fix + +## [1.5.0 update 1] - 2013-04-21 +### Fixed +- Automatic deobfuscation config defaulted to Off for AS1/2. + +## [1.5.0] - 2013-04-20 +### Added +- Direct editing of ActionScript 1/2 code (Beta) +- AS1/2: ifFrameLoaded support +- Automatic deobfuscation can be disabled in the menu +- [#48] - Decompile only specified class (commandline option) +- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices +- [#66] - Decompressing LZMA via commandline +- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) +- [#69] - DoABC vs DoABCDefine tags decompilation +- [#75] - Comma separator in while/do..while conditions, better if..return handling +- AS1/2: parsing NaN,Infinity value (Fix for [#73]) + +### Changed +- New icons (edit/save/cancel and main menu) + +### Fixed +- [#62] - Errors on not defined character tags (import tag) +- [#72] - First ternary operator expression was always true +- Fixed many deobfuscation related bugs + +## [1.4.3 update 2] - 2013-04-10 +### Fixed +- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) +- Try to fix lib/FlashPlayer.exe issue + +## [1.4.3 update 1] - 2013-04-06 +### Fixed +- [#38] - Indentation in const/var initializers, missing semicolon +- [#56] - Test output left in last release +- [#57] - Unknown instructions now do not log an exception (obfuscators do this) +- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. +- AS3 loops fix +- While true fix + +## [1.4.3] - 2013-04-04 +### Added +- AS1/2 Better deobfuscation + +### Fixed +- [#45] - Unicode characters fix +- [#50] - AS1/2 Function body deobfuscation fix +- [#51] - Displaying java class names instead of expressions +- [#52] - AS1/2 Better constantpool detection (deobfuscation) +- [#38] - AS3 indentation in initialized const/var value for newobject +- Fixed ImportAssets2 tag id + +## [1.4.2 update 1] - 2013-03-25 +### Fixed +- [#47] - wrong AS3 deobfuscation +- AS3 deobfuscation issues +- AS3 switch + +## [1.4.2] - 2013-03-24 +### Added +- [#42] - Displaying code as hex +- AS1/2: Renaming identifiers (deobfuscation) +- AS1/2,AS3: Better deobfuscation +- Storing configuration to user home +- Installer for Windows systems + +### Changed +- Graph button changed to icon. + +### Fixed +- [#39] - AS1/2 NewMethod..Pop fix +- [#40] - No logging + For..in..return decompilation +- [#44] - DefineFont2 fix +- [#36] - Multiname with invalid index +- [#43] - Ternary operator and more +- [#46] - Ifs with empty branches got ignored +- [#3] - Ignoring unknown opcodes +- Logging exceptions during export + +## [1.4.1] - 2013-03-10 +### Added +- Exporting sounds +- Better AS1/2 deobfuscation (disassembly & decompilation) + +### Fixed +- Exporting only first 1000 frames of the movie +- Decompiled code was not refreshed on AS1/2 changes +- Application no longer creates empty directories on export + +## [1.4.0 update 1] - 2013-03-04 +### Fixed +- [#37] - AS3: Reversed loop conditions + +## [1.4.0] - 2013-03-03 +### Added +- AS3: ignoring return void at the end of methods +- New icons - Silk icons +- AS3: Traits list sort button +- Better Graph display +- Frames view +- Exporting of movies (No audio) +- Some AS3 related Tests +- Homepage & Donate link in the menu + +### Changed +- Tree view instead of tabs +- AS1/2 and AS3 now share same decompiling method. + +### Fixed +- [#34] - Reversed loop conditions +- [#35] - Fixed unicode strings (Japanese) + +## [1.3.1] - 2013-02-23 +### Changed +- Flash player no longer uses SWT library + +### Fixed +- [#32] - AS2: Action255 bug +- [#31] - Erorrneous tags are now ignored +- DefineBitsLossLess 1&2 on 8bit colormapped images + +## [1.3.0] - 2013-02-17 +### Added +- Decompilation is more resistant to obfuscation +- Shapes SVG export +- AS2: Decompiling classes & interfaces +- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) +- AS3: Deobfuscation menu +- Graph button for displaying code flow Graph + +### Changed +- Complete new decompiling method in both AS1/2 and AS3 +- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". +- To edit source, Edit button must be pressed first (Due to click&go feature) + +### Fixed +- AS3: Method info editor fixed +- Edittext & Button displaying + +## [1.2.0] - 2013-01-19 +### Added +- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). +- Images display and export +- AS2: Exporting selection +- Progressbar during loading + +### Changed +- One merged window for AS1/2 and 3. +- Updated icons + +### Fixed +- AS3: xml attrib, switch in anonymous function (in AS2 too) + +## [1.1.0] - 2013-01-02 +### Added +- Checking for updates +- AS2: Exporting +- AS3: Decompiling whole scripts instead of just classes +- AS3: Exporting selected scripts +- AS3: Script search bar +- AS3: List of DoABCTags now has default "- all -" item +- AS3: Better imports, use namespaces +- AS3: XML related instructions +- AS3: Anonymous functions with names +- AS3: Better initialization of const values +- Logging exceptions to log.txt file + +### Fixed +- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops + +## [1.0.1] - 2012-12-26 +### Added +- AS3: Runtime namespace resolving +- AS3: Arguments variable +- AS3: Better recognizing Pre/Post Increments/Decrements +- AS3: Better declarations + +### Fixed +- AS3: Fixed static variables + +## [1.0.0] - 2012-12-24 +### Added +- Support for LZMA compressed files +- AS3: Detecting local register types for declaration. +- AS3: Displaying inline functions +- AS3: Last save/open dir is remembered +- AS3: Better usage detection for multinames +- AS3: Commandline arguments for exporting +- AS3: Better chained assignments +- AS2: FSCommand2 instruction support +- Proxy: Mimetype application/octet-stream added +- Added executable for Windows users. + +### Changed +- AS3: GUI - Constants tab moved to the top +- AS3: Deobfuscation is now optional, can be accessed via menu + +### Fixed +- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) +- Other minor fixes + +## [beta 1] - 2011-07-30 +### Added +- AS3: Automatic computing method body parameters (EXPERIMENTAL) +- AS3: Editing return type of methods +- AS3: Editing type and default value for variables/constants (Slot/Const traits) +- AS1/2: Few enhancements +- About dialog + +### Changed +- Gui: Updated Icons + +### Fixed +- AS 1/2: Fixed large bug causing Ifs to not decompile properly +- Proxy: Some minor fixes + +## [alpha 10] - 2011-07-13 +### Added +- AS3:Highlighting actual line +- AS3:Completing instruction names via Ctrl+Space +- AS3:Editing method parameters, method body parameters via tab panel +- AS3:ByteCode minor_version 17 supported - decimal datatypes +- AS3:Local variables and method parameters take name from debug information if present +- AS3:Automatic renaming of classes/methods when obfuscated names +- AS3:Better error messages (When cannot decompile obfuscated code) + +### Fixed +- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) +- AS3:Hilighting fixes +- AS3:Fixed decrement/increment statements decompilation +- AS3:Decompiler now adds variable declarations on the beginning of decompiled method +- AS3:Try/catch statements fixed when debug information present +- AS3:Fixed for each statements +- AS3:Other minor fixes + +## [alpha 9] - 2011-07-02 +### Added +- AS3: Added disassembling of some new types of instructions +- AS3: Exporting source as PCode + +### Fixed +- AS3: Many other bugfixes... + +## [alpha 8] - 2010-09-19 +### Added +- AS3: Editing exceptions +- AS3: Finding usage of multinames from constant table + +### Changed +- AS1/2: Better GUI +- AS1/2: Better decompiling of Ifs, For..in + +## [alpha 7] - 2010-09-04 +### Added +- Initial public release + +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 +[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 +[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 +[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 +[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 +[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 +[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 +[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 +[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 +[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 +[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 +[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 +[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 +[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 +[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 +[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 +[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 +[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 +[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 +[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 +[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 +[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 +[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 +[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 +[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 +[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 +[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 +[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 +[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 +[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 +[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 +[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 +[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 +[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 +[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 +[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 +[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 +[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 +[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 +[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 +[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 +[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 +[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 +[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 +[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 +[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 +[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 +[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 +[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 +[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 +[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 +[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 +[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 +[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 +[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 +[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 +[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 +[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 +[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 +[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 +[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 +[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 +[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 +[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 +[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 +[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 +[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 +[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 +[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 +[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 +[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 +[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 +[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 +[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 +[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 +[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 +[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 +[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 +[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 +[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 +[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 +[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 +[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 +[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 +[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 +[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 +[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 +[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 +[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 +[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 +[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 +[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 +[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1156]: https://www.free-decompiler.com/flash/issues/1156 +[#1171]: https://www.free-decompiler.com/flash/issues/1171 +[#1170]: https://www.free-decompiler.com/flash/issues/1170 +[#1241]: https://www.free-decompiler.com/flash/issues/1241 +[#1162]: https://www.free-decompiler.com/flash/issues/1162 +[#1199]: https://www.free-decompiler.com/flash/issues/1199 +[#1151]: https://www.free-decompiler.com/flash/issues/1151 +[#1128]: https://www.free-decompiler.com/flash/issues/1128 +[#1163]: https://www.free-decompiler.com/flash/issues/1163 +[#1172]: https://www.free-decompiler.com/flash/issues/1172 +[#1174]: https://www.free-decompiler.com/flash/issues/1174 +[#1183]: https://www.free-decompiler.com/flash/issues/1183 +[#1193]: https://www.free-decompiler.com/flash/issues/1193 +[#1200]: https://www.free-decompiler.com/flash/issues/1200 +[#1198]: https://www.free-decompiler.com/flash/issues/1198 +[#1205]: https://www.free-decompiler.com/flash/issues/1205 +[#1194]: https://www.free-decompiler.com/flash/issues/1194 +[#1210]: https://www.free-decompiler.com/flash/issues/1210 +[#1217]: https://www.free-decompiler.com/flash/issues/1217 +[#1244]: https://www.free-decompiler.com/flash/issues/1244 +[#1247]: https://www.free-decompiler.com/flash/issues/1247 +[#1236]: https://www.free-decompiler.com/flash/issues/1236 +[#1251]: https://www.free-decompiler.com/flash/issues/1251 +[#1265]: https://www.free-decompiler.com/flash/issues/1265 +[#1268]: https://www.free-decompiler.com/flash/issues/1268 +[#1161]: https://www.free-decompiler.com/flash/issues/1161 +[#1118]: https://www.free-decompiler.com/flash/issues/1118 +[#409]: https://www.free-decompiler.com/flash/issues/409 +[#1132]: https://www.free-decompiler.com/flash/issues/1132 +[#1134]: https://www.free-decompiler.com/flash/issues/1134 +[#1121]: https://www.free-decompiler.com/flash/issues/1121 +[#1052]: https://www.free-decompiler.com/flash/issues/1052 +[#1145]: https://www.free-decompiler.com/flash/issues/1145 +[#758]: https://www.free-decompiler.com/flash/issues/758 +[#1096]: https://www.free-decompiler.com/flash/issues/1096 +[#1104]: https://www.free-decompiler.com/flash/issues/1104 +[#1107]: https://www.free-decompiler.com/flash/issues/1107 +[#1106]: https://www.free-decompiler.com/flash/issues/1106 +[#1113]: https://www.free-decompiler.com/flash/issues/1113 +[#1075]: https://www.free-decompiler.com/flash/issues/1075 +[#1127]: https://www.free-decompiler.com/flash/issues/1127 +[#1103]: https://www.free-decompiler.com/flash/issues/1103 +[#1133]: https://www.free-decompiler.com/flash/issues/1133 +[#1135]: https://www.free-decompiler.com/flash/issues/1135 +[#1138]: https://www.free-decompiler.com/flash/issues/1138 +[#1139]: https://www.free-decompiler.com/flash/issues/1139 +[#930]: https://www.free-decompiler.com/flash/issues/930 +[#1137]: https://www.free-decompiler.com/flash/issues/1137 +[#1144]: https://www.free-decompiler.com/flash/issues/1144 +[#1147]: https://www.free-decompiler.com/flash/issues/1147 +[#1148]: https://www.free-decompiler.com/flash/issues/1148 +[#1152]: https://www.free-decompiler.com/flash/issues/1152 +[#1154]: https://www.free-decompiler.com/flash/issues/1154 +[#116]: https://www.free-decompiler.com/flash/issues/116 +[#1070]: https://www.free-decompiler.com/flash/issues/1070 +[#1098]: https://www.free-decompiler.com/flash/issues/1098 +[#1033]: https://www.free-decompiler.com/flash/issues/1033 +[#1083]: https://www.free-decompiler.com/flash/issues/1083 +[#1091]: https://www.free-decompiler.com/flash/issues/1091 +[#1076]: https://www.free-decompiler.com/flash/issues/1076 +[#1068]: https://www.free-decompiler.com/flash/issues/1068 +[#1063]: https://www.free-decompiler.com/flash/issues/1063 +[#1019]: https://www.free-decompiler.com/flash/issues/1019 +[#1016]: https://www.free-decompiler.com/flash/issues/1016 +[#1010]: https://www.free-decompiler.com/flash/issues/1010 +[#1008]: https://www.free-decompiler.com/flash/issues/1008 +[#1004]: https://www.free-decompiler.com/flash/issues/1004 +[#933]: https://www.free-decompiler.com/flash/issues/933 +[#1062]: https://www.free-decompiler.com/flash/issues/1062 +[#418]: https://www.free-decompiler.com/flash/issues/418 +[#1047]: https://www.free-decompiler.com/flash/issues/1047 +[#812]: https://www.free-decompiler.com/flash/issues/812 +[#1056]: https://www.free-decompiler.com/flash/issues/1056 +[#1057]: https://www.free-decompiler.com/flash/issues/1057 +[#991]: https://www.free-decompiler.com/flash/issues/991 +[#689]: https://www.free-decompiler.com/flash/issues/689 +[#1060]: https://www.free-decompiler.com/flash/issues/1060 +[#1037]: https://www.free-decompiler.com/flash/issues/1037 +[#489]: https://www.free-decompiler.com/flash/issues/489 +[#1007]: https://www.free-decompiler.com/flash/issues/1007 +[#1044]: https://www.free-decompiler.com/flash/issues/1044 +[#947]: https://www.free-decompiler.com/flash/issues/947 +[#953]: https://www.free-decompiler.com/flash/issues/953 +[#954]: https://www.free-decompiler.com/flash/issues/954 +[#950]: https://www.free-decompiler.com/flash/issues/950 +[#945]: https://www.free-decompiler.com/flash/issues/945 +[#957]: https://www.free-decompiler.com/flash/issues/957 +[#956]: https://www.free-decompiler.com/flash/issues/956 +[#968]: https://www.free-decompiler.com/flash/issues/968 +[#978]: https://www.free-decompiler.com/flash/issues/978 +[#955]: https://www.free-decompiler.com/flash/issues/955 +[#966]: https://www.free-decompiler.com/flash/issues/966 +[#999]: https://www.free-decompiler.com/flash/issues/999 +[#1000]: https://www.free-decompiler.com/flash/issues/1000 +[#1017]: https://www.free-decompiler.com/flash/issues/1017 +[#1030]: https://www.free-decompiler.com/flash/issues/1030 +[#949]: https://www.free-decompiler.com/flash/issues/949 +[#944]: https://www.free-decompiler.com/flash/issues/944 +[#939]: https://www.free-decompiler.com/flash/issues/939 +[#942]: https://www.free-decompiler.com/flash/issues/942 +[#952]: https://www.free-decompiler.com/flash/issues/952 +[#858]: https://www.free-decompiler.com/flash/issues/858 +[#905]: https://www.free-decompiler.com/flash/issues/905 +[#920]: https://www.free-decompiler.com/flash/issues/920 +[#921]: https://www.free-decompiler.com/flash/issues/921 +[#924]: https://www.free-decompiler.com/flash/issues/924 +[#895]: https://www.free-decompiler.com/flash/issues/895 +[#884]: https://www.free-decompiler.com/flash/issues/884 +[#899]: https://www.free-decompiler.com/flash/issues/899 +[#903]: https://www.free-decompiler.com/flash/issues/903 +[#855]: https://www.free-decompiler.com/flash/issues/855 +[#850]: https://www.free-decompiler.com/flash/issues/850 +[#832]: https://www.free-decompiler.com/flash/issues/832 +[#904]: https://www.free-decompiler.com/flash/issues/904 +[#910]: https://www.free-decompiler.com/flash/issues/910 +[#922]: https://www.free-decompiler.com/flash/issues/922 +[#916]: https://www.free-decompiler.com/flash/issues/916 +[#938]: https://www.free-decompiler.com/flash/issues/938 +[#897]: https://www.free-decompiler.com/flash/issues/897 +[#470]: https://www.free-decompiler.com/flash/issues/470 +[#877]: https://www.free-decompiler.com/flash/issues/877 +[#878]: https://www.free-decompiler.com/flash/issues/878 +[#845]: https://www.free-decompiler.com/flash/issues/845 +[#883]: https://www.free-decompiler.com/flash/issues/883 +[#882]: https://www.free-decompiler.com/flash/issues/882 +[#760]: https://www.free-decompiler.com/flash/issues/760 +[#887]: https://www.free-decompiler.com/flash/issues/887 +[#842]: https://www.free-decompiler.com/flash/issues/842 +[#841]: https://www.free-decompiler.com/flash/issues/841 +[#772]: https://www.free-decompiler.com/flash/issues/772 +[#762]: https://www.free-decompiler.com/flash/issues/762 +[#862]: https://www.free-decompiler.com/flash/issues/862 +[#865]: https://www.free-decompiler.com/flash/issues/865 +[#613]: https://www.free-decompiler.com/flash/issues/613 +[#868]: https://www.free-decompiler.com/flash/issues/868 +[#713]: https://www.free-decompiler.com/flash/issues/713 +[#807]: https://www.free-decompiler.com/flash/issues/807 +[#728]: https://www.free-decompiler.com/flash/issues/728 +[#857]: https://www.free-decompiler.com/flash/issues/857 +[#860]: https://www.free-decompiler.com/flash/issues/860 +[#824]: https://www.free-decompiler.com/flash/issues/824 +[#809]: https://www.free-decompiler.com/flash/issues/809 +[#805]: https://www.free-decompiler.com/flash/issues/805 +[#825]: https://www.free-decompiler.com/flash/issues/825 +[#737]: https://www.free-decompiler.com/flash/issues/737 +[#350]: https://www.free-decompiler.com/flash/issues/350 +[#814]: https://www.free-decompiler.com/flash/issues/814 +[#816]: https://www.free-decompiler.com/flash/issues/816 +[#835]: https://www.free-decompiler.com/flash/issues/835 +[#836]: https://www.free-decompiler.com/flash/issues/836 +[#848]: https://www.free-decompiler.com/flash/issues/848 +[#817]: https://www.free-decompiler.com/flash/issues/817 +[#849]: https://www.free-decompiler.com/flash/issues/849 +[#852]: https://www.free-decompiler.com/flash/issues/852 +[#837]: https://www.free-decompiler.com/flash/issues/837 +[#811]: https://www.free-decompiler.com/flash/issues/811 +[#745]: https://www.free-decompiler.com/flash/issues/745 +[#803]: https://www.free-decompiler.com/flash/issues/803 +[#738]: https://www.free-decompiler.com/flash/issues/738 +[#742]: https://www.free-decompiler.com/flash/issues/742 +[#747]: https://www.free-decompiler.com/flash/issues/747 +[#749]: https://www.free-decompiler.com/flash/issues/749 +[#752]: https://www.free-decompiler.com/flash/issues/752 +[#753]: https://www.free-decompiler.com/flash/issues/753 +[#759]: https://www.free-decompiler.com/flash/issues/759 +[#766]: https://www.free-decompiler.com/flash/issues/766 +[#768]: https://www.free-decompiler.com/flash/issues/768 +[#773]: https://www.free-decompiler.com/flash/issues/773 +[#776]: https://www.free-decompiler.com/flash/issues/776 +[#783]: https://www.free-decompiler.com/flash/issues/783 +[#785]: https://www.free-decompiler.com/flash/issues/785 +[#787]: https://www.free-decompiler.com/flash/issues/787 +[#788]: https://www.free-decompiler.com/flash/issues/788 +[#790]: https://www.free-decompiler.com/flash/issues/790 +[#794]: https://www.free-decompiler.com/flash/issues/794 +[#798]: https://www.free-decompiler.com/flash/issues/798 +[#800]: https://www.free-decompiler.com/flash/issues/800 +[#676]: https://www.free-decompiler.com/flash/issues/676 +[#734]: https://www.free-decompiler.com/flash/issues/734 +[#687]: https://www.free-decompiler.com/flash/issues/687 +[#709]: https://www.free-decompiler.com/flash/issues/709 +[#732]: https://www.free-decompiler.com/flash/issues/732 +[#730]: https://www.free-decompiler.com/flash/issues/730 +[#735]: https://www.free-decompiler.com/flash/issues/735 +[#722]: https://www.free-decompiler.com/flash/issues/722 +[#725]: https://www.free-decompiler.com/flash/issues/725 +[#715]: https://www.free-decompiler.com/flash/issues/715 +[#635]: https://www.free-decompiler.com/flash/issues/635 +[#726]: https://www.free-decompiler.com/flash/issues/726 +[#716]: https://www.free-decompiler.com/flash/issues/716 +[#717]: https://www.free-decompiler.com/flash/issues/717 +[#718]: https://www.free-decompiler.com/flash/issues/718 +[#720]: https://www.free-decompiler.com/flash/issues/720 +[#719]: https://www.free-decompiler.com/flash/issues/719 +[#723]: https://www.free-decompiler.com/flash/issues/723 +[#288]: https://www.free-decompiler.com/flash/issues/288 +[#677]: https://www.free-decompiler.com/flash/issues/677 +[#389]: https://www.free-decompiler.com/flash/issues/389 +[#701]: https://www.free-decompiler.com/flash/issues/701 +[#707]: https://www.free-decompiler.com/flash/issues/707 +[#302]: https://www.free-decompiler.com/flash/issues/302 +[#685]: https://www.free-decompiler.com/flash/issues/685 +[#698]: https://www.free-decompiler.com/flash/issues/698 +[#710]: https://www.free-decompiler.com/flash/issues/710 +[#711]: https://www.free-decompiler.com/flash/issues/711 +[#681]: https://www.free-decompiler.com/flash/issues/681 +[#688]: https://www.free-decompiler.com/flash/issues/688 +[#691]: https://www.free-decompiler.com/flash/issues/691 +[#524]: https://www.free-decompiler.com/flash/issues/524 +[#663]: https://www.free-decompiler.com/flash/issues/663 +[#702]: https://www.free-decompiler.com/flash/issues/702 +[#539]: https://www.free-decompiler.com/flash/issues/539 +[#650]: https://www.free-decompiler.com/flash/issues/650 +[#680]: https://www.free-decompiler.com/flash/issues/680 +[#649]: https://www.free-decompiler.com/flash/issues/649 +[#656]: https://www.free-decompiler.com/flash/issues/656 +[#661]: https://www.free-decompiler.com/flash/issues/661 +[#664]: https://www.free-decompiler.com/flash/issues/664 +[#668]: https://www.free-decompiler.com/flash/issues/668 +[#674]: https://www.free-decompiler.com/flash/issues/674 +[#675]: https://www.free-decompiler.com/flash/issues/675 +[#632]: https://www.free-decompiler.com/flash/issues/632 +[#651]: https://www.free-decompiler.com/flash/issues/651 +[#678]: https://www.free-decompiler.com/flash/issues/678 +[#672]: https://www.free-decompiler.com/flash/issues/672 +[#684]: https://www.free-decompiler.com/flash/issues/684 +[#647]: https://www.free-decompiler.com/flash/issues/647 +[#648]: https://www.free-decompiler.com/flash/issues/648 +[#612]: https://www.free-decompiler.com/flash/issues/612 +[#623]: https://www.free-decompiler.com/flash/issues/623 +[#624]: https://www.free-decompiler.com/flash/issues/624 +[#627]: https://www.free-decompiler.com/flash/issues/627 +[#640]: https://www.free-decompiler.com/flash/issues/640 +[#595]: https://www.free-decompiler.com/flash/issues/595 +[#592]: https://www.free-decompiler.com/flash/issues/592 +[#585]: https://www.free-decompiler.com/flash/issues/585 +[#578]: https://www.free-decompiler.com/flash/issues/578 +[#501]: https://www.free-decompiler.com/flash/issues/501 +[#616]: https://www.free-decompiler.com/flash/issues/616 +[#559]: https://www.free-decompiler.com/flash/issues/559 +[#401]: https://www.free-decompiler.com/flash/issues/401 +[#593]: https://www.free-decompiler.com/flash/issues/593 +[#594]: https://www.free-decompiler.com/flash/issues/594 +[#579]: https://www.free-decompiler.com/flash/issues/579 +[#428]: https://www.free-decompiler.com/flash/issues/428 +[#337]: https://www.free-decompiler.com/flash/issues/337 +[#584]: https://www.free-decompiler.com/flash/issues/584 +[#576]: https://www.free-decompiler.com/flash/issues/576 +[#250]: https://www.free-decompiler.com/flash/issues/250 +[#580]: https://www.free-decompiler.com/flash/issues/580 +[#510]: https://www.free-decompiler.com/flash/issues/510 +[#583]: https://www.free-decompiler.com/flash/issues/583 +[#586]: https://www.free-decompiler.com/flash/issues/586 +[#574]: https://www.free-decompiler.com/flash/issues/574 +[#570]: https://www.free-decompiler.com/flash/issues/570 +[#563]: https://www.free-decompiler.com/flash/issues/563 +[#561]: https://www.free-decompiler.com/flash/issues/561 +[#509]: https://www.free-decompiler.com/flash/issues/509 +[#433]: https://www.free-decompiler.com/flash/issues/433 +[#557]: https://www.free-decompiler.com/flash/issues/557 +[#556]: https://www.free-decompiler.com/flash/issues/556 +[#504]: https://www.free-decompiler.com/flash/issues/504 +[#529]: https://www.free-decompiler.com/flash/issues/529 +[#538]: https://www.free-decompiler.com/flash/issues/538 +[#537]: https://www.free-decompiler.com/flash/issues/537 +[#540]: https://www.free-decompiler.com/flash/issues/540 +[#387]: https://www.free-decompiler.com/flash/issues/387 +[#552]: https://www.free-decompiler.com/flash/issues/552 +[#494]: https://www.free-decompiler.com/flash/issues/494 +[#513]: https://www.free-decompiler.com/flash/issues/513 +[#262]: https://www.free-decompiler.com/flash/issues/262 +[#499]: https://www.free-decompiler.com/flash/issues/499 +[#508]: https://www.free-decompiler.com/flash/issues/508 +[#305]: https://www.free-decompiler.com/flash/issues/305 +[#312]: https://www.free-decompiler.com/flash/issues/312 +[#503]: https://www.free-decompiler.com/flash/issues/503 +[#304]: https://www.free-decompiler.com/flash/issues/304 +[#306]: https://www.free-decompiler.com/flash/issues/306 +[#507]: https://www.free-decompiler.com/flash/issues/507 +[#424]: https://www.free-decompiler.com/flash/issues/424 +[#425]: https://www.free-decompiler.com/flash/issues/425 +[#478]: https://www.free-decompiler.com/flash/issues/478 +[#485]: https://www.free-decompiler.com/flash/issues/485 +[#517]: https://www.free-decompiler.com/flash/issues/517 +[#518]: https://www.free-decompiler.com/flash/issues/518 +[#361]: https://www.free-decompiler.com/flash/issues/361 +[#392]: https://www.free-decompiler.com/flash/issues/392 +[#516]: https://www.free-decompiler.com/flash/issues/516 +[#495]: https://www.free-decompiler.com/flash/issues/495 +[#496]: https://www.free-decompiler.com/flash/issues/496 +[#299]: https://www.free-decompiler.com/flash/issues/299 +[#303]: https://www.free-decompiler.com/flash/issues/303 +[#324]: https://www.free-decompiler.com/flash/issues/324 +[#346]: https://www.free-decompiler.com/flash/issues/346 +[#371]: https://www.free-decompiler.com/flash/issues/371 +[#426]: https://www.free-decompiler.com/flash/issues/426 +[#457]: https://www.free-decompiler.com/flash/issues/457 +[#458]: https://www.free-decompiler.com/flash/issues/458 +[#460]: https://www.free-decompiler.com/flash/issues/460 +[#462]: https://www.free-decompiler.com/flash/issues/462 +[#463]: https://www.free-decompiler.com/flash/issues/463 +[#465]: https://www.free-decompiler.com/flash/issues/465 +[#466]: https://www.free-decompiler.com/flash/issues/466 +[#369]: https://www.free-decompiler.com/flash/issues/369 +[#390]: https://www.free-decompiler.com/flash/issues/390 +[#453]: https://www.free-decompiler.com/flash/issues/453 +[#459]: https://www.free-decompiler.com/flash/issues/459 +[#461]: https://www.free-decompiler.com/flash/issues/461 +[#451]: https://www.free-decompiler.com/flash/issues/451 +[#454]: https://www.free-decompiler.com/flash/issues/454 +[#455]: https://www.free-decompiler.com/flash/issues/455 +[#474]: https://www.free-decompiler.com/flash/issues/474 +[#477]: https://www.free-decompiler.com/flash/issues/477 +[#481]: https://www.free-decompiler.com/flash/issues/481 +[#484]: https://www.free-decompiler.com/flash/issues/484 +[#493]: https://www.free-decompiler.com/flash/issues/493 +[#365]: https://www.free-decompiler.com/flash/issues/365 +[#366]: https://www.free-decompiler.com/flash/issues/366 +[#429]: https://www.free-decompiler.com/flash/issues/429 +[#447]: https://www.free-decompiler.com/flash/issues/447 +[#354]: https://www.free-decompiler.com/flash/issues/354 +[#438]: https://www.free-decompiler.com/flash/issues/438 +[#436]: https://www.free-decompiler.com/flash/issues/436 +[#446]: https://www.free-decompiler.com/flash/issues/446 +[#427]: https://www.free-decompiler.com/flash/issues/427 +[#405]: https://www.free-decompiler.com/flash/issues/405 +[#420]: https://www.free-decompiler.com/flash/issues/420 +[#421]: https://www.free-decompiler.com/flash/issues/421 +[#430]: https://www.free-decompiler.com/flash/issues/430 +[#397]: https://www.free-decompiler.com/flash/issues/397 +[#431]: https://www.free-decompiler.com/flash/issues/431 +[#169]: https://www.free-decompiler.com/flash/issues/169 +[#335]: https://www.free-decompiler.com/flash/issues/335 +[#404]: https://www.free-decompiler.com/flash/issues/404 +[#407]: https://www.free-decompiler.com/flash/issues/407 +[#399]: https://www.free-decompiler.com/flash/issues/399 +[#400]: https://www.free-decompiler.com/flash/issues/400 +[#398]: https://www.free-decompiler.com/flash/issues/398 +[#382]: https://www.free-decompiler.com/flash/issues/382 +[#396]: https://www.free-decompiler.com/flash/issues/396 +[#357]: https://www.free-decompiler.com/flash/issues/357 +[#391]: https://www.free-decompiler.com/flash/issues/391 +[#395]: https://www.free-decompiler.com/flash/issues/395 +[#334]: https://www.free-decompiler.com/flash/issues/334 +[#301]: https://www.free-decompiler.com/flash/issues/301 +[#383]: https://www.free-decompiler.com/flash/issues/383 +[#386]: https://www.free-decompiler.com/flash/issues/386 +[#367]: https://www.free-decompiler.com/flash/issues/367 +[#380]: https://www.free-decompiler.com/flash/issues/380 +[#292]: https://www.free-decompiler.com/flash/issues/292 +[#375]: https://www.free-decompiler.com/flash/issues/375 +[#378]: https://www.free-decompiler.com/flash/issues/378 +[#325]: https://www.free-decompiler.com/flash/issues/325 +[#210]: https://www.free-decompiler.com/flash/issues/210 +[#355]: https://www.free-decompiler.com/flash/issues/355 +[#313]: https://www.free-decompiler.com/flash/issues/313 +[#330]: https://www.free-decompiler.com/flash/issues/330 +[#332]: https://www.free-decompiler.com/flash/issues/332 +[#344]: https://www.free-decompiler.com/flash/issues/344 +[#295]: https://www.free-decompiler.com/flash/issues/295 +[#297]: https://www.free-decompiler.com/flash/issues/297 +[#307]: https://www.free-decompiler.com/flash/issues/307 +[#309]: https://www.free-decompiler.com/flash/issues/309 +[#310]: https://www.free-decompiler.com/flash/issues/310 +[#311]: https://www.free-decompiler.com/flash/issues/311 +[#327]: https://www.free-decompiler.com/flash/issues/327 +[#328]: https://www.free-decompiler.com/flash/issues/328 +[#333]: https://www.free-decompiler.com/flash/issues/333 +[#336]: https://www.free-decompiler.com/flash/issues/336 +[#338]: https://www.free-decompiler.com/flash/issues/338 +[#315]: https://www.free-decompiler.com/flash/issues/315 +[#123]: https://www.free-decompiler.com/flash/issues/123 +[#243]: https://www.free-decompiler.com/flash/issues/243 +[#326]: https://www.free-decompiler.com/flash/issues/326 +[#287]: https://www.free-decompiler.com/flash/issues/287 +[#290]: https://www.free-decompiler.com/flash/issues/290 +[#291]: https://www.free-decompiler.com/flash/issues/291 +[#294]: https://www.free-decompiler.com/flash/issues/294 +[#298]: https://www.free-decompiler.com/flash/issues/298 +[#296]: https://www.free-decompiler.com/flash/issues/296 +[#314]: https://www.free-decompiler.com/flash/issues/314 +[#316]: https://www.free-decompiler.com/flash/issues/316 +[#318]: https://www.free-decompiler.com/flash/issues/318 +[#319]: https://www.free-decompiler.com/flash/issues/319 +[#323]: https://www.free-decompiler.com/flash/issues/323 +[#223]: https://www.free-decompiler.com/flash/issues/223 +[#261]: https://www.free-decompiler.com/flash/issues/261 +[#269]: https://www.free-decompiler.com/flash/issues/269 +[#274]: https://www.free-decompiler.com/flash/issues/274 +[#275]: https://www.free-decompiler.com/flash/issues/275 +[#258]: https://www.free-decompiler.com/flash/issues/258 +[#267]: https://www.free-decompiler.com/flash/issues/267 +[#286]: https://www.free-decompiler.com/flash/issues/286 +[#233]: https://www.free-decompiler.com/flash/issues/233 +[#235]: https://www.free-decompiler.com/flash/issues/235 +[#263]: https://www.free-decompiler.com/flash/issues/263 +[#264]: https://www.free-decompiler.com/flash/issues/264 +[#265]: https://www.free-decompiler.com/flash/issues/265 +[#266]: https://www.free-decompiler.com/flash/issues/266 +[#281]: https://www.free-decompiler.com/flash/issues/281 +[#251]: https://www.free-decompiler.com/flash/issues/251 +[#257]: https://www.free-decompiler.com/flash/issues/257 +[#259]: https://www.free-decompiler.com/flash/issues/259 +[#260]: https://www.free-decompiler.com/flash/issues/260 +[#268]: https://www.free-decompiler.com/flash/issues/268 +[#272]: https://www.free-decompiler.com/flash/issues/272 +[#276]: https://www.free-decompiler.com/flash/issues/276 +[#220]: https://www.free-decompiler.com/flash/issues/220 +[#284]: https://www.free-decompiler.com/flash/issues/284 +[#232]: https://www.free-decompiler.com/flash/issues/232 +[#253]: https://www.free-decompiler.com/flash/issues/253 +[#137]: https://www.free-decompiler.com/flash/issues/137 +[#242]: https://www.free-decompiler.com/flash/issues/242 +[#244]: https://www.free-decompiler.com/flash/issues/244 +[#203]: https://www.free-decompiler.com/flash/issues/203 +[#225]: https://www.free-decompiler.com/flash/issues/225 +[#236]: https://www.free-decompiler.com/flash/issues/236 +[#245]: https://www.free-decompiler.com/flash/issues/245 +[#247]: https://www.free-decompiler.com/flash/issues/247 +[#248]: https://www.free-decompiler.com/flash/issues/248 +[#254]: https://www.free-decompiler.com/flash/issues/254 +[#255]: https://www.free-decompiler.com/flash/issues/255 +[#256]: https://www.free-decompiler.com/flash/issues/256 +[#241]: https://www.free-decompiler.com/flash/issues/241 +[#238]: https://www.free-decompiler.com/flash/issues/238 +[#239]: https://www.free-decompiler.com/flash/issues/239 +[#240]: https://www.free-decompiler.com/flash/issues/240 +[#237]: https://www.free-decompiler.com/flash/issues/237 +[#217]: https://www.free-decompiler.com/flash/issues/217 +[#219]: https://www.free-decompiler.com/flash/issues/219 +[#224]: https://www.free-decompiler.com/flash/issues/224 +[#121]: https://www.free-decompiler.com/flash/issues/121 +[#207]: https://www.free-decompiler.com/flash/issues/207 +[#151]: https://www.free-decompiler.com/flash/issues/151 +[#171]: https://www.free-decompiler.com/flash/issues/171 +[#206]: https://www.free-decompiler.com/flash/issues/206 +[#208]: https://www.free-decompiler.com/flash/issues/208 +[#209]: https://www.free-decompiler.com/flash/issues/209 +[#229]: https://www.free-decompiler.com/flash/issues/229 +[#213]: https://www.free-decompiler.com/flash/issues/213 +[#221]: https://www.free-decompiler.com/flash/issues/221 +[#226]: https://www.free-decompiler.com/flash/issues/226 +[#227]: https://www.free-decompiler.com/flash/issues/227 +[#230]: https://www.free-decompiler.com/flash/issues/230 +[#172]: https://www.free-decompiler.com/flash/issues/172 +[#174]: https://www.free-decompiler.com/flash/issues/174 +[#175]: https://www.free-decompiler.com/flash/issues/175 +[#212]: https://www.free-decompiler.com/flash/issues/212 +[#185]: https://www.free-decompiler.com/flash/issues/185 +[#186]: https://www.free-decompiler.com/flash/issues/186 +[#197]: https://www.free-decompiler.com/flash/issues/197 +[#216]: https://www.free-decompiler.com/flash/issues/216 +[#168]: https://www.free-decompiler.com/flash/issues/168 +[#176]: https://www.free-decompiler.com/flash/issues/176 +[#177]: https://www.free-decompiler.com/flash/issues/177 +[#202]: https://www.free-decompiler.com/flash/issues/202 +[#173]: https://www.free-decompiler.com/flash/issues/173 +[#190]: https://www.free-decompiler.com/flash/issues/190 +[#129]: https://www.free-decompiler.com/flash/issues/129 +[#153]: https://www.free-decompiler.com/flash/issues/153 +[#180]: https://www.free-decompiler.com/flash/issues/180 +[#136]: https://www.free-decompiler.com/flash/issues/136 +[#179]: https://www.free-decompiler.com/flash/issues/179 +[#144]: https://www.free-decompiler.com/flash/issues/144 +[#164]: https://www.free-decompiler.com/flash/issues/164 +[#167]: https://www.free-decompiler.com/flash/issues/167 +[#170]: https://www.free-decompiler.com/flash/issues/170 +[#178]: https://www.free-decompiler.com/flash/issues/178 +[#181]: https://www.free-decompiler.com/flash/issues/181 +[#182]: https://www.free-decompiler.com/flash/issues/182 +[#183]: https://www.free-decompiler.com/flash/issues/183 +[#184]: https://www.free-decompiler.com/flash/issues/184 +[#189]: https://www.free-decompiler.com/flash/issues/189 +[#191]: https://www.free-decompiler.com/flash/issues/191 +[#195]: https://www.free-decompiler.com/flash/issues/195 +[#196]: https://www.free-decompiler.com/flash/issues/196 +[#198]: https://www.free-decompiler.com/flash/issues/198 +[#200]: https://www.free-decompiler.com/flash/issues/200 +[#201]: https://www.free-decompiler.com/flash/issues/201 +[#166]: https://www.free-decompiler.com/flash/issues/166 +[#165]: https://www.free-decompiler.com/flash/issues/165 +[#63]: https://www.free-decompiler.com/flash/issues/63 +[#67]: https://www.free-decompiler.com/flash/issues/67 +[#117]: https://www.free-decompiler.com/flash/issues/117 +[#127]: https://www.free-decompiler.com/flash/issues/127 +[#134]: https://www.free-decompiler.com/flash/issues/134 +[#155]: https://www.free-decompiler.com/flash/issues/155 +[#142]: https://www.free-decompiler.com/flash/issues/142 +[#146]: https://www.free-decompiler.com/flash/issues/146 +[#130]: https://www.free-decompiler.com/flash/issues/130 +[#132]: https://www.free-decompiler.com/flash/issues/132 +[#145]: https://www.free-decompiler.com/flash/issues/145 +[#147]: https://www.free-decompiler.com/flash/issues/147 +[#148]: https://www.free-decompiler.com/flash/issues/148 +[#152]: https://www.free-decompiler.com/flash/issues/152 +[#156]: https://www.free-decompiler.com/flash/issues/156 +[#157]: https://www.free-decompiler.com/flash/issues/157 +[#158]: https://www.free-decompiler.com/flash/issues/158 +[#159]: https://www.free-decompiler.com/flash/issues/159 +[#160]: https://www.free-decompiler.com/flash/issues/160 +[#162]: https://www.free-decompiler.com/flash/issues/162 +[#163]: https://www.free-decompiler.com/flash/issues/163 +[#149]: https://www.free-decompiler.com/flash/issues/149 +[#150]: https://www.free-decompiler.com/flash/issues/150 +[#119]: https://www.free-decompiler.com/flash/issues/119 +[#101]: https://www.free-decompiler.com/flash/issues/101 +[#114]: https://www.free-decompiler.com/flash/issues/114 +[#135]: https://www.free-decompiler.com/flash/issues/135 +[#141]: https://www.free-decompiler.com/flash/issues/141 +[#102]: https://www.free-decompiler.com/flash/issues/102 +[#124]: https://www.free-decompiler.com/flash/issues/124 +[#128]: https://www.free-decompiler.com/flash/issues/128 +[#131]: https://www.free-decompiler.com/flash/issues/131 +[#104]: https://www.free-decompiler.com/flash/issues/104 +[#113]: https://www.free-decompiler.com/flash/issues/113 +[#133]: https://www.free-decompiler.com/flash/issues/133 +[#140]: https://www.free-decompiler.com/flash/issues/140 +[#108]: https://www.free-decompiler.com/flash/issues/108 +[#105]: https://www.free-decompiler.com/flash/issues/105 +[#109]: https://www.free-decompiler.com/flash/issues/109 +[#106]: https://www.free-decompiler.com/flash/issues/106 +[#107]: https://www.free-decompiler.com/flash/issues/107 +[#110]: https://www.free-decompiler.com/flash/issues/110 +[#103]: https://www.free-decompiler.com/flash/issues/103 +[#111]: https://www.free-decompiler.com/flash/issues/111 +[#96]: https://www.free-decompiler.com/flash/issues/96 +[#98]: https://www.free-decompiler.com/flash/issues/98 +[#99]: https://www.free-decompiler.com/flash/issues/99 +[#100]: https://www.free-decompiler.com/flash/issues/100 +[#85]: https://www.free-decompiler.com/flash/issues/85 +[#79]: https://www.free-decompiler.com/flash/issues/79 +[#92]: https://www.free-decompiler.com/flash/issues/92 +[#93]: https://www.free-decompiler.com/flash/issues/93 +[#94]: https://www.free-decompiler.com/flash/issues/94 +[#95]: https://www.free-decompiler.com/flash/issues/95 +[#86]: https://www.free-decompiler.com/flash/issues/86 +[#87]: https://www.free-decompiler.com/flash/issues/87 +[#88]: https://www.free-decompiler.com/flash/issues/88 +[#89]: https://www.free-decompiler.com/flash/issues/89 +[#82]: https://www.free-decompiler.com/flash/issues/82 +[#78]: https://www.free-decompiler.com/flash/issues/78 +[#81]: https://www.free-decompiler.com/flash/issues/81 +[#84]: https://www.free-decompiler.com/flash/issues/84 +[#83]: https://www.free-decompiler.com/flash/issues/83 +[#65]: https://www.free-decompiler.com/flash/issues/65 +[#48]: https://www.free-decompiler.com/flash/issues/48 +[#53]: https://www.free-decompiler.com/flash/issues/53 +[#66]: https://www.free-decompiler.com/flash/issues/66 +[#68]: https://www.free-decompiler.com/flash/issues/68 +[#69]: https://www.free-decompiler.com/flash/issues/69 +[#75]: https://www.free-decompiler.com/flash/issues/75 +[#73]: https://www.free-decompiler.com/flash/issues/73 +[#62]: https://www.free-decompiler.com/flash/issues/62 +[#72]: https://www.free-decompiler.com/flash/issues/72 +[#64]: https://www.free-decompiler.com/flash/issues/64 +[#38]: https://www.free-decompiler.com/flash/issues/38 +[#56]: https://www.free-decompiler.com/flash/issues/56 +[#57]: https://www.free-decompiler.com/flash/issues/57 +[#58]: https://www.free-decompiler.com/flash/issues/58 +[#45]: https://www.free-decompiler.com/flash/issues/45 +[#50]: https://www.free-decompiler.com/flash/issues/50 +[#51]: https://www.free-decompiler.com/flash/issues/51 +[#52]: https://www.free-decompiler.com/flash/issues/52 +[#47]: https://www.free-decompiler.com/flash/issues/47 +[#42]: https://www.free-decompiler.com/flash/issues/42 +[#39]: https://www.free-decompiler.com/flash/issues/39 +[#40]: https://www.free-decompiler.com/flash/issues/40 +[#44]: https://www.free-decompiler.com/flash/issues/44 +[#36]: https://www.free-decompiler.com/flash/issues/36 +[#43]: https://www.free-decompiler.com/flash/issues/43 +[#46]: https://www.free-decompiler.com/flash/issues/46 +[#3]: https://www.free-decompiler.com/flash/issues/3 +[#37]: https://www.free-decompiler.com/flash/issues/37 +[#34]: https://www.free-decompiler.com/flash/issues/34 +[#35]: https://www.free-decompiler.com/flash/issues/35 +[#32]: https://www.free-decompiler.com/flash/issues/32 [#31]: https://www.free-decompiler.com/flash/issues/31 \ No newline at end of file diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java index 4d9968cf4..0a8050cf8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -26,6 +26,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.helpers.HighlightedText; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.helpers.ImmediateFuture; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -51,10 +52,13 @@ public class DecompilerPool { } public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { - Future f = executor.submit(new Callable() { + Callable callable = new Callable() { @Override public HighlightedText call() throws Exception { - Thread.sleep(10000); + if (listener != null) { + listener.onStart(); + } + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); writer.startFunction("!script"); src.getActionScriptSource(writer, actions); @@ -72,22 +76,25 @@ public class DecompilerPool { return result; } - }); + }; - return f; + return submit(callable); } public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { - Future f = executor.submit(new Callable() { + Callable callable = new Callable() { @Override public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + int scriptIndex = pack.scriptIndex; ScriptInfo script = null; if (scriptIndex > -1) { script = pack.abc.script_info.get(scriptIndex); } boolean parallel = Configuration.parallelSpeedUp.get(); - Thread.sleep(10000); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); @@ -103,9 +110,30 @@ public class DecompilerPool { return result; } - }); + }; - return f; + return submit(callable); + } + + private Future submit(Callable callable) { + boolean parallel = Configuration.parallelSpeedUp.get(); + if (parallel) { + Future f = executor.submit(callable); + return f; + } else { + boolean cancelled = false; + Throwable throwable = null; + HighlightedText result = null; + try { + result = callable.call(); + } catch (InterruptedException ex) { + cancelled = true; + } catch (Exception ex) { + throwable = ex; + } + + return new ImmediateFuture<>(result, throwable, cancelled); + } } public String getStat() { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index b53ab0c6a..2cc43840d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -2958,8 +2958,7 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - { - if (removeDependencies) { + if (removeDependencies) { removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); } else { @@ -2968,7 +2967,6 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); } } - } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java index b97c2ab0e..962f9d0ae 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/ScriptDecompiledListener.java @@ -20,8 +20,9 @@ package com.jpexs.decompiler.flash.cache; * * @author JPEXS */ -@FunctionalInterface public interface ScriptDecompiledListener { + public void onStart(); + public void onComplete(T result); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/ImmediateFuture.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/ImmediateFuture.java index 443810b0f..6eaa0a696 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/ImmediateFuture.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/ImmediateFuture.java @@ -1,20 +1,22 @@ /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.helpers; +import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -29,8 +31,20 @@ public class ImmediateFuture implements Future { private final V value; + private final Throwable throwable; + + private final boolean cancelled; + public ImmediateFuture(V value) { this.value = value; + throwable = null; + cancelled = false; + } + + public ImmediateFuture(V value, Throwable throwable, boolean cancelled) { + this.value = value; + this.throwable = throwable; + this.cancelled = cancelled; } @Override @@ -40,7 +54,7 @@ public class ImmediateFuture implements Future { @Override public boolean isCancelled() { - return false; + return cancelled; } @Override @@ -50,11 +64,19 @@ public class ImmediateFuture implements Future { @Override public V get() throws InterruptedException, ExecutionException { + if (cancelled) { + throw new CancellationException(); + } + + if (throwable != null) { + throw new ExecutionException(throwable); + } + return value; } @Override public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { - return value; + return get(); } } diff --git a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java index 8817125e5..48b93f8e0 100644 --- a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java @@ -360,6 +360,7 @@ public class AdvancedSettingsDialog extends AppDialog { String locName = locNames.get(name); try { + field.setAccessible(true); ConfigurationItem item = (ConfigurationItem) field.get(null); ParameterizedType listType = (ParameterizedType) field.getGenericType(); @@ -580,6 +581,7 @@ public class AdvancedSettingsDialog extends AppDialog { Field field = fields.get(name); ConfigurationItem item = null; try { + field.setAccessible(true); item = (ConfigurationItem) field.get(null); } catch (IllegalArgumentException | IllegalAccessException ex) { // Reflection exceptions. This should never happen diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 02782ff58..d5abab96c 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -851,24 +851,26 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se taskThread.interrupt(); } - Thread t = new Thread() { - @Override - public void run() { - while (!Thread.currentThread().isInterrupted()) { - DecompilerPool d = swf.getDecompilerPool(); - statusPanel.setStatus(swf.getFileTitle() + " " + d.getStat()); + if (Configuration._debugMode.get()) { + Thread t = new Thread() { + @Override + public void run() { + while (!Thread.currentThread().isInterrupted()) { + DecompilerPool d = swf.getDecompilerPool(); + statusPanel.setStatus(swf.getFileTitle() + " " + d.getStat()); - try { - Thread.sleep(100); - } catch (InterruptedException ex) { - break; + try { + Thread.sleep(100); + } catch (InterruptedException ex) { + break; + } } } - } - }; + }; - t.start(); - taskThread = t; + t.start(); + taskThread = t; + } } private void updateUi() { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 12076c7f9..9f72ccd59 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -44,6 +44,7 @@ import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.action.parser.script.ActionScriptLexer; import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol; import com.jpexs.decompiler.flash.action.parser.script.SymbolType; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.gui.AppDialog; @@ -101,6 +102,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; @@ -208,8 +210,11 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener> futures = new ArrayList<>(); + String workText = AppStrings.translate("work.searching"); + String decAdd = ", " + AppStrings.translate("work.decompiling"); try { loop: for (final ScriptPack pack : allpacks) { @@ -229,22 +234,33 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener text = SWF.getCachedFuture(pack, new ScriptDecompiledListener() { + @Override + public void onStart() { + Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); + } - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); - Future text = SWF.getCachedFuture(pack, (HighlightedText result) -> { - if (pat.matcher(result.text).find()) { - ABCPanelSearchResult searchResult = new ABCPanelSearchResult(pack); - found.add(searchResult); + @Override + public void onComplete(HighlightedText result) { + Main.startWork(workText + " \"" + txt + "\" - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); + if (pat.matcher(result.text).find()) { + ABCPanelSearchResult searchResult = new ABCPanelSearchResult(pack); + found.add(searchResult); + } } }); futures.add(text); } + + for (Future future : futures) { + try { + future.get(); + } catch (ExecutionException ex) { + Logger.getLogger(ABCPanel.class.getName()).log(Level.SEVERE, null, ex); + } + } } catch (InterruptedException ex) { for (Future future : futures) { future.cancel(true); diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index ed1be7ae2..4f4cc915d 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -30,6 +30,7 @@ import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol; import com.jpexs.decompiler.flash.action.parser.script.SymbolType; import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.gui.AppStrings; @@ -69,6 +70,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.CancellationException; +import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -256,30 +258,48 @@ public class ActionPanel extends JPanel implements SearchListener item : asms.entrySet()) { - pos++; - String workText = AppStrings.translate("work.searching"); - String decAdd = ""; - ASMSource asm = item.getValue(); - if (!pcode && !SWF.isCached(asm)) { - decAdd = ", " + AppStrings.translate("work.decompiling"); - } - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + pos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); - try { + int pos = 0; + List> futures = new ArrayList<>(); + String workText = AppStrings.translate("work.searching"); + String decAdd = ", " + AppStrings.translate("work.decompiling"); + try { + for (Entry item : asms.entrySet()) { + pos++; + ASMSource asm = item.getValue(); + if (pcode) { + Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); asm.getASMSource(ScriptExportMode.PCODE, writer, null); String text = writer.toString(); if (pat.matcher(text).find()) { found.add(new ActionSearchResult(asm, pcode, item.getKey())); } - } else if (pat.matcher(SWF.getCached(asm, null).text).find()) { - found.add(new ActionSearchResult(asm, pcode, item.getKey())); + } else { + int fpos = pos; + Future text = SWF.getCachedFuture(asm, null, new ScriptDecompiledListener() { + @Override + public void onStart() { + Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); + } + + @Override + public void onComplete(HighlightedText result) { + Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); + if (pat.matcher(result.text).find()) { + ActionSearchResult searchResult = new ActionSearchResult(asm, pcode, item.getKey()); + found.add(searchResult); + } + } + }); + + futures.add(text); } - } catch (InterruptedException ex) { - break; + } + } catch (InterruptedException ex) { + for (Future future : futures) { + future.cancel(true); } } From 407d1c2235a1d4178a8530d7f6e3ef2fc5f0dfac Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 24 Dec 2016 22:00:27 +0100 Subject: [PATCH 003/114] AS search moved to lib --- .../flash/search/ABCSearchResult.java | 6 +- .../flash/search/ActionScriptSearch.java | 188 ++++++++++++++++++ .../flash/search}/ActionSearchResult.java | 2 +- .../flash/search/ScriptSearchListener.java | 26 +++ .../jpexs/decompiler/flash/gui/MainPanel.java | 10 +- .../decompiler/flash/gui/abc/ABCPanel.java | 97 ++------- .../flash/gui/action/ActionPanel.java | 67 +------ 7 files changed, 245 insertions(+), 151 deletions(-) rename src/com/jpexs/decompiler/flash/gui/abc/ABCPanelSearchResult.java => libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java (88%) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java rename {src/com/jpexs/decompiler/flash/gui/action => libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search}/ActionSearchResult.java (96%) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanelSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java similarity index 88% rename from src/com/jpexs/decompiler/flash/gui/abc/ABCPanelSearchResult.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java index 516475876..5fda2a46f 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanelSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.gui.abc; +package com.jpexs.decompiler.flash.search; import com.jpexs.decompiler.flash.abc.ScriptPack; @@ -22,11 +22,11 @@ import com.jpexs.decompiler.flash.abc.ScriptPack; * * @author JPEXS */ -public class ABCPanelSearchResult { +public class ABCSearchResult { private final ScriptPack scriptPack; - public ABCPanelSearchResult(ScriptPack scriptPack) { + public ABCSearchResult(ScriptPack scriptPack) { this.scriptPack = scriptPack; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java new file mode 100644 index 000000000..f613ba4fc --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.search; + +import com.jpexs.decompiler.flash.AppResources; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public class ActionScriptSearch { + + public List searchAs2(SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, ScriptSearchListener listener) { + if (txt != null && !txt.isEmpty()) { + Map asms = swf.getASMs(false); + final List found = new ArrayList<>(); + Pattern pat = regexp + ? Pattern.compile(txt, ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0) + : Pattern.compile(Pattern.quote(txt), ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0); + + int pos = 0; + List> futures = new ArrayList<>(); + String workText = AppResources.translate("work.searching"); + String decAdd = ", " + AppResources.translate("work.decompiling"); + try { + for (Map.Entry item : asms.entrySet()) { + pos++; + ASMSource asm = item.getValue(); + + if (pcode) { + //Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + asm.getASMSource(ScriptExportMode.PCODE, writer, null); + String text = writer.toString(); + if (pat.matcher(text).find()) { + found.add(new ActionSearchResult(asm, pcode, item.getKey())); + } + } else { + int fpos = pos; + Future text = SWF.getCachedFuture(asm, null, new ScriptDecompiledListener() { + @Override + public void onStart() { + if (listener != null) { + listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... "); + } + } + + @Override + public void onComplete(HighlightedText result) { + if (listener != null) { + listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... "); + } + + if (pat.matcher(result.text).find()) { + ActionSearchResult searchResult = new ActionSearchResult(asm, pcode, item.getKey()); + found.add(searchResult); + } + } + }); + + futures.add(text); + } + } + } catch (InterruptedException ex) { + for (Future future : futures) { + future.cancel(true); + } + } + + return found; + } + + return null; + } + + public List searchAs3(final SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, ScriptSearchListener listener) { + // todo: pcode seach + if (txt != null && !txt.isEmpty()) { + List ignoredClasses = new ArrayList<>(); + List ignoredNss = new ArrayList<>(); + + if (Configuration._ignoreAdditionalFlexClasses.get()) { + swf.getFlexMainClass(ignoredClasses, ignoredNss); + } + + final List found = new ArrayList<>(); + List allpacks = swf.getAS3Packs(); + final Pattern pat = regexp + ? Pattern.compile(txt, ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0) + : Pattern.compile(Pattern.quote(txt), ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0); + + int pos = 0; + List> futures = new ArrayList<>(); + String workText = AppResources.translate("work.searching"); + String decAdd = ", " + AppResources.translate("work.decompiling"); + try { + loop: + for (final ScriptPack pack : allpacks) { + pos++; + if (!pack.isSimple && Configuration.ignoreCLikePackages.get()) { + continue; + } + if (Configuration._ignoreAdditionalFlexClasses.get()) { + String fullName = pack.getClassPath().packageStr.add(pack.getClassPath().className, pack.getClassPath().namespaceSuffix).toRawString(); + if (ignoredClasses.contains(fullName)) { + continue; + } + for (String ns : ignoredNss) { + if (fullName.startsWith(ns + ".")) { + continue loop; + } + } + } + + int fpos = pos; + Future text = SWF.getCachedFuture(pack, new ScriptDecompiledListener() { + @Override + public void onStart() { + if (listener != null) { + listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... "); + } + } + + @Override + public void onComplete(HighlightedText result) { + if (listener != null) { + listener.onWork(workText + " \"" + txt + "\" - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... "); + } + + if (pat.matcher(result.text).find()) { + ABCSearchResult searchResult = new ABCSearchResult(pack); + found.add(searchResult); + } + } + }); + + futures.add(text); + } + + for (Future future : futures) { + try { + future.get(); + } catch (ExecutionException ex) { + Logger.getLogger(ActionScriptSearch.class.getName()).log(Level.SEVERE, null, ex); + } + } + } catch (InterruptedException ex) { + for (Future future : futures) { + future.cancel(true); + } + } + + return found; + } + + return null; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionSearchResult.java similarity index 96% rename from src/com/jpexs/decompiler/flash/gui/action/ActionSearchResult.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionSearchResult.java index 92726b12b..bc541dbd6 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionSearchResult.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.jpexs.decompiler.flash.gui.action; +package com.jpexs.decompiler.flash.search; import com.jpexs.decompiler.flash.tags.base.ASMSource; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java new file mode 100644 index 000000000..9122c2cd8 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.search; + +/** + * + * @author JPEXS + */ +public interface ScriptSearchListener { + + public void onWork(String message); +} diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index d5abab96c..8fbe0077a 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -77,12 +77,10 @@ import com.jpexs.decompiler.flash.exporters.swf.SwfJavaExporter; import com.jpexs.decompiler.flash.exporters.swf.SwfXmlExporter; import com.jpexs.decompiler.flash.flexsdk.MxmlcAs3ScriptReplacer; import com.jpexs.decompiler.flash.gui.abc.ABCPanel; -import com.jpexs.decompiler.flash.gui.abc.ABCPanelSearchResult; import com.jpexs.decompiler.flash.gui.abc.ClassesListTreeModel; import com.jpexs.decompiler.flash.gui.abc.DecompiledEditorPane; import com.jpexs.decompiler.flash.gui.abc.DeobfuscationDialog; import com.jpexs.decompiler.flash.gui.action.ActionPanel; -import com.jpexs.decompiler.flash.gui.action.ActionSearchResult; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.dumpview.DumpTree; import com.jpexs.decompiler.flash.gui.dumpview.DumpTreeModel; @@ -107,6 +105,8 @@ import com.jpexs.decompiler.flash.importers.SwfXmlImporter; import com.jpexs.decompiler.flash.importers.SymbolClassImporter; import com.jpexs.decompiler.flash.importers.TextImporter; import com.jpexs.decompiler.flash.importers.svg.SvgImporter; +import com.jpexs.decompiler.flash.search.ABCSearchResult; +import com.jpexs.decompiler.flash.search.ActionSearchResult; import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; import com.jpexs.decompiler.flash.tags.DefineBitsJPEG3Tag; @@ -1734,7 +1734,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se new CancellableWorker() { @Override protected Void doInBackground() throws Exception { - List abcResult = null; + List abcResult = null; List actionResult = null; if (swf.isAS3()) { abcResult = getABCPanel().search(swf, txt, ignoreCase, regexp, pCodeSearch, this); @@ -1742,14 +1742,14 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se actionResult = getActionPanel().search(swf, txt, ignoreCase, regexp, pCodeSearch, this); } - List fAbcResult = abcResult; + List fAbcResult = abcResult; List fActionResult = actionResult; View.execInEventDispatch(() -> { boolean found = false; if (fAbcResult != null) { found = true; getABCPanel().searchPanel.setSearchText(txt); - SearchResultsDialog sr = new SearchResultsDialog<>(getMainFrame().getWindow(), txt, getABCPanel()); + SearchResultsDialog sr = new SearchResultsDialog<>(getMainFrame().getWindow(), txt, getABCPanel()); sr.setResults(fAbcResult); sr.setVisible(true); } else if (fActionResult != null) { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 9f72ccd59..59f6a1d63 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -44,7 +44,6 @@ import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.action.parser.script.ActionScriptLexer; import com.jpexs.decompiler.flash.action.parser.script.ParsedSymbol; import com.jpexs.decompiler.flash.action.parser.script.SymbolType; -import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.gui.AppDialog; @@ -69,11 +68,13 @@ import com.jpexs.decompiler.flash.gui.abc.tablemodels.UIntTableModel; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.editor.LinkHandler; import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; -import com.jpexs.decompiler.flash.helpers.HighlightedText; import com.jpexs.decompiler.flash.importers.As3ScriptReplaceException; import com.jpexs.decompiler.flash.importers.As3ScriptReplaceExceptionItem; import com.jpexs.decompiler.flash.importers.As3ScriptReplacerInterface; import com.jpexs.decompiler.flash.importers.FFDecAs3ScriptReplacer; +import com.jpexs.decompiler.flash.search.ABCSearchResult; +import com.jpexs.decompiler.flash.search.ActionScriptSearch; +import com.jpexs.decompiler.flash.search.ScriptSearchListener; import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.treeitems.TreeItem; @@ -102,11 +103,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Pattern; import javax.swing.AbstractAction; import javax.swing.BoxLayout; import javax.swing.JButton; @@ -137,7 +135,7 @@ import jsyntaxpane.TokenType; * * @author JPEXS */ -public class ABCPanel extends JPanel implements ItemListener, SearchListener, TagEditorPanel { +public class ABCPanel extends JPanel implements ItemListener, SearchListener, TagEditorPanel { private As3ScriptReplacerInterface scriptReplacer = null; @@ -169,7 +167,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener searchPanel; + public final SearchPanel searchPanel; private NewTraitDialog newTraitDialog; @@ -191,84 +189,15 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener search(final SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker) { - // todo: pcode seach - List ignoredClasses = new ArrayList<>(); - List ignoredNss = new ArrayList<>(); - - if (Configuration._ignoreAdditionalFlexClasses.get()) { - abc.getSwf().getFlexMainClass(ignoredClasses, ignoredNss); - } + public List search(final SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker) { if (txt != null && !txt.isEmpty()) { searchPanel.setOptions(ignoreCase, regexp); - TagTreeModel ttm = (TagTreeModel) mainPanel.tagTree.getModel(); - TreeItem scriptsNode = ttm.getScriptsNode(swf); - final List found = new ArrayList<>(); - if (scriptsNode instanceof ClassesListTreeModel) { - ClassesListTreeModel clModel = (ClassesListTreeModel) scriptsNode; - List allpacks = clModel.getList(); - final Pattern pat = regexp - ? Pattern.compile(txt, ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0) - : Pattern.compile(Pattern.quote(txt), ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0); - - int pos = 0; - List> futures = new ArrayList<>(); - String workText = AppStrings.translate("work.searching"); - String decAdd = ", " + AppStrings.translate("work.decompiling"); - try { - loop: - for (final ScriptPack pack : allpacks) { - pos++; - if (!pack.isSimple && Configuration.ignoreCLikePackages.get()) { - continue; - } - if (Configuration._ignoreAdditionalFlexClasses.get()) { - String fullName = pack.getClassPath().packageStr.add(pack.getClassPath().className, pack.getClassPath().namespaceSuffix).toRawString(); - if (ignoredClasses.contains(fullName)) { - continue; - } - for (String ns : ignoredNss) { - if (fullName.startsWith(ns + ".")) { - continue loop; - } - } - } - - int fpos = pos; - Future text = SWF.getCachedFuture(pack, new ScriptDecompiledListener() { - @Override - public void onStart() { - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); - } - - @Override - public void onComplete(HighlightedText result) { - Main.startWork(workText + " \"" + txt + "\" - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... ", worker); - if (pat.matcher(result.text).find()) { - ABCPanelSearchResult searchResult = new ABCPanelSearchResult(pack); - found.add(searchResult); - } - } - }); - - futures.add(text); - } - - for (Future future : futures) { - try { - future.get(); - } catch (ExecutionException ex) { - Logger.getLogger(ABCPanel.class.getName()).log(Level.SEVERE, null, ex); - } - } - } catch (InterruptedException ex) { - for (Future future : futures) { - future.cancel(true); - } + return new ActionScriptSearch().searchAs3(swf, txt, ignoreCase, regexp, pcode, new ScriptSearchListener() { + @Override + public void onWork(String message) { + Main.startWork(message, worker); } - } - - return found; + }); } return null; @@ -1275,6 +1204,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener search(SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker) { if (txt != null && !txt.isEmpty()) { searchPanel.setOptions(ignoreCase, regexp); - Map asms = swf.getASMs(false); - final List found = new ArrayList<>(); - Pattern pat; - if (regexp) { - pat = Pattern.compile(txt, ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0); - } else { - pat = Pattern.compile(Pattern.quote(txt), ignoreCase ? (Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE) : 0); - } - - int pos = 0; - List> futures = new ArrayList<>(); - String workText = AppStrings.translate("work.searching"); - String decAdd = ", " + AppStrings.translate("work.decompiling"); - try { - for (Entry item : asms.entrySet()) { - pos++; - ASMSource asm = item.getValue(); - - if (pcode) { - Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - asm.getASMSource(ScriptExportMode.PCODE, writer, null); - String text = writer.toString(); - if (pat.matcher(text).find()) { - found.add(new ActionSearchResult(asm, pcode, item.getKey())); - } - } else { - int fpos = pos; - Future text = SWF.getCachedFuture(asm, null, new ScriptDecompiledListener() { - @Override - public void onStart() { - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); - } - - @Override - public void onComplete(HighlightedText result) { - Main.startWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); - if (pat.matcher(result.text).find()) { - ActionSearchResult searchResult = new ActionSearchResult(asm, pcode, item.getKey()); - found.add(searchResult); - } - } - }); - - futures.add(text); - } + return new ActionScriptSearch().searchAs2(swf, txt, ignoreCase, regexp, pcode, new ScriptSearchListener() { + @Override + public void onWork(String message) { + Main.startWork(message, worker); } - } catch (InterruptedException ex) { - for (Future future : futures) { - future.cancel(true); - } - } - - return found; + }); } return null; From 9ecb2e4a818a5007702b35b6827c80d2b1adac65 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 24 Dec 2016 22:56:41 +0100 Subject: [PATCH 004/114] search: small improvement/fix --- .../decompiler/flash/search/ActionScriptSearch.java | 13 ++++--------- .../flash/search/ScriptSearchListener.java | 4 +++- .../jpexs/decompiler/flash/gui/abc/ABCPanel.java | 12 ++++++++++-- .../decompiler/flash/gui/action/ActionPanel.java | 12 ++++++++++-- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java index f613ba4fc..27ec8f8fa 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java @@ -16,7 +16,6 @@ */ package com.jpexs.decompiler.flash.search; -import com.jpexs.decompiler.flash.AppResources; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.ScriptPack; import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; @@ -50,8 +49,6 @@ public class ActionScriptSearch { int pos = 0; List> futures = new ArrayList<>(); - String workText = AppResources.translate("work.searching"); - String decAdd = ", " + AppResources.translate("work.decompiling"); try { for (Map.Entry item : asms.entrySet()) { pos++; @@ -71,14 +68,14 @@ public class ActionScriptSearch { @Override public void onStart() { if (listener != null) { - listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... "); + listener.onDecompile(fpos, asms.size(), item.getKey()); } } @Override public void onComplete(HighlightedText result) { if (listener != null) { - listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + asms.size() + ") " + item.getKey() + "... "); + listener.onSearch(fpos, asms.size(), item.getKey()); } if (pat.matcher(result.text).find()) { @@ -121,8 +118,6 @@ public class ActionScriptSearch { int pos = 0; List> futures = new ArrayList<>(); - String workText = AppResources.translate("work.searching"); - String decAdd = ", " + AppResources.translate("work.decompiling"); try { loop: for (final ScriptPack pack : allpacks) { @@ -147,14 +142,14 @@ public class ActionScriptSearch { @Override public void onStart() { if (listener != null) { - listener.onWork(workText + " \"" + txt + "\"" + decAdd + " - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... "); + listener.onDecompile(fpos, allpacks.size(), pack.getClassPath().toString()); } } @Override public void onComplete(HighlightedText result) { if (listener != null) { - listener.onWork(workText + " \"" + txt + "\" - (" + fpos + "/" + allpacks.size() + ") " + pack.getClassPath().toString() + "... "); + listener.onSearch(fpos, allpacks.size(), pack.getClassPath().toString()); } if (pat.matcher(result.text).find()) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java index 9122c2cd8..043bda019 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ScriptSearchListener.java @@ -22,5 +22,7 @@ package com.jpexs.decompiler.flash.search; */ public interface ScriptSearchListener { - public void onWork(String message); + public void onDecompile(int pos, int total, String name); + + public void onSearch(int pos, int total, String name); } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 59f6a1d63..6b1f32d12 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -192,10 +192,18 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener search(final SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker) { if (txt != null && !txt.isEmpty()) { searchPanel.setOptions(ignoreCase, regexp); + + String workText = AppStrings.translate("work.searching"); + String decAdd = AppStrings.translate("work.decompiling"); return new ActionScriptSearch().searchAs3(swf, txt, ignoreCase, regexp, pcode, new ScriptSearchListener() { @Override - public void onWork(String message) { - Main.startWork(message, worker); + public void onDecompile(int pos, int total, String name) { + Main.startWork(workText + " \"" + txt + "\", " + decAdd + " - (" + pos + "/" + total + ") " + name + "... ", worker); + } + + @Override + public void onSearch(int pos, int total, String name) { + Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + total + ") " + name + "... ", worker); } }); } diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index bb4b4e012..ad4807df2 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -247,10 +247,18 @@ public class ActionPanel extends JPanel implements SearchListener search(SWF swf, final String txt, boolean ignoreCase, boolean regexp, boolean pcode, CancellableWorker worker) { if (txt != null && !txt.isEmpty()) { searchPanel.setOptions(ignoreCase, regexp); + + String workText = AppStrings.translate("work.searching"); + String decAdd = AppStrings.translate("work.decompiling"); return new ActionScriptSearch().searchAs2(swf, txt, ignoreCase, regexp, pcode, new ScriptSearchListener() { @Override - public void onWork(String message) { - Main.startWork(message, worker); + public void onDecompile(int pos, int total, String name) { + Main.startWork(workText + " \"" + txt + "\", " + decAdd + " - (" + pos + "/" + total + ") " + name + "... ", worker); + } + + @Override + public void onSearch(int pos, int total, String name) { + Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + total + ") " + name + "... ", worker); } }); } From bf59e9e5fbf9d422101b5c1f13cd4a72c267a535 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sun, 25 Dec 2016 14:22:01 +0100 Subject: [PATCH 005/114] Jump to the found text after pcode search fixed --- .../src/com/jpexs/decompiler/flash/SWF.java | 30 +- .../jpexs/decompiler/flash/action/Action.java | 21 +- .../decompiler/flash/cache/AS2Cache.java | 4 +- .../flash/gui/action/ActionPanel.java | 265 ++++++++++-------- .../gui/editor/LineMarkedEditorPane.java | 2 +- 5 files changed, 189 insertions(+), 133 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 2cc43840d..700085ec8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -2609,6 +2609,17 @@ public final class SWF implements SWFContainerItem, Timelined { return false; } + public static boolean isActionListCached(ASMSource src) { + if (src != null) { + SWF swf = src.getSwf(); + if (swf != null) { + return swf.as2Cache.isPCodeCached(src); + } + } + + return false; + } + public static boolean isCached(ScriptPack pack) { if (pack != null) { SWF swf = pack.getSwf(); @@ -2631,6 +2642,17 @@ public final class SWF implements SWFContainerItem, Timelined { return null; } + public static ActionList getActionListFromCache(ASMSource src) { + if (src != null) { + SWF swf = src.getSwf(); + if (swf != null) { + return swf.as2Cache.getPCode(src); + } + } + + return null; + } + public static HighlightedText getFromCache(ScriptPack pack) { if (pack != null) { SWF swf = pack.getSwf(); @@ -2646,8 +2668,8 @@ public final class SWF implements SWFContainerItem, Timelined { synchronized (src) { SWF swf = src.getSwf(); int deobfuscationMode = Configuration.autoDeobfuscate.get() ? 1 : 0; - if (swf != null && swf.as2Cache.isPcodeCached(src)) { - ActionList result = swf.as2Cache.getPcode(src); + if (swf != null && swf.as2Cache.isPCodeCached(src)) { + ActionList result = swf.as2Cache.getPCode(src); if (result.deobfuscationMode == deobfuscationMode) { return result; } @@ -2958,7 +2980,8 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - if (removeDependencies) { + { + if (removeDependencies) { removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); } else { @@ -2967,6 +2990,7 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); } } + } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index fc67baa8c..ec199ccd3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -106,7 +106,7 @@ import java.util.logging.Logger; */ public abstract class Action implements GraphSourceItem { - private static final int INFORM_LISTENER_RESOLUTION = 100; + private static final int INFORM_LISTENER_RESOLUTION = 1000; private boolean ignored = false; @@ -474,11 +474,9 @@ public abstract class Action implements GraphSourceItem { } private static void informListeners(List listeners, int pos, int count) { - if (pos % INFORM_LISTENER_RESOLUTION == 0) { - DisassemblyListener[] listenersArray = listeners.toArray(new DisassemblyListener[listeners.size()]); - for (DisassemblyListener listener : listenersArray) { - listener.progressToString(pos + 1, count); - } + DisassemblyListener[] listenersArray = listeners.toArray(new DisassemblyListener[listeners.size()]); + for (DisassemblyListener listener : listenersArray) { + listener.progressToString(pos + 1, count); } } @@ -507,11 +505,14 @@ public abstract class Action implements GraphSourceItem { HashMap> containers = new HashMap<>(); HashMap containersPos = new HashMap<>(); offset = address; - int pos = 0; boolean lastPush = false; byte[] fileData = list.fileData; - for (Action a : list) { - informListeners(listeners, pos, list.size()); + for (int pos = 0; pos < list.size(); pos++) { + Action a = list.get(pos); + + if ((pos + 1) % INFORM_LISTENER_RESOLUTION == 0) { + informListeners(listeners, pos, list.size()); + } if (exportMode == ScriptExportMode.PCODE_HEX) { if (lastPush) { @@ -671,8 +672,8 @@ public abstract class Action implements GraphSourceItem { } offset += a.getTotalActionLength(); - pos++; } + if (lastPush) { writer.newLine(); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java index a5f90b90d..afce8801c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/cache/AS2Cache.java @@ -40,7 +40,7 @@ public class AS2Cache { return cache.contains(src); } - public boolean isPcodeCached(ASMSource src) { + public boolean isPCodeCached(ASMSource src) { return pcodeCache.contains(src); } @@ -48,7 +48,7 @@ public class AS2Cache { return cache.get(src); } - public ActionList getPcode(ASMSource src) { + public ActionList getPCode(ASMSource src) { return pcodeCache.get(src); } diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index ad4807df2..042b2badf 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -169,7 +169,7 @@ public class ActionPanel extends JPanel implements SearchListener { - ignoreCarret = true; - decompiledEditor.setScriptName(scriptName); - decompiledEditor.setText(text); - ignoreCarret = false; - }); + ignoreCarret = true; + decompiledEditor.setScriptName(scriptName); + decompiledEditor.setText(text); + ignoreCarret = false; } private void setEditorText(final String scriptName, final String text, final String contentType) { - View.execInEventDispatch(() -> { - ignoreCarret = true; - editor.setScriptName("#PCODE " + scriptName); - editor.changeContentType(contentType); - editor.setText(text); - ignoreCarret = false; - }); + ignoreCarret = true; + editor.setScriptName("#PCODE " + scriptName); + editor.changeContentType(contentType); + editor.setText(text); + ignoreCarret = false; } private void setText(final HighlightedText text, final String contentType, final String scriptName) { - View.execInEventDispatch(() -> { - int pos = editor.getCaretPosition(); - Highlighting lastH = null; - for (Highlighting h : disassembledText.getInstructionHighlights()) { - if (pos < h.startPos) { - break; - } - lastH = h; + int pos = editor.getCaretPosition(); + Highlighting lastH = null; + for (Highlighting h : disassembledText.getInstructionHighlights()) { + if (pos < h.startPos) { + break; } - Long offset = lastH == null ? 0 : lastH.getProperties().offset; - disassembledText = text; - setEditorText(scriptName, text.text, contentType); - Highlighting h = Highlighting.searchOffset(disassembledText.getInstructionHighlights(), offset); - if (h != null) { - if (h.startPos <= editor.getDocument().getLength()) { - editor.setCaretPosition(h.startPos); - } + lastH = h; + } + Long offset = lastH == null ? 0 : lastH.getProperties().offset; + disassembledText = text; + setEditorText(scriptName, text.text, contentType); + Highlighting h = Highlighting.searchOffset(disassembledText.getInstructionHighlights(), offset); + if (h != null) { + if (h.startPos <= editor.getDocument().getLength()) { + editor.setCaretPosition(h.startPos); } - }); + } } - private HighlightedText getHighlightedText(ScriptExportMode exportMode) { + private HighlightedText getHighlightedText(ScriptExportMode exportMode, ActionList actions) { + if (actions == null) { + logger.log(Level.WARNING, "Action list is null"); + return new HighlightedText(); + } + ASMSource asm = (ASMSource) src; DisassemblyListener listener = getDisassemblyListener(); asm.addDisassemblyListener(listener); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); try { - asm.getASMSource(exportMode, writer, lastCode); + asm.getASMSource(exportMode, writer, actions); } catch (InterruptedException ex) { logger.log(Level.SEVERE, null, ex); } + asm.removeDisassemblyListener(listener); return new HighlightedText(writer); } @@ -327,20 +327,20 @@ public class ActionPanel extends JPanel implements SearchListener percent) || (!this.phase.equals(phase))) && newpercent <= 100) { percent = newpercent; this.phase = phase; + // todo: honfika: it is very slow to show every percent - setEditorText("-", "; " + AppStrings.translate("work.disassembling") + " - " + phase + " " + percent + "%...", "text/flasm"); + View.execInEventDispatch(() -> { + setEditorText("-", "; " + AppStrings.translate("work.disassembling") + " - " + phase + " " + percent + "%...", "text/flasm"); + }); } } @@ -418,49 +421,72 @@ public class ActionPanel extends JPanel implements SearchListener { + setEditorText(asm.getScriptName(), "; " + AppStrings.translate("work.disassembling") + "...", "text/flasm"); + if (decompileNeeded) { + setDecompiledText("-", "// " + AppStrings.translate("work.waitingfordissasembly") + "..."); + } + }); - HighlightedText sc = SWF.getCached(asm, actions); - lastDecompiled = sc; - lastASM = asm; - setDecompiledText(lastASM.getScriptName(), lastDecompiled.text); - setDecompiledEditMode(false); + DisassemblyListener listener = getDisassemblyListener(); + asm.addDisassemblyListener(listener); + innerActions = asm.getActions(); + asm.removeDisassemblyListener(listener); + + lastCode = innerActions; + ActionList finalActions = innerActions; + View.execInEventDispatch(() -> { + setHex(getExportMode(), asm.getScriptName(), finalActions); + }); + } + + if (decompileNeeded) { + View.execInEventDispatch(() -> { + setDecompiledText("-", "// " + AppStrings.translate("work.decompiling") + "..."); + }); + + HighlightedText htext = SWF.getCached(asm, innerActions); + lastDecompiled = htext; + lastASM = asm; + + View.execInEventDispatch(() -> { + setDecompiledText(lastASM.getScriptName(), htext.text); + }); } - setEditMode(false); return null; } @@ -480,6 +506,14 @@ public class ActionPanel extends JPanel implements SearchListener { - if (val) { - if (hexOnlyButton.isSelected()) { - setHex(ScriptExportMode.HEX, src.getScriptName()); - } else if (constantsViewButton.isSelected()) { - setHex(ScriptExportMode.CONSTANTS, src.getScriptName()); - } else { - setHex(ScriptExportMode.PCODE, src.getScriptName()); - } + if (val) { + if (hexOnlyButton.isSelected()) { + setHex(ScriptExportMode.HEX, src.getScriptName(), lastCode); + } else if (constantsViewButton.isSelected()) { + setHex(ScriptExportMode.CONSTANTS, src.getScriptName(), lastCode); + } else { + setHex(ScriptExportMode.PCODE, src.getScriptName(), lastCode); } + } - editor.setEditable(val); - saveButton.setVisible(val); - saveButton.setEnabled(false); - editButton.setVisible(!val); - cancelButton.setVisible(val); + editor.setEditable(val); + saveButton.setVisible(val); + saveButton.setEnabled(false); + editButton.setVisible(!val); + cancelButton.setVisible(val); - editor.getCaret().setVisible(true); - asmLabel.setIcon(val ? View.getIcon("editing16") : null); // this line is not working - topButtonsPan.setVisible(!val); - editMode = val; - editor.requestFocusInWindow(); - }); + editor.getCaret().setVisible(true); + asmLabel.setIcon(val ? View.getIcon("editing16") : null); // this line is not working + topButtonsPan.setVisible(!val); + editMode = val; + editor.requestFocusInWindow(); } public void setDecompiledEditMode(boolean val) { if (lastASM == null) { return; } - View.execInEventDispatch(() -> { - int lastLine = decompiledEditor.getLine(); - int prefLines = lastASM.getPrefixLineCount(); - if (val) { - String newText = lastASM.removePrefixAndSuffix(lastDecompiled.text); - setDecompiledText(lastASM.getScriptName(), newText); - if (lastLine > -1) { - if (lastLine - prefLines >= 0) { - decompiledEditor.gotoLine(lastLine - prefLines + 1); - } - } - } else { - setDecompiledText(lastASM.getScriptName(), lastDecompiled.text); - if (lastLine > -1) { - decompiledEditor.gotoLine(lastLine + prefLines + 1); + + int lastLine = decompiledEditor.getLine(); + int prefLines = lastASM.getPrefixLineCount(); + if (val) { + String newText = lastASM.removePrefixAndSuffix(lastDecompiled.text); + setDecompiledText(lastASM.getScriptName(), newText); + if (lastLine > -1) { + if (lastLine - prefLines >= 0) { + decompiledEditor.gotoLine(lastLine - prefLines + 1); } } + } else { + setDecompiledText(lastASM.getScriptName(), lastDecompiled.text); + if (lastLine > -1) { + decompiledEditor.gotoLine(lastLine + prefLines + 1); + } + } - decompiledEditor.setEditable(val); - saveDecompiledButton.setVisible(val); - saveDecompiledButton.setEnabled(false); - editDecompiledButton.setVisible(!val); - experimentalLabel.setVisible(!val); - cancelDecompiledButton.setVisible(val); + decompiledEditor.setEditable(val); + saveDecompiledButton.setVisible(val); + saveDecompiledButton.setEnabled(false); + editDecompiledButton.setVisible(!val); + experimentalLabel.setVisible(!val); + cancelDecompiledButton.setVisible(val); - decompiledEditor.getCaret().setVisible(true); - decLabel.setIcon(val ? View.getIcon("editing16") : null); - editDecompiledMode = val; - decompiledEditor.requestFocusInWindow(); - }); + decompiledEditor.getCaret().setVisible(true); + decLabel.setIcon(val ? View.getIcon("editing16") : null); + editDecompiledMode = val; + decompiledEditor.requestFocusInWindow(); } private void graphButtonActionPerformed(ActionEvent evt) { @@ -898,15 +929,15 @@ public class ActionPanel extends JPanel implements SearchListener truncateLimit) { t = t.substring(0, truncateLimit) + "\r\n" + AppStrings.translate("editorTruncateWarning").replace("%chars%", Integer.toString(truncateLimit)); } + super.setText(t); setCaretPosition(0); //scroll to top } From 08507237955fa6531483cabbe9c07bfb580069f2 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sun, 25 Dec 2016 20:22:24 +0100 Subject: [PATCH 006/114] AS3 PCode serach --- .../decompiler/flash/abc/ScriptPack.java | 12 ++++ .../flash/abc/types/traits/Trait.java | 7 +- .../flash/abc/types/traits/TraitClass.java | 18 +++++ .../flash/abc/types/traits/TraitFunction.java | 6 ++ .../types/traits/TraitMethodGetterSetter.java | 6 ++ .../abc/types/traits/TraitSlotConst.java | 4 ++ .../flash/abc/types/traits/Traits.java | 8 +++ .../exporters/modes/ScriptExportMode.java | 8 ++- .../flash/search/ABCSearchResult.java | 20 ++++++ .../flash/search/ActionScriptSearch.java | 65 ++++++++++++++----- .../decompiler/flash/search/MethodId.java | 41 ++++++++++++ .../flash/gui/abc/ASMSourceEditorPane.java | 3 +- .../decompiler/flash/gui/abc/TraitsList.java | 2 +- .../flash/gui/abc/TraitsListItem.java | 11 ++-- .../flash/gui/abc/TraitsListModel.java | 18 +++-- 15 files changed, 194 insertions(+), 35 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index 3d56fce27..c3f14fb72 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -40,6 +40,7 @@ import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.HighlightedText; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.treeitems.AS3ClassTreeItem; import com.jpexs.decompiler.graph.DottedChain; @@ -616,4 +617,15 @@ public class ScriptPack extends AS3ClassTreeItem { ((Tag) abc.parentTag).setModified(true); } + + public void getMethodInfos(List methodInfos) { + int script_init = abc.script_info.get(scriptIndex).init_index; + methodInfos.add(new MethodId(-1, script_init)); + + List traits = abc.script_info.get(scriptIndex).traits.traits; + for (int t = 0; t < traitIndices.size(); t++) { + Trait trait = traits.get(t); + trait.getMethodInfos(abc, -1, methodInfos); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 93b5d6876..510217e13 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -34,6 +34,7 @@ import com.jpexs.decompiler.flash.exporters.script.DependencyType; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.helpers.Helper; @@ -110,8 +111,8 @@ public abstract class Trait implements Cloneable, Serializable { } if (Configuration.handleSkinPartsAutomatically.get()) { /* - private static var _skinParts:Object = {"attr":false,"attr2":true}; - => + private static var _skinParts:Object = {"attr":false,"attr2":true}; + => [SkinPart required="false"] public var attr; [SkinPart required="true"] @@ -509,4 +510,6 @@ public abstract class Trait implements Cloneable, Serializable { public boolean isVisible(boolean isStatic, ABC abc) { return true; } + + public abstract void getMethodInfos(ABC abc, int classIndex, List methodInfos); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 5d9afa2bb..03070a2ad 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -31,6 +31,7 @@ import com.jpexs.decompiler.flash.exporters.script.DependencyType; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.decompiler.graph.TypeItem; @@ -275,4 +276,21 @@ public class TraitClass extends Trait implements TraitWithSlot { writer.newLine(); return writer; } + + @Override + public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + InstanceInfo instanceInfo = abc.instance_info.get(class_info); + ClassInfo classInfo = abc.class_info.get(class_info); + + //class initializer + methodInfos.add(new MethodId(class_info, classInfo.cinit_index)); + + //constructor - instance initializer + methodInfos.add(new MethodId(class_info, instanceInfo.iinit_index)); + + //static variables,constants & methods + classInfo.static_traits.getMethodInfos(abc, class_info, methodInfos); + + instanceInfo.instance_traits.getMethodInfos(abc, class_info, methodInfos); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index dcb80e1e1..d8643fd3d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -25,6 +25,7 @@ import com.jpexs.decompiler.flash.exporters.script.DependencyParser; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.helpers.Helper; @@ -144,4 +145,9 @@ public class TraitFunction extends Trait implements TraitWithSlot { writer.hilightSpecial(Integer.toString(slot_id), HighlightSpecialType.SLOT_ID); return writer; } + + @Override + public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + methodInfos.add(new MethodId(classIndex, method_info)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index 64d139ffe..e84aa51de 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -28,6 +28,7 @@ import com.jpexs.decompiler.flash.exporters.script.DependencyParser; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.ScopeStack; import com.jpexs.helpers.Helper; @@ -225,4 +226,9 @@ public class TraitMethodGetterSetter extends Trait { writer.newLine(); return writer; } + + @Override + public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + methodInfos.add(new MethodId(classIndex, method_info)); + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 6e401f904..4d6607570 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -32,6 +32,7 @@ import com.jpexs.decompiler.flash.exporters.script.DependencyType; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.graph.DottedChain; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.model.LocalData; @@ -245,4 +246,7 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { return writer; } + @Override + public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index b863ed879..f8e8b261b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.exporters.script.Dependency; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; +import com.jpexs.decompiler.flash.search.MethodId; import com.jpexs.decompiler.graph.DottedChain; import java.io.Serializable; import java.util.ArrayList; @@ -250,4 +251,11 @@ public class Traits implements Cloneable, Serializable { t.getDependencies(customNs, abc, dependencies, uses, ignorePackage, fullyQualifiedNames); } } + + public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + for (int t = 0; t < traits.size(); t++) { + Trait trait = traits.get(t); + trait.getMethodInfos(abc, classIndex, methodInfos); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ScriptExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ScriptExportMode.java index 943310a33..1584c9b4b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ScriptExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ScriptExportMode.java @@ -21,6 +21,10 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum ScriptExportMode { - - AS, PCODE, PCODE_HEX, HEX, CONSTANTS, AS_METHOD_STUBS; + AS, + PCODE, + PCODE_HEX, + HEX, + CONSTANTS, // AS1/2 ConstantPool + AS_METHOD_STUBS; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java index 5fda2a46f..68ddbff11 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java @@ -26,14 +26,34 @@ public class ABCSearchResult { private final ScriptPack scriptPack; + private final int classIndex; + + private final int methodIndex; + public ABCSearchResult(ScriptPack scriptPack) { this.scriptPack = scriptPack; + classIndex = 0; + methodIndex = 0; + } + + public ABCSearchResult(ScriptPack scriptPack, int classIndex, int methodIndex) { + this.scriptPack = scriptPack; + this.classIndex = classIndex; + this.methodIndex = methodIndex; } public ScriptPack getScriptPack() { return scriptPack; } + public int getClassIndex() { + return classIndex; + } + + public int getMethodIndex() { + return methodIndex; + } + @Override public String toString() { return scriptPack.getClassPath().toString(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java index 27ec8f8fa..b12b29ab9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java @@ -17,7 +17,9 @@ package com.jpexs.decompiler.flash.search; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; @@ -55,7 +57,10 @@ public class ActionScriptSearch { ASMSource asm = item.getValue(); if (pcode) { - //Main.startWork(workText + " \"" + txt + "\" - (" + pos + "/" + asms.size() + ") " + item.getKey() + "... ", worker); + if (listener != null) { + listener.onSearch(pos, asms.size(), item.getKey()); + } + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); asm.getASMSource(ScriptExportMode.PCODE, writer, null); String text = writer.toString(); @@ -137,29 +142,53 @@ public class ActionScriptSearch { } } - int fpos = pos; - Future text = SWF.getCachedFuture(pack, new ScriptDecompiledListener() { - @Override - public void onStart() { - if (listener != null) { - listener.onDecompile(fpos, allpacks.size(), pack.getClassPath().toString()); - } + if (pcode) { + if (listener != null) { + listener.onSearch(pos, allpacks.size(), pack.getClassPath().toString()); } - @Override - public void onComplete(HighlightedText result) { - if (listener != null) { - listener.onSearch(fpos, allpacks.size(), pack.getClassPath().toString()); - } + List methodInfos = new ArrayList<>(); + pack.getMethodInfos(methodInfos); - if (pat.matcher(result.text).find()) { - ABCSearchResult searchResult = new ABCSearchResult(pack); - found.add(searchResult); + ABC abc = pack.abc; + for (MethodId methodInfo : methodInfos) { + int bodyIndex = abc.findBodyIndex(methodInfo.getMethodIndex()); + if (bodyIndex != -1) { + MethodBody body = abc.bodies.get(bodyIndex); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + abc.bodies.get(bodyIndex).getCode().toASMSource(abc.constants, abc.method_info.get(body.method_info), body, ScriptExportMode.PCODE, writer); + String text = writer.toString(); + if (pat.matcher(text).find()) { + ABCSearchResult searchResult = new ABCSearchResult(pack, methodInfo.getClassIndex(), methodInfo.getMethodIndex()); + found.add(searchResult); + } } } - }); + } else { + int fpos = pos; + Future text = SWF.getCachedFuture(pack, new ScriptDecompiledListener() { + @Override + public void onStart() { + if (listener != null) { + listener.onDecompile(fpos, allpacks.size(), pack.getClassPath().toString()); + } + } - futures.add(text); + @Override + public void onComplete(HighlightedText result) { + if (listener != null) { + listener.onSearch(fpos, allpacks.size(), pack.getClassPath().toString()); + } + + if (pat.matcher(result.text).find()) { + ABCSearchResult searchResult = new ABCSearchResult(pack); + found.add(searchResult); + } + } + }); + + futures.add(text); + } } for (Future future : futures) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java new file mode 100644 index 000000000..b8f88f347 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.search; + +/** + * + * @author JPEXS + */ +public class MethodId { + + private final int classIndex; + + private final int methodIndex; + + public MethodId(int classIndex, int methodIndex) { + this.classIndex = classIndex; + this.methodIndex = methodIndex; + } + + public int getClassIndex() { + return classIndex; + } + + public int getMethodIndex() { + return methodIndex; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java index ab4982613..760879a7d 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java @@ -121,7 +121,8 @@ public class ASMSourceEditorPane extends DebuggableEditorPane implements CaretLi if (trait != null && exportMode != ScriptExportMode.AS && exportMode != ScriptExportMode.AS_METHOD_STUBS) { trait.convertTraitHeader(abc, writer); } - abc.bodies.get(bodyIndex).getCode().toASMSource(abc.constants, abc.method_info.get(abc.bodies.get(bodyIndex).method_info), abc.bodies.get(bodyIndex), exportMode, writer); + MethodBody body = abc.bodies.get(bodyIndex); + abc.bodies.get(bodyIndex).getCode().toASMSource(abc.constants, abc.method_info.get(body.method_info), body, exportMode, writer); if (trait != null) { writer.appendNoHilight("end ; trait").newLine(); } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java index 7c63a7498..1e582685f 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java @@ -74,9 +74,9 @@ public class TraitsList extends JList implements ListSelectionListener { if (classIndex >= abc.instance_info.size()) { return; } + this.classIndex = classIndex; setModel(new TraitsListModel(abc, classIndex, scriptIndex, sorted)); - } private int lastSelected = -1; diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index ddce8551a..49af65ebc 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -117,15 +117,17 @@ public class TraitsListItem { } } else if (isStatic) { ConvertData convertData = new ConvertData(); - abc.class_info.get(classIndex).static_traits.traits.get(index).convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - abc.class_info.get(classIndex).static_traits.traits.get(index).toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); s = writer.toString(); } else { ConvertData convertData = new ConvertData(); - abc.instance_info.get(classIndex).instance_traits.traits.get(index).convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - abc.instance_info.get(classIndex).instance_traits.traits.get(index).toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); s = writer.toString(); } } catch (InterruptedException ex) { @@ -144,7 +146,6 @@ public class TraitsListItem { } public enum Type { - METHOD, VAR, CONST, diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java index f5a49cbfa..3780bca55 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.configuration.Configuration; import java.util.ArrayList; import java.util.Collections; @@ -55,19 +56,24 @@ public final class TraitsListModel implements ListModel { private void reset() { items = new ArrayList<>(); if (classIndex > -1) { - for (int t = 0; t < abc.class_info.get(classIndex).static_traits.traits.size(); t++) { - if (abc.class_info.get(classIndex).static_traits.traits.get(t).isVisible(true, abc)) { - items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.class_info.get(classIndex).static_traits.traits.get(t)), t, true, abc, classIndex, scriptIndex)); + List traits = abc.class_info.get(classIndex).static_traits.traits; + for (int t = 0; t < traits.size(); t++) { + if (traits.get(t).isVisible(true, abc)) { + items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, true, abc, classIndex, scriptIndex)); } } - for (int t = 0; t < abc.instance_info.get(classIndex).instance_traits.traits.size(); t++) { - if (abc.instance_info.get(classIndex).instance_traits.traits.get(t).isVisible(false, abc)) { - items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(abc.instance_info.get(classIndex).instance_traits.traits.get(t)), t, false, abc, classIndex, scriptIndex)); + + traits = abc.instance_info.get(classIndex).instance_traits.traits; + for (int t = 0; t < traits.size(); t++) { + if (traits.get(t).isVisible(false, abc)) { + items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, false, abc, classIndex, scriptIndex)); } } + items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, false, abc, classIndex, scriptIndex)); items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, true, abc, classIndex, scriptIndex)); } + if (Configuration.enableScriptInitializerDisplay.get()) { items.add(new TraitsListItem(TraitsListItem.Type.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex)); } From 4e5a9d1399998473aadbb820ab4095641e4c322d Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sun, 25 Dec 2016 20:29:42 +0100 Subject: [PATCH 007/114] trait editor font fixed --- .../decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java index 2d3e306aa..c4f527305 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/SlotConstTraitDetailPanel.java @@ -19,14 +19,12 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import com.jpexs.decompiler.flash.abc.avm2.parser.pcode.ASM3Parser; -import com.jpexs.decompiler.flash.abc.types.ValueKind; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.gui.AppStrings; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.flash.tags.Tag; import java.awt.BorderLayout; @@ -63,6 +61,7 @@ public class SlotConstTraitDetailPanel extends JPanel implements TraitDetail { slotConstEditor = new LineMarkedEditorPane(); setLayout(new BorderLayout()); add(new JScrollPane(slotConstEditor), BorderLayout.CENTER); + slotConstEditor.setFont(Configuration.getSourceFont()); slotConstEditor.changeContentType("text/flasm3"); slotConstEditor.addCaretListener(new CaretListener() { @Override From 8779d5d78c960e388d013d373ca235c563b9b661 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 26 Dec 2016 12:53:32 +0100 Subject: [PATCH 008/114] #1327 P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter --- CHANGELOG.md | 4 + lib/jsyntaxpane-0.9.5.jar | Bin 567943 -> 566236 bytes .../ffdec_lib/lexers/actionscript3_pcode.flex | 2 +- .../ffdec_lib/lexers/actionscript_pcode.flex | 2 +- .../abc/avm2/parser/pcode/Flasm3Lexer.java | 3752 ++++++----------- .../flash/action/parser/pcode/FlasmLexer.java | 2045 +++++---- .../main/jflex/jsyntaxpane/lexers/flasm.flex | 2 +- .../main/jflex/jsyntaxpane/lexers/flasm3.flex | 2 +- 8 files changed, 2341 insertions(+), 3468 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8053d2ccd..e0e04bdd9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Added - [#1240] AS search using multiple threads when parallel speedup is enabled +- [#1308] Search by all P-code files in AS3 + +### Fixed +- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter ## [10.0.0] - 2016-12-24 ### Added diff --git a/lib/jsyntaxpane-0.9.5.jar b/lib/jsyntaxpane-0.9.5.jar index a3b4bf1a7c61d2a6f3f0a9639dd99720a9961d06..656f583cfa8c30a93336a05d429dcc88ffe4a78f 100644 GIT binary patch delta 55734 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 Gfc+n%y2CvH delta 56742 zcmY&<1z1&G(C#@jNOwzvbT`u7-6##x-E0s+>6Y%4mQLwz1nCB8ke0qj`0oGT%X47f znR#c{%$mJ7aGrIR`YAroP@t&DL&G3}{(T92XNg6jLgD|;BAcg|`?m^Wx{Q5G4xme3 z2i}YOcSyHb4=ODqew>)HBZ&J}*e4N3cYCcVZ{5<8KAh5ogMTUVI+uvQvTXejy(qy< zsrG}|b#Gmt*Ttc_iW={y0QMogv1+hHc-cop6zZE|*Ez3m5w3q|*y+t1GKBm09$fSD z;U-0c(uE#Ophlqa^Yfw1bH#$L0bWVp`AxTsW}%aE1IbXV4+0lfP}F%p)9c8Q1!etv z`xd0~bb@u}-sXIY!~5T6hO1cO@xinh5GniI-G4u@lZ@Yh@sa3=*|FbDKMi4H}Q z)ZPew_5bY2Kl3V>`9C-Nvy_BlgdX@82F36!m!Qa#$ZX({9{qW#e@plx@FzWzA>hWB z!5};{{;lDYj({3Jg7^}`1j#W*j(`?FhWNsOB#nQMK=91=MbP=5yf#P(|C^T?QSI6B zuYz$(1dRWQ{+G@J1py_V4C(*oSN)Hv{w)6yywD*8(pN8pKqP^rHcSLmssB4u1P}}4 z%KSG*sQ+e30Fli0=B_5@#`Z4njNM!v?2KKlP2ZWgS=*XHgZ?)VGR2y}SF?ow##f_H za|ZhiR2Xexo%}(5MiytOJpart>QhXb(S06$(t4L{Eo+U$ZXe z`|6qYUMUUw89b_bLp=i@4N0iyKpW8#l`b#{Bn+LDZ3+pDeuIErbFVc5ex?oUaJ=xr z`p_=`-Vo*mpuQtSf95baEIyYPkLY^zY`Ad^f2sGg7yJu1)(7DQr2E~yRFoR}__9J; zcnAD*lu^70(lf}(5O@h+&4GOZI|aQj2sN!eQ!i`9_Wf5++5qB9c+n6()bp(u-cyU|i~|CBvVcHb@qs<; zHBh4;ah@}O-avvv_?LNR38Wq$vB6$5y!G=XVb1SYFL^3={{wCN|8+WWXp8kPyp9Kq z{LE>Pf&vRXci8X=8BF!uP(vvic>THkhG;x6?elOOnn=LqFA>&c;Fq0jxTXT@KJP_? z`WrCZ3o>8=hrOUZHZbi=iEDiyd6UwO!DJ1*oZw&2MK)k?gRfrlA@PCv5&sp{AT0*o zc)qwA7-hhzFSQKHgIQi|cPe0vXIm1Q2KafV4Nn^2gcsUZ9WdPst_~bqjDXV6{So~1lKFBD^?ncH zEr0P={PSJ~gU_L!D>(cDe*dzNas-(11^GvVv7k}^RYl_#_K5awB|72~z{|df-Nr;&Orh7>vln$1Jd9K{(krQ+UAy2(j{w*7f@FmVvQec9yCf9Q?A|WmVv^mkH?C zgC$;W|2BvVMfV3;J)QZPx9iX;Mh!$Kq2?Pc<6EnqE-=Y*vr;DnciVq@UVmn)8L z22A{dq!+;VV3rpi)GGMr%OL0WzzQ#3+Cy;1%b557fd5cFXI{pJ@_vp;(!+(? z#Q68?S)aMNy5$WB}C0TltpKD)hhbp?TWO6?PncZFoWZ<7r+JSigI>d;xl3LM(VPKVyq;=eU872iR|Va+M8T z=M|rF$Csv4D&D7)$?i$);(iSMjjOh6z@D6JZ;Y6vPld>%9pALSu7(t^L6gB43)d^b zug%UlIggoQPe@m-woGP9);^s^ES zn-RyKGP8A3(=_)`RVccLipeWrn2lr_8gOgI&|xH~X}p`A(9xa!D`I|B{lN-vc8Uyo|>wG zJ;$zayk0hS=u-q|orm8A?U4CPF+LBdQYe6rXv4Z4xvLoZ& zq_D!=z2NKdw)QG3z0>87>~gP50pDC_D?9V$t{e`cq+ioa#Iys>jh-qP8j^KY#ku*m zaDVg6rF)i)xy8NagFZ+|)e?8FiJ3}ztw*GMoTBVaKIW_)O=Yu_nh)amjhmE|l(^VD zPM0RoR+YPJWE54^bezR?zVZg2$D=19&IiV8A|Gxf<1NU^E4z zCTH*Mss7TP)px4_q1qLUdiAc>Ziaa!Gz=K>M7lJr`c2i1_CE}{wabdjzm;kQmq;d} zZ;9pnaG&4c=W;RLOsH1Fp96@C3P&Pg6BOH8GW*Rd4EX8_E2^(nQiH=SOoncQ69Gv^3u8>5u+WM_iP>6ZGR^#o%fr?bdt+4`r_ztz2oaF@io*)A}e|E7mEg z!~2)w2uGgbAi&exRVXs~V$wV!ldP{^E z?4zr(^hYV`l9`<*2nYP>90z+75uV(lnwX2fm22{Mvd8V0WJS#7Xg1h>H?@#2ZEq}V z&WR;g{7~jlR#vyT+&f%alJw`6knyWc=h}w@q7qF+qJhPb$l3=0tcX%yo_Aq&*+pnh zNZm?RZ%lBi>|(M~>L}%)HphKy=jEnoNC&XH{8Vp+DC+;2v8t)NG=|s@&4p zoRi~BF7e9XhK>DI5_7qMsv1wbx7U1iUp1`yd+~FkT!tR ziMR@(VuSFV<^g_#kHtfEf#!_5&75Jgf#rZWzMQC^L*Fg{>o6uQ_3=3X{I*A7lbiWUEt967=y#?Wd+>p`_)g*Xa% z`Cg6O@Lwq{E!pbsv2#p@g=;-`Md*{x> ztyI=EQJU|HgZ-6P`(?!V-I1l=%8Bi%m+;*F`QxGs_o_$3P3x-9%Fe?d*sSY2mfKcg z&%vFCb@!GNX_mWIVgKHphij6zC(7;+kKfGB!#p#Pb-h!0)7n0FbpGfZJ%0DP@~-vu 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 1.6.0 from the specification file - * C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript_pcode.flex + * This class is a scanner generated by + * JFlex 1.6.0 + * from the specification file C:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/lexers/actionscript_pcode.flex */ public final class FlasmLexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int YYINITIAL = 0; + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int PARAMETERS = 4; - public static final int STRING = 2; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2 + }; - public static final int PARAMETERS = 4; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\6\1\4\1\2\1\47\1\50\1\1\16\6\4\0\1\4\1\0"+ + "\1\43\1\0\1\5\2\0\1\45\3\0\1\35\1\0\1\25\1\33"+ + "\1\0\1\30\11\31\1\7\1\3\5\0\4\36\1\34\1\36\2\5"+ + "\1\26\4\5\1\32\14\5\1\0\1\37\2\0\1\5\1\0\1\17"+ + "\1\44\1\41\1\23\1\15\1\16\1\40\1\5\1\24\2\5\1\20"+ + "\1\5\1\22\1\42\2\5\1\13\1\21\1\12\1\14\2\5\1\46"+ + "\1\27\1\5\1\10\1\0\1\11\1\0\6\6\1\51\32\6\2\0"+ + "\4\5\4\0\1\5\2\0\1\6\7\0\1\5\4\0\1\5\5\0"+ + "\27\5\1\0\37\5\1\0\u01ca\5\4\0\14\5\16\0\5\5\7\0"+ + "\1\5\1\0\1\5\21\0\160\6\5\5\1\0\2\5\2\0\4\5"+ + "\10\0\1\5\1\0\3\5\1\0\1\5\1\0\24\5\1\0\123\5"+ + "\1\0\213\5\1\0\5\6\2\0\236\5\11\0\46\5\2\0\1\5"+ + "\7\0\47\5\7\0\1\5\1\0\55\6\1\0\1\6\1\0\2\6"+ + "\1\0\2\6\1\0\1\6\10\0\33\5\5\0\3\5\15\0\5\6"+ + "\6\0\1\5\4\0\13\6\5\0\53\5\37\6\4\0\2\5\1\6"+ + "\143\5\1\0\1\5\10\6\1\0\6\6\2\5\2\6\1\0\4\6"+ + "\2\5\12\6\3\5\2\0\1\5\17\0\1\6\1\5\1\6\36\5"+ + "\33\6\2\0\131\5\13\6\1\5\16\0\12\6\41\5\11\6\2\5"+ + "\4\0\1\5\5\0\26\5\4\6\1\5\11\6\1\5\3\6\1\5"+ + "\5\6\22\0\31\5\3\6\104\0\1\5\1\0\13\5\67\0\33\6"+ + "\1\0\4\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5\2\6"+ + "\2\0\12\6\1\0\7\5\1\0\7\5\1\0\3\6\1\0\10\5"+ + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5"+ + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0"+ + "\1\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0"+ + "\1\5\5\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0"+ + "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0"+ + "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0"+ + "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0"+ + "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0"+ + "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0"+ + "\2\5\2\6\2\0\12\6\1\0\1\5\17\0\3\6\1\0\10\5"+ + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5"+ + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\10\0\2\6"+ + "\4\0\2\5\1\0\3\5\2\6\2\0\12\6\1\0\1\5\20\0"+ + "\1\6\1\5\1\0\6\5\3\0\3\5\1\0\4\5\3\0\2\5"+ + "\1\0\1\5\1\0\2\5\3\0\2\5\3\0\3\5\3\0\14\5"+ + "\4\0\5\6\3\0\3\6\1\0\4\6\2\0\1\5\6\0\1\6"+ + "\16\0\12\6\11\0\1\5\7\0\3\6\1\0\10\5\1\0\3\5"+ + "\1\0\27\5\1\0\12\5\1\0\5\5\3\0\1\5\7\6\1\0"+ + "\3\6\1\0\4\6\7\0\2\6\1\0\2\5\6\0\2\5\2\6"+ + "\2\0\12\6\22\0\2\6\1\0\10\5\1\0\3\5\1\0\27\5"+ + "\1\0\12\5\1\0\5\5\2\0\1\6\1\5\7\6\1\0\3\6"+ + "\1\0\4\6\7\0\2\6\7\0\1\5\1\0\2\5\2\6\2\0"+ + "\12\6\1\0\2\5\17\0\2\6\1\0\10\5\1\0\3\5\1\0"+ + "\51\5\2\0\1\5\7\6\1\0\3\6\1\0\4\6\1\5\10\0"+ + "\1\6\10\0\2\5\2\6\2\0\12\6\12\0\6\5\2\0\2\6"+ + "\1\0\22\5\3\0\30\5\1\0\11\5\1\0\1\5\2\0\7\5"+ + "\3\0\1\6\4\0\6\6\1\0\1\6\1\0\10\6\22\0\2\6"+ + "\15\0\60\5\1\6\2\5\7\6\4\0\10\5\10\6\1\0\12\6"+ + "\47\0\2\5\1\0\1\5\2\0\2\5\1\0\1\5\2\0\1\5"+ + "\6\0\4\5\1\0\7\5\1\0\3\5\1\0\1\5\1\0\1\5"+ + "\2\0\2\5\1\0\4\5\1\6\2\5\6\6\1\0\2\6\1\5"+ + "\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6\2\0\4\5"+ + "\40\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6\1\0\1\6"+ + "\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0\24\6\1\0"+ + "\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0\53\5\24\6"+ + "\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5\3\6\2\5"+ + "\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0\46\5\1\0"+ + "\1\5\5\0\1\5\2\0\53\5\1\0\u014d\5\1\0\4\5\2\0"+ + "\7\5\1\0\1\5\1\0\4\5\2\0\51\5\1\0\4\5\2\0"+ + "\41\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0"+ + "\17\5\1\0\71\5\1\0\4\5\2\0\103\5\2\0\3\6\40\0"+ + "\20\5\20\0\125\5\14\0\u026c\5\2\0\21\5\1\0\32\5\5\0"+ + "\113\5\3\0\3\5\17\0\15\5\1\0\4\5\3\6\13\0\22\5"+ + "\3\6\13\0\22\5\2\6\14\0\15\5\1\0\3\5\1\0\2\6"+ + "\14\0\64\5\40\6\3\0\1\5\3\0\2\5\1\6\2\0\12\6"+ + "\41\0\3\6\2\0\12\6\6\0\130\5\10\0\51\5\1\6\1\5"+ + "\5\0\106\5\12\0\35\5\3\0\14\6\4\0\14\6\12\0\12\6"+ + "\36\5\2\0\5\5\13\0\54\5\4\0\21\6\7\5\2\6\6\0"+ + "\12\6\46\0\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0"+ + "\13\6\6\0\12\6\15\0\1\5\130\0\5\6\57\5\21\6\7\5"+ + "\4\0\12\6\21\0\11\6\14\0\3\6\36\5\15\6\2\5\12\6"+ + "\54\5\16\6\14\0\44\5\24\6\10\0\12\6\3\0\3\5\12\6"+ + "\44\5\122\0\3\6\1\0\25\6\4\5\1\6\4\5\3\6\2\5"+ + "\11\0\300\5\47\6\25\0\4\6\u0116\5\2\0\6\5\2\0\46\5"+ + "\2\0\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5"+ + "\1\0\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5"+ + "\1\0\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5"+ + "\1\0\7\5\16\0\5\6\30\0\1\47\1\47\5\6\20\0\2\5"+ + "\23\0\1\5\13\0\5\6\5\0\6\6\1\0\1\5\15\0\1\5"+ + "\20\0\15\5\3\0\33\5\25\0\15\6\4\0\1\6\3\0\14\6"+ + "\21\0\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5"+ + "\6\0\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\13\5"+ + "\2\0\4\5\5\0\5\5\4\0\1\5\21\0\51\5\u0a77\0\57\5"+ + "\1\0\57\5\1\0\205\5\6\0\4\5\3\6\2\5\14\0\46\5"+ + "\1\0\1\5\5\0\1\5\2\0\70\5\7\0\1\5\17\0\1\6"+ + "\27\5\11\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0"+ + "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\40\6\57\0"+ + "\1\5\u01d5\0\3\5\31\0\11\5\6\6\1\0\5\5\2\0\5\5"+ + "\4\0\126\5\2\0\2\6\2\0\3\5\1\0\132\5\1\0\4\5"+ + "\5\0\51\5\3\0\136\5\21\0\33\5\65\0\20\5\u0200\0\u19b6\5"+ + "\112\0\u51cd\5\63\0\u048d\5\103\0\56\5\2\0\u010d\5\3\0\20\5"+ + "\12\6\2\5\24\0\57\5\1\6\4\0\12\6\1\0\31\5\7\0"+ + "\1\6\120\5\2\6\45\0\11\5\2\0\147\5\2\0\4\5\1\0"+ + "\4\5\14\0\13\5\115\0\12\5\1\6\3\5\1\6\4\5\1\6"+ + "\27\5\5\6\20\0\1\5\7\0\64\5\14\0\2\6\62\5\21\6"+ + "\13\0\12\6\6\0\22\6\6\5\3\0\1\5\4\0\12\6\34\5"+ + "\10\6\2\0\27\5\15\6\14\0\35\5\3\0\4\6\57\5\16\6"+ + "\16\0\1\5\12\6\46\0\51\5\16\6\11\0\3\5\1\6\10\5"+ + "\2\6\2\0\12\6\6\0\27\5\3\0\1\5\1\6\4\0\60\5"+ + "\1\6\1\5\3\6\2\5\2\6\5\5\2\6\1\5\1\6\1\5"+ + "\30\0\3\5\2\0\13\5\5\6\2\0\3\5\2\6\12\0\6\5"+ + "\2\0\6\5\2\0\6\5\11\0\7\5\1\0\7\5\221\0\43\5"+ + "\10\6\1\0\2\6\2\0\12\6\6\0\u2ba4\5\14\0\27\5\4\0"+ + "\61\5\u2104\0\u016e\5\2\0\152\5\46\0\7\5\14\0\5\5\5\0"+ + "\1\5\1\6\12\5\1\0\15\5\1\0\5\5\1\0\1\5\1\0"+ + "\2\5\1\0\2\5\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0"+ + "\66\5\50\0\15\5\3\0\20\6\20\0\7\6\14\0\2\5\30\0"+ + "\3\5\31\0\1\5\6\0\5\5\1\0\207\5\2\0\1\6\4\0"+ + "\1\5\13\0\12\6\7\0\32\5\4\0\1\5\1\0\32\5\13\0"+ + "\131\5\3\0\6\5\2\0\6\5\2\0\6\5\2\0\3\5\3\0"+ + "\2\5\3\0\2\5\22\0\3\6\4\0\14\5\1\0\32\5\1\0"+ + "\23\5\1\0\2\5\1\0\17\5\2\0\16\5\42\0\173\5\105\0"+ + "\65\5\210\0\1\6\202\0\35\5\3\0\61\5\57\0\37\5\21\0"+ + "\33\5\65\0\36\5\2\0\44\5\4\0\10\5\1\0\5\5\52\0"+ + "\236\5\2\0\12\6\u0356\0\6\5\2\0\1\5\1\0\54\5\1\0"+ + "\2\5\3\0\1\5\2\0\27\5\252\0\26\5\12\0\32\5\106\0"+ + "\70\5\6\0\2\5\100\0\1\5\3\6\1\0\2\6\5\0\4\6"+ + "\4\5\1\0\3\5\1\0\33\5\4\0\3\6\4\0\1\6\40\0"+ + "\35\5\203\0\66\5\12\0\26\5\12\0\23\5\215\0\111\5\u03b7\0"+ + "\3\6\65\5\17\6\37\0\12\6\20\0\3\6\55\5\13\6\2\0"+ + "\1\6\22\0\31\5\7\0\12\6\6\0\3\6\44\5\16\6\1\0"+ + "\12\6\100\0\3\6\60\5\16\6\4\5\13\0\12\6\u04a6\0\53\5"+ + "\15\6\10\0\12\6\u0936\0\u036f\5\221\0\143\5\u0b9d\0\u042f\5\u33d1\0"+ + "\u0239\5\u04c7\0\105\5\13\0\1\5\56\6\20\0\4\6\15\5\u4060\0"+ + "\2\5\u2163\0\5\6\3\0\26\6\2\0\7\6\36\0\4\6\224\0"+ + "\3\6\u01bb\0\125\5\1\0\107\5\1\0\2\5\2\0\1\5\2\0"+ + "\2\5\2\0\4\5\1\0\14\5\1\0\1\5\1\0\7\5\1\0"+ + "\101\5\1\0\4\5\2\0\10\5\1\0\7\5\1\0\34\5\1\0"+ + "\4\5\1\0\5\5\1\0\1\5\3\0\7\5\1\0\u0154\5\2\0"+ + "\31\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0"+ + "\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0"+ + "\10\5\2\0\62\6\u1600\0\4\5\1\0\33\5\1\0\2\5\1\0"+ + "\1\5\2\0\1\5\1\0\12\5\1\0\4\5\1\0\1\5\1\0"+ + "\1\5\6\0\1\5\4\0\1\5\1\0\1\5\1\0\1\5\1\0"+ + "\3\5\1\0\2\5\1\0\1\5\2\0\1\5\1\0\1\5\1\0"+ + "\1\5\1\0\1\5\1\0\1\5\1\0\2\5\1\0\1\5\2\0"+ + "\4\5\1\0\7\5\1\0\4\5\1\0\4\5\1\0\1\5\1\0"+ + "\12\5\1\0\21\5\5\0\3\5\1\0\5\5\1\0\21\5\u1144\0"+ + "\ua6d7\5\51\0\u1035\5\13\0\336\5\u3fe2\0\u021e\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0"+ + "\1\6\36\0\140\6\200\0\360\6\uffff\0\uffff\0\ufe12\0"; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the - * beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2 - }; + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\6\1\4\1\2\1\51\1\52\1\1\16\6\4\0\1\4\1\0" - + "\1\45\1\0\1\5\2\0\1\47\3\0\1\37\1\0\1\30\1\35" - + "\1\0\1\33\11\11\1\12\1\3\5\0\4\40\1\36\1\40\2\7" - + "\1\31\4\7\1\34\14\7\1\0\1\41\2\0\1\10\1\0\1\22" - + "\1\46\1\43\1\26\1\20\1\21\1\42\1\7\1\27\2\7\1\23" - + "\1\7\1\25\1\44\2\7\1\16\1\24\1\15\1\17\2\7\1\50" - + "\1\32\1\7\1\13\1\0\1\14\1\0\6\6\1\53\32\6\2\0" - + "\4\5\4\0\1\5\2\0\1\6\7\0\1\5\4\0\1\5\5\0" - + "\27\5\1\0\37\5\1\0\u01ca\5\4\0\14\5\16\0\5\5\7\0" - + "\1\5\1\0\1\5\21\0\160\6\5\5\1\0\2\5\2\0\4\5" - + "\10\0\1\5\1\0\3\5\1\0\1\5\1\0\24\5\1\0\123\5" - + "\1\0\213\5\1\0\5\6\2\0\236\5\11\0\46\5\2\0\1\5" - + "\7\0\47\5\7\0\1\5\1\0\55\6\1\0\1\6\1\0\2\6" - + "\1\0\2\6\1\0\1\6\10\0\33\5\5\0\3\5\15\0\5\6" - + "\6\0\1\5\4\0\13\6\5\0\53\5\37\6\4\0\2\5\1\6" - + "\143\5\1\0\1\5\10\6\1\0\6\6\2\5\2\6\1\0\4\6" - + "\2\5\12\6\3\5\2\0\1\5\17\0\1\6\1\5\1\6\36\5" - + "\33\6\2\0\131\5\13\6\1\5\16\0\12\6\41\5\11\6\2\5" - + "\4\0\1\5\5\0\26\5\4\6\1\5\11\6\1\5\3\6\1\5" - + "\5\6\22\0\31\5\3\6\104\0\1\5\1\0\13\5\67\0\33\6" - + "\1\0\4\6\66\5\3\6\1\5\22\6\1\5\7\6\12\5\2\6" - + "\2\0\12\6\1\0\7\5\1\0\7\5\1\0\3\6\1\0\10\5" - + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\1\5\3\0\4\5" - + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\1\5\10\0" - + "\1\6\4\0\2\5\1\0\3\5\2\6\2\0\12\6\4\5\7\0" - + "\1\5\5\0\3\6\1\0\6\5\4\0\2\5\2\0\26\5\1\0" - + "\7\5\1\0\2\5\1\0\2\5\1\0\2\5\2\0\1\6\1\0" - + "\5\6\4\0\2\6\2\0\3\6\3\0\1\6\7\0\4\5\1\0" - + "\1\5\7\0\14\6\3\5\1\6\13\0\3\6\1\0\11\5\1\0" - + "\3\5\1\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5\2\0" - + "\1\6\1\5\10\6\1\0\3\6\1\0\3\6\2\0\1\5\17\0" - + "\2\5\2\6\2\0\12\6\1\0\1\5\17\0\3\6\1\0\10\5" - + "\2\0\2\5\2\0\26\5\1\0\7\5\1\0\2\5\1\0\5\5" - + "\2\0\1\6\1\5\7\6\2\0\2\6\2\0\3\6\10\0\2\6" - + "\4\0\2\5\1\0\3\5\2\6\2\0\12\6\1\0\1\5\20\0" - + "\1\6\1\5\1\0\6\5\3\0\3\5\1\0\4\5\3\0\2\5" - + "\1\0\1\5\1\0\2\5\3\0\2\5\3\0\3\5\3\0\14\5" - + "\4\0\5\6\3\0\3\6\1\0\4\6\2\0\1\5\6\0\1\6" - + "\16\0\12\6\11\0\1\5\7\0\3\6\1\0\10\5\1\0\3\5" - + "\1\0\27\5\1\0\12\5\1\0\5\5\3\0\1\5\7\6\1\0" - + "\3\6\1\0\4\6\7\0\2\6\1\0\2\5\6\0\2\5\2\6" - + "\2\0\12\6\22\0\2\6\1\0\10\5\1\0\3\5\1\0\27\5" - + "\1\0\12\5\1\0\5\5\2\0\1\6\1\5\7\6\1\0\3\6" - + "\1\0\4\6\7\0\2\6\7\0\1\5\1\0\2\5\2\6\2\0" - + "\12\6\1\0\2\5\17\0\2\6\1\0\10\5\1\0\3\5\1\0" - + "\51\5\2\0\1\5\7\6\1\0\3\6\1\0\4\6\1\5\10\0" - + "\1\6\10\0\2\5\2\6\2\0\12\6\12\0\6\5\2\0\2\6" - + "\1\0\22\5\3\0\30\5\1\0\11\5\1\0\1\5\2\0\7\5" - + "\3\0\1\6\4\0\6\6\1\0\1\6\1\0\10\6\22\0\2\6" - + "\15\0\60\5\1\6\2\5\7\6\4\0\10\5\10\6\1\0\12\6" - + "\47\0\2\5\1\0\1\5\2\0\2\5\1\0\1\5\2\0\1\5" - + "\6\0\4\5\1\0\7\5\1\0\3\5\1\0\1\5\1\0\1\5" - + "\2\0\2\5\1\0\4\5\1\6\2\5\6\6\1\0\2\6\1\5" - + "\2\0\5\5\1\0\1\5\1\0\6\6\2\0\12\6\2\0\4\5" - + "\40\0\1\5\27\0\2\6\6\0\12\6\13\0\1\6\1\0\1\6" - + "\1\0\1\6\4\0\2\6\10\5\1\0\44\5\4\0\24\6\1\0" - + "\2\6\5\5\13\6\1\0\44\6\11\0\1\6\71\0\53\5\24\6" - + "\1\5\12\6\6\0\6\5\4\6\4\5\3\6\1\5\3\6\2\5" - + "\7\6\3\5\4\6\15\5\14\6\1\5\17\6\2\0\46\5\1\0" - + "\1\5\5\0\1\5\2\0\53\5\1\0\u014d\5\1\0\4\5\2\0" - + "\7\5\1\0\1\5\1\0\4\5\2\0\51\5\1\0\4\5\2\0" - + "\41\5\1\0\4\5\2\0\7\5\1\0\1\5\1\0\4\5\2\0" - + "\17\5\1\0\71\5\1\0\4\5\2\0\103\5\2\0\3\6\40\0" - + "\20\5\20\0\125\5\14\0\u026c\5\2\0\21\5\1\0\32\5\5\0" - + "\113\5\3\0\3\5\17\0\15\5\1\0\4\5\3\6\13\0\22\5" - + "\3\6\13\0\22\5\2\6\14\0\15\5\1\0\3\5\1\0\2\6" - + "\14\0\64\5\40\6\3\0\1\5\3\0\2\5\1\6\2\0\12\6" - + "\41\0\3\6\2\0\12\6\6\0\130\5\10\0\51\5\1\6\1\5" - + "\5\0\106\5\12\0\35\5\3\0\14\6\4\0\14\6\12\0\12\6" - + "\36\5\2\0\5\5\13\0\54\5\4\0\21\6\7\5\2\6\6\0" - + "\12\6\46\0\27\5\5\6\4\0\65\5\12\6\1\0\35\6\2\0" - + "\13\6\6\0\12\6\15\0\1\5\130\0\5\6\57\5\21\6\7\5" - + "\4\0\12\6\21\0\11\6\14\0\3\6\36\5\15\6\2\5\12\6" - + "\54\5\16\6\14\0\44\5\24\6\10\0\12\6\3\0\3\5\12\6" - + "\44\5\122\0\3\6\1\0\25\6\4\5\1\6\4\5\3\6\2\5" - + "\11\0\300\5\47\6\25\0\4\6\u0116\5\2\0\6\5\2\0\46\5" - + "\2\0\6\5\2\0\10\5\1\0\1\5\1\0\1\5\1\0\1\5" - + "\1\0\37\5\2\0\65\5\1\0\7\5\1\0\1\5\3\0\3\5" - + "\1\0\7\5\3\0\4\5\2\0\6\5\4\0\15\5\5\0\3\5" - + "\1\0\7\5\16\0\5\6\30\0\1\51\1\51\5\6\20\0\2\5" - + "\23\0\1\5\13\0\5\6\5\0\6\6\1\0\1\5\15\0\1\5" - + "\20\0\15\5\3\0\33\5\25\0\15\6\4\0\1\6\3\0\14\6" - + "\21\0\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5" - + "\6\0\1\5\1\0\1\5\1\0\1\5\1\0\4\5\1\0\13\5" - + "\2\0\4\5\5\0\5\5\4\0\1\5\21\0\51\5\u0a77\0\57\5" - + "\1\0\57\5\1\0\205\5\6\0\4\5\3\6\2\5\14\0\46\5" - + "\1\0\1\5\5\0\1\5\2\0\70\5\7\0\1\5\17\0\1\6" - + "\27\5\11\0\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0" - + "\7\5\1\0\7\5\1\0\7\5\1\0\7\5\1\0\40\6\57\0" - + "\1\5\u01d5\0\3\5\31\0\11\5\6\6\1\0\5\5\2\0\5\5" - + "\4\0\126\5\2\0\2\6\2\0\3\5\1\0\132\5\1\0\4\5" - + "\5\0\51\5\3\0\136\5\21\0\33\5\65\0\20\5\u0200\0\u19b6\5" - + "\112\0\u51cd\5\63\0\u048d\5\103\0\56\5\2\0\u010d\5\3\0\20\5" - + "\12\6\2\5\24\0\57\5\1\6\4\0\12\6\1\0\31\5\7\0" - + "\1\6\120\5\2\6\45\0\11\5\2\0\147\5\2\0\4\5\1\0" - + "\4\5\14\0\13\5\115\0\12\5\1\6\3\5\1\6\4\5\1\6" - + "\27\5\5\6\20\0\1\5\7\0\64\5\14\0\2\6\62\5\21\6" - + "\13\0\12\6\6\0\22\6\6\5\3\0\1\5\4\0\12\6\34\5" - + "\10\6\2\0\27\5\15\6\14\0\35\5\3\0\4\6\57\5\16\6" - + "\16\0\1\5\12\6\46\0\51\5\16\6\11\0\3\5\1\6\10\5" - + "\2\6\2\0\12\6\6\0\27\5\3\0\1\5\1\6\4\0\60\5" - + "\1\6\1\5\3\6\2\5\2\6\5\5\2\6\1\5\1\6\1\5" - + "\30\0\3\5\2\0\13\5\5\6\2\0\3\5\2\6\12\0\6\5" - + "\2\0\6\5\2\0\6\5\11\0\7\5\1\0\7\5\221\0\43\5" - + "\10\6\1\0\2\6\2\0\12\6\6\0\u2ba4\5\14\0\27\5\4\0" - + "\61\5\u2104\0\u016e\5\2\0\152\5\46\0\7\5\14\0\5\5\5\0" - + "\1\5\1\6\12\5\1\0\15\5\1\0\5\5\1\0\1\5\1\0" - + "\2\5\1\0\2\5\1\0\154\5\41\0\u016b\5\22\0\100\5\2\0" - + "\66\5\50\0\15\5\3\0\20\6\20\0\7\6\14\0\2\5\30\0" - + "\3\5\31\0\1\5\6\0\5\5\1\0\207\5\2\0\1\6\4\0" - + "\1\5\13\0\12\6\7\0\32\5\4\0\1\5\1\0\32\5\13\0" - + "\131\5\3\0\6\5\2\0\6\5\2\0\6\5\2\0\3\5\3\0" - + "\2\5\3\0\2\5\22\0\3\6\4\0\14\5\1\0\32\5\1\0" - + "\23\5\1\0\2\5\1\0\17\5\2\0\16\5\42\0\173\5\105\0" - + "\65\5\210\0\1\6\202\0\35\5\3\0\61\5\57\0\37\5\21\0" - + "\33\5\65\0\36\5\2\0\44\5\4\0\10\5\1\0\5\5\52\0" - + "\236\5\2\0\12\6\u0356\0\6\5\2\0\1\5\1\0\54\5\1\0" - + "\2\5\3\0\1\5\2\0\27\5\252\0\26\5\12\0\32\5\106\0" - + "\70\5\6\0\2\5\100\0\1\5\3\6\1\0\2\6\5\0\4\6" - + "\4\5\1\0\3\5\1\0\33\5\4\0\3\6\4\0\1\6\40\0" - + "\35\5\203\0\66\5\12\0\26\5\12\0\23\5\215\0\111\5\u03b7\0" - + "\3\6\65\5\17\6\37\0\12\6\20\0\3\6\55\5\13\6\2\0" - + "\1\6\22\0\31\5\7\0\12\6\6\0\3\6\44\5\16\6\1\0" - + "\12\6\100\0\3\6\60\5\16\6\4\5\13\0\12\6\u04a6\0\53\5" - + "\15\6\10\0\12\6\u0936\0\u036f\5\221\0\143\5\u0b9d\0\u042f\5\u33d1\0" - + "\u0239\5\u04c7\0\105\5\13\0\1\5\56\6\20\0\4\6\15\5\u4060\0" - + "\2\5\u2163\0\5\6\3\0\26\6\2\0\7\6\36\0\4\6\224\0" - + "\3\6\u01bb\0\125\5\1\0\107\5\1\0\2\5\2\0\1\5\2\0" - + "\2\5\2\0\4\5\1\0\14\5\1\0\1\5\1\0\7\5\1\0" - + "\101\5\1\0\4\5\2\0\10\5\1\0\7\5\1\0\34\5\1\0" - + "\4\5\1\0\5\5\1\0\1\5\3\0\7\5\1\0\u0154\5\2\0" - + "\31\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0" - + "\31\5\1\0\37\5\1\0\31\5\1\0\37\5\1\0\31\5\1\0" - + "\10\5\2\0\62\6\u1600\0\4\5\1\0\33\5\1\0\2\5\1\0" - + "\1\5\2\0\1\5\1\0\12\5\1\0\4\5\1\0\1\5\1\0" - + "\1\5\6\0\1\5\4\0\1\5\1\0\1\5\1\0\1\5\1\0" - + "\3\5\1\0\2\5\1\0\1\5\2\0\1\5\1\0\1\5\1\0" - + "\1\5\1\0\1\5\1\0\1\5\1\0\2\5\1\0\1\5\2\0" - + "\4\5\1\0\7\5\1\0\4\5\1\0\4\5\1\0\1\5\1\0" - + "\12\5\1\0\21\5\5\0\3\5\1\0\5\5\1\0\21\5\u1144\0" - + "\ua6d7\5\51\0\u1035\5\13\0\336\5\u3fe2\0\u021e\5\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0" - + "\1\6\36\0\140\6\200\0\360\6\uffff\0\uffff\0\ufe12\0"; + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\2\1\1\2\1\3\1\4\2\5\1\1\1\6"+ + "\2\7\1\10\1\11\1\12\5\11\1\1\1\11\2\13"+ + "\1\11\1\1\1\11\1\14\1\15\1\16\1\17\1\20"+ + "\1\16\1\21\1\22\1\23\1\24\1\25\1\26\1\16"+ + "\5\11\2\0\1\11\1\0\2\27\2\11\2\0\5\11"+ + "\1\0\1\11\1\0\2\27\1\11\1\0\1\30\1\31"+ + "\3\11\1\32\1\0\4\11\1\33\1\0\4\11\1\0"+ + "\4\11\1\0\4\11\1\0\1\11\2\34\1\35\1\27"+ + "\2\36"; - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + private static int [] zzUnpackAction() { + int [] result = new int[104]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } - private static final String ZZ_ACTION_PACKED_0 - = "\3\0\3\1\1\2\1\3\1\4\2\5\1\1\1\6" - + "\2\7\1\10\1\11\1\12\1\13\5\11\1\1\1\11" - + "\1\12\1\11\1\1\1\11\1\14\1\0\1\15\1\16" - + "\1\17\1\20\1\16\1\21\1\22\1\23\1\24\1\25" - + "\1\26\1\16\1\0\1\27\5\11\2\0\1\11\1\27" - + "\2\11\2\0\1\27\1\0\5\11\1\0\1\11\1\27" - + "\1\11\1\0\1\30\1\31\3\11\1\32\1\0\4\11" - + "\1\33\1\0\4\11\1\0\4\11\1\0\4\11\1\0" - + "\1\11\2\34\1\35\1\27\2\36"; - - private static int[] zzUnpackAction() { - int[] result = new int[106]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\52\0\124\0\176\0\250\0\322\0\176\0\374"+ + "\0\u0126\0\176\0\u0150\0\176\0\u017a\0\176\0\u01a4\0\u01ce"+ + "\0\176\0\u01f8\0\u0222\0\u024c\0\u0276\0\u02a0\0\u02ca\0\u02f4"+ + "\0\u031e\0\u0348\0\u0372\0\u039c\0\u03c6\0\176\0\176\0\176"+ + "\0\176\0\176\0\u03f0\0\176\0\176\0\176\0\176\0\176"+ + "\0\176\0\u041a\0\u0444\0\u046e\0\u0498\0\u04c2\0\u04ec\0\u0516"+ + "\0\u039c\0\u0540\0\u056a\0\u031e\0\u0594\0\u05be\0\u05e8\0\u0612"+ + "\0\u063c\0\u0666\0\u0690\0\u06ba\0\u06e4\0\u070e\0\u0738\0\u0762"+ + "\0\u078c\0\u078c\0\u01ce\0\u07b6\0\u041a\0\176\0\u01ce\0\u07e0"+ + "\0\u080a\0\u0834\0\u01ce\0\u085e\0\u0888\0\u08b2\0\u08dc\0\u0906"+ + "\0\u01ce\0\u0930\0\u095a\0\u0984\0\u09ae\0\u09d8\0\u0a02\0\u0a2c"+ + "\0\u0a56\0\u0a80\0\u0aaa\0\u0ad4\0\u0afe\0\u0b28\0\u0b52\0\u0b7c"+ + "\0\u0ba6\0\u0bd0\0\u01ce\0\u0bfa\0\u01ce\0\176\0\u01ce\0\u0c24"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[104]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_ROWMAP_PACKED_0 - = "\0\0\0\54\0\130\0\204\0\260\0\334\0\u0108\0\204" - + "\0\u0134\0\u0160\0\204\0\u018c\0\204\0\u01b8\0\204\0\u01e4" - + "\0\u0210\0\u023c\0\204\0\u0268\0\u0294\0\u02c0\0\u02ec\0\u0318" - + "\0\u0344\0\u0370\0\u039c\0\u03c8\0\u03f4\0\u0420\0\204\0\334" - + "\0\204\0\204\0\204\0\204\0\u044c\0\204\0\204\0\204" - + "\0\204\0\204\0\204\0\u0478\0\u04a4\0\u04d0\0\u04fc\0\u0528" - + "\0\u0554\0\u0580\0\u05ac\0\u05d8\0\u03f4\0\u0604\0\u039c\0\u0630" - + "\0\u065c\0\u0688\0\u06b4\0\u06e0\0\u06e0\0\u070c\0\u0738\0\u0764" - + "\0\u0790\0\u07bc\0\u07e8\0\u0814\0\u0210\0\u0840\0\u0478\0\204" - + "\0\u0210\0\u086c\0\u0898\0\u08c4\0\u0210\0\u08f0\0\u091c\0\u0948" - + "\0\u0974\0\u09a0\0\u0210\0\u09cc\0\u09f8\0\u0a24\0\u0a50\0\u0a7c" - + "\0\u0aa8\0\u0ad4\0\u0b00\0\u0b2c\0\u0b58\0\u0b84\0\u0bb0\0\u0bdc" - + "\0\u0c08\0\u0c34\0\u0c60\0\u0c8c\0\u0cb8\0\u0210\0\u0210\0\204" - + "\0\u0ce4\0\u0210"; + private static final String ZZ_TRANS_PACKED_0 = + "\4\4\1\5\1\6\3\4\1\7\13\6\1\4\2\6"+ + "\2\4\1\6\1\4\1\6\1\4\1\6\1\4\3\6"+ + "\1\4\1\6\1\4\1\6\1\4\1\5\1\4\1\10"+ + "\1\11\1\12\34\10\1\13\3\10\1\14\6\10\1\4"+ + "\1\15\1\16\1\17\1\4\1\20\2\4\1\21\1\4"+ + "\1\22\1\23\1\24\1\20\1\25\3\20\1\26\2\20"+ + "\1\27\1\30\1\20\1\31\1\32\1\33\1\34\1\20"+ + "\1\4\1\20\1\4\1\20\1\35\1\20\1\36\1\20"+ + "\1\4\1\20\3\4\56\0\1\5\43\0\1\5\6\0"+ + "\2\6\1\37\2\0\13\6\1\0\5\6\1\0\1\6"+ + "\1\0\1\6\1\0\3\6\1\0\1\6\1\0\1\6"+ + "\2\0\1\6\1\10\2\0\34\10\1\0\3\10\1\0"+ + "\6\10\2\0\1\12\47\0\1\40\2\0\7\40\1\41"+ + "\1\42\1\43\1\40\1\44\3\40\1\45\14\40\1\46"+ + "\3\40\1\47\1\50\1\51\1\52\5\0\1\16\47\0"+ + "\1\17\2\0\47\17\5\0\2\20\3\0\13\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\1\20\1\53\11\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\5\0\2\20\3\0\3\20\1\54\7\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\10\20\1\55\2\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\5\0\2\20\3\0\5\20\1\56\5\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\2\20\1\57\10\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\26\0\1\60\1\0\1\31\1\32\1\0\1\61"+ + "\23\0\2\20\3\0\10\20\1\62\2\20\1\0\5\20"+ + "\1\0\1\20\1\0\1\20\1\0\3\20\1\0\1\20"+ + "\1\0\1\20\2\0\1\20\15\0\1\63\12\0\2\64"+ + "\1\0\1\65\1\63\32\0\1\63\12\0\2\32\1\0"+ + "\1\65\1\63\22\0\2\20\3\0\5\20\1\66\5\20"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\30\0\2\65"+ + "\25\0\2\20\3\0\13\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\2\20\1\67\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\15\0\3\70\3\0\1\70\4\0"+ + "\2\70\2\0\1\70\1\0\1\70\2\0\1\70\2\0"+ + "\1\70\22\0\3\71\3\0\1\71\4\0\2\71\2\0"+ + "\1\71\1\0\1\71\2\0\1\71\2\0\1\71\12\0"+ + "\2\20\3\0\2\20\1\72\10\20\1\0\5\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\5\0\2\20\3\0\13\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\1\73\2\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\11\20\1\74\1\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\5\0\2\20\3\0\6\20\1\75\4\20"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\6\20\1\76\4\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\22\0\1\77\34\0\2\20\3\0\4\20"+ + "\1\100\6\20\1\0\5\20\1\0\1\20\1\0\1\20"+ + "\1\0\3\20\1\0\1\20\1\0\1\20\2\0\1\20"+ + "\25\0\1\101\2\0\2\102\3\0\1\101\31\0\1\63"+ + "\12\0\2\65\2\0\1\63\22\0\2\20\3\0\13\20"+ + "\1\0\4\20\1\103\1\0\1\20\1\0\1\20\1\0"+ + "\3\20\1\0\1\20\1\0\1\20\2\0\1\20\5\0"+ + "\2\20\3\0\10\20\1\104\2\20\1\0\5\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\15\0\3\105\3\0\1\105\4\0"+ + "\2\105\2\0\1\105\1\0\1\105\2\0\1\105\2\0"+ + "\1\105\22\0\3\106\3\0\1\106\4\0\2\106\2\0"+ + "\1\106\1\0\1\106\2\0\1\106\2\0\1\106\12\0"+ + "\2\20\3\0\3\20\1\107\7\20\1\0\5\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\5\0\2\20\3\0\12\20\1\110"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\3\20\1\111\7\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\5\0\2\20\3\0\7\20\1\112\3\20"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\6\20\1\113\4\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\16\0\1\114\40\0\2\20\3\0\12\20"+ + "\1\115\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ + "\3\20\1\0\1\20\1\0\1\20\2\0\1\20\30\0"+ + "\2\102\25\0\2\20\3\0\7\20\1\116\3\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\7\20\1\117\3\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\5\0\2\20\3\0\4\20\1\120\6\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\3\20\1\121\7\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\24\0\1\122\32\0\2\20\3\0\10\20\1\123"+ + "\2\20\1\0\5\20\1\0\1\20\1\0\1\20\1\0"+ + "\3\20\1\0\1\20\1\0\1\20\2\0\1\20\5\0"+ + "\2\20\3\0\1\124\12\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\5\0\2\20\3\0\1\125\12\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\12\20\1\126\1\0\5\20\1\0\1\20\1\0\1\20"+ + "\1\0\3\20\1\0\1\20\1\0\1\20\2\0\1\20"+ + "\22\0\1\127\34\0\2\20\3\0\12\20\1\130\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\5\20\1\131\5\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\5\0\2\20\3\0\3\20\1\132\7\20\1\0"+ + "\5\20\1\0\1\20\1\0\1\20\1\0\3\20\1\0"+ + "\1\20\1\0\1\20\2\0\1\20\5\0\2\20\3\0"+ + "\10\20\1\133\2\20\1\0\5\20\1\0\1\20\1\0"+ + "\1\20\1\0\3\20\1\0\1\20\1\0\1\20\2\0"+ + "\1\20\24\0\1\134\32\0\2\20\3\0\1\135\12\20"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\10\20\1\136\2\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\5\0\2\20\3\0\1\20\1\137\11\20"+ + "\1\0\5\20\1\0\1\20\1\0\1\20\1\0\3\20"+ + "\1\0\1\20\1\0\1\20\2\0\1\20\5\0\2\20"+ + "\3\0\3\20\1\140\7\20\1\0\5\20\1\0\1\20"+ + "\1\0\1\20\1\0\3\20\1\0\1\20\1\0\1\20"+ + "\2\0\1\20\12\0\1\141\44\0\2\20\3\0\13\20"+ + "\1\0\1\20\1\103\3\20\1\0\1\20\1\0\1\20"+ + "\1\0\3\20\1\0\1\20\1\0\1\20\2\0\1\20"+ + "\5\0\2\20\3\0\1\142\12\20\1\0\5\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\5\0\2\20\3\0\13\20\1\0"+ + "\2\20\1\143\1\144\1\20\1\0\1\20\1\0\1\20"+ + "\1\0\3\20\1\0\1\20\1\0\1\20\2\0\1\20"+ + "\5\0\2\20\3\0\11\20\1\145\1\20\1\0\5\20"+ + "\1\0\1\20\1\0\1\20\1\0\3\20\1\0\1\20"+ + "\1\0\1\20\2\0\1\20\27\0\1\146\27\0\2\20"+ + "\3\0\13\20\1\0\2\20\1\147\1\150\1\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20\5\0\2\20\3\0\13\20\1\0"+ + "\2\20\2\144\1\20\1\0\1\20\1\0\1\20\1\0"+ + "\3\20\1\0\1\20\1\0\1\20\2\0\1\20\5\0"+ + "\2\20\3\0\13\20\1\0\2\20\2\150\1\20\1\0"+ + "\1\20\1\0\1\20\1\0\3\20\1\0\1\20\1\0"+ + "\1\20\2\0\1\20"; - private static int[] zzUnpackRowMap() { - int[] result = new int[106]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[3150]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ - int j = offset; - /* index in unpacked array */ + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\1\11\2\1\1\11\2\1\1\11\1\1\1\11"+ + "\1\1\1\11\2\1\1\11\14\1\5\11\1\1\6\11"+ + "\6\1\2\0\1\1\1\0\4\1\2\0\5\1\1\0"+ + "\1\1\1\0\3\1\1\0\1\11\5\1\1\0\5\1"+ + "\1\0\4\1\1\0\4\1\1\0\4\1\1\0\4\1"+ + "\1\11\2\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[104]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** the input device */ + private java.io.Reader zzReader; - private static final String ZZ_TRANS_PACKED_0 - = "\4\4\1\5\1\6\1\4\1\7\1\6\3\4\1\10" - + "\13\7\1\4\2\7\1\4\1\7\1\4\1\7\1\4" - + "\1\7\1\4\3\7\1\4\1\7\1\4\1\7\1\4" - + "\1\5\1\4\1\11\1\12\1\13\36\11\1\14\3\11" - + "\1\15\6\11\1\4\1\16\1\17\1\20\1\4\1\21" - + "\1\4\2\21\1\22\1\4\1\23\1\4\1\24\1\25" - + "\1\26\1\21\1\27\3\21\1\30\2\21\1\31\1\32" - + "\1\21\1\33\1\34\1\35\1\21\1\4\1\21\1\4" - + "\1\21\1\36\1\21\1\37\1\21\1\4\1\21\3\4" - + "\60\0\1\5\45\0\1\5\6\0\5\40\1\41\2\0" - + "\13\40\1\0\4\40\1\0\1\40\1\0\1\40\1\0" - + "\3\40\1\0\1\40\1\0\1\40\2\0\1\40\5\0" - + "\2\40\3\7\1\41\2\0\13\7\1\0\4\7\1\0" - + "\1\7\1\0\1\7\1\0\3\7\1\0\1\7\1\0" - + "\1\7\2\0\1\40\1\11\2\0\36\11\1\0\3\11" - + "\1\0\6\11\2\0\1\13\51\0\1\42\2\0\12\42" - + "\1\43\1\44\1\45\1\42\1\46\3\42\1\47\13\42" - + "\1\50\3\42\1\51\1\52\1\53\1\54\5\0\1\17" - + "\51\0\1\20\2\0\51\20\5\0\5\21\3\0\13\21" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\11\0\1\22" - + "\6\0\1\55\12\0\1\22\1\0\1\56\1\55\22\0" - + "\5\21\3\0\1\21\1\57\11\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\3\21\1\60" - + "\7\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\10\21\1\61\2\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\5\21\1\62" - + "\5\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\2\21\1\63\10\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\11\0\1\22\17\0\1\64\1\0" - + "\1\33\1\0\1\65\23\0\5\21\3\0\10\21\1\66" - + "\2\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\11\0" - + "\1\67\6\0\1\55\12\0\1\67\1\0\1\56\1\55" - + "\22\0\5\21\3\0\5\21\1\70\5\21\1\0\4\21" - + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" - + "\1\0\1\21\2\0\1\21\11\0\1\56\21\0\1\56" - + "\25\0\5\21\3\0\13\21\1\0\4\21\1\0\1\21" - + "\1\0\1\21\1\0\2\21\1\71\1\0\1\21\1\0" - + "\1\21\2\0\1\21\11\0\1\72\6\0\3\72\3\0" - + "\1\72\4\0\1\72\2\0\1\72\1\0\1\72\2\0" - + "\1\72\2\0\1\72\16\0\1\73\6\0\3\73\3\0" - + "\1\73\4\0\1\73\2\0\1\73\1\0\1\73\2\0" - + "\1\73\2\0\1\73\16\0\1\74\16\0\1\75\2\0" - + "\1\74\3\0\1\75\25\0\1\56\6\0\1\55\12\0" - + "\1\56\2\0\1\55\22\0\5\21\3\0\2\21\1\76" - + "\10\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\13\21\1\0\4\21\1\0\1\21\1\0" - + "\1\21\1\0\1\77\2\21\1\0\1\21\1\0\1\21" - + "\2\0\1\21\5\0\5\21\3\0\11\21\1\100\1\21" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\5\21" - + "\3\0\6\21\1\101\4\21\1\0\4\21\1\0\1\21" - + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" - + "\2\0\1\21\5\0\5\21\3\0\6\21\1\102\4\21" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\25\0\1\103" - + "\33\0\5\21\3\0\4\21\1\104\6\21\1\0\4\21" - + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" - + "\1\0\1\21\2\0\1\21\5\0\5\21\3\0\13\21" - + "\1\0\3\21\1\105\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\10\21\1\106\2\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\11\0\1\107\6\0\3\107\3\0" - + "\1\107\4\0\1\107\2\0\1\107\1\0\1\107\2\0" - + "\1\107\2\0\1\107\16\0\1\110\6\0\3\110\3\0" - + "\1\110\4\0\1\110\2\0\1\110\1\0\1\110\2\0" - + "\1\110\2\0\1\110\16\0\1\74\21\0\1\74\25\0" - + "\5\21\3\0\3\21\1\111\7\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\12\21\1\112" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\5\21" - + "\3\0\3\21\1\113\7\21\1\0\4\21\1\0\1\21" - + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" - + "\2\0\1\21\5\0\5\21\3\0\7\21\1\114\3\21" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\5\21" - + "\3\0\6\21\1\115\4\21\1\0\4\21\1\0\1\21" - + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" - + "\2\0\1\21\21\0\1\116\37\0\5\21\3\0\12\21" - + "\1\117\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\7\21\1\120\3\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\7\21\1\121" - + "\3\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\4\21\1\122\6\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\3\21\1\123" - + "\7\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\27\0" - + "\1\124\31\0\5\21\3\0\10\21\1\125\2\21\1\0" - + "\4\21\1\0\1\21\1\0\1\21\1\0\3\21\1\0" - + "\1\21\1\0\1\21\2\0\1\21\5\0\5\21\3\0" - + "\1\126\12\21\1\0\4\21\1\0\1\21\1\0\1\21" - + "\1\0\3\21\1\0\1\21\1\0\1\21\2\0\1\21" - + "\5\0\5\21\3\0\1\127\12\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\12\21\1\130" - + "\1\0\4\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\25\0\1\131" - + "\33\0\5\21\3\0\12\21\1\132\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\5\21\1\133" - + "\5\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\5\0" - + "\5\21\3\0\3\21\1\134\7\21\1\0\4\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21\5\0\5\21\3\0\10\21\1\135" - + "\2\21\1\0\4\21\1\0\1\21\1\0\1\21\1\0" - + "\3\21\1\0\1\21\1\0\1\21\2\0\1\21\27\0" - + "\1\136\31\0\5\21\3\0\1\137\12\21\1\0\4\21" - + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" - + "\1\0\1\21\2\0\1\21\5\0\5\21\3\0\10\21" - + "\1\140\2\21\1\0\4\21\1\0\1\21\1\0\1\21" - + "\1\0\3\21\1\0\1\21\1\0\1\21\2\0\1\21" - + "\5\0\5\21\3\0\1\21\1\141\11\21\1\0\4\21" - + "\1\0\1\21\1\0\1\21\1\0\3\21\1\0\1\21" - + "\1\0\1\21\2\0\1\21\5\0\5\21\3\0\3\21" - + "\1\142\7\21\1\0\4\21\1\0\1\21\1\0\1\21" - + "\1\0\3\21\1\0\1\21\1\0\1\21\2\0\1\21" - + "\15\0\1\143\43\0\5\21\3\0\13\21\1\0\1\21" - + "\1\105\2\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\5\21" - + "\3\0\1\144\12\21\1\0\4\21\1\0\1\21\1\0" - + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\2\0" - + "\1\21\5\0\4\21\1\145\3\0\13\21\1\0\2\21" - + "\1\146\1\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\5\21" - + "\3\0\11\21\1\147\1\21\1\0\4\21\1\0\1\21" - + "\1\0\1\21\1\0\3\21\1\0\1\21\1\0\1\21" - + "\2\0\1\21\32\0\1\150\26\0\4\21\1\151\3\0" - + "\13\21\1\0\2\21\1\152\1\21\1\0\1\21\1\0" - + "\1\21\1\0\3\21\1\0\1\21\1\0\1\21\2\0" - + "\1\21\5\0\4\21\1\145\3\0\13\21\1\0\2\21" - + "\1\145\1\21\1\0\1\21\1\0\1\21\1\0\3\21" - + "\1\0\1\21\1\0\1\21\2\0\1\21\5\0\4\21" - + "\1\151\3\0\13\21\1\0\2\21\1\151\1\21\1\0" - + "\1\21\1\0\1\21\1\0\3\21\1\0\1\21\1\0" - + "\1\21\2\0\1\21"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[3344]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - int j = offset; - /* index in unpacked array */ + /** the textposition at the last accepting state */ + private int zzMarkedPos; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** the current text position in the buffer */ + private int zzCurrentPos; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - private static final int ZZ_NO_MATCH = 1; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** the number of characters up to the start of the matched text */ + private int yychar; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\3\0\1\11\3\1\1\11\2\1\1\11\1\1\1\11" - + "\1\1\1\11\3\1\1\11\13\1\1\11\1\0\4\11" - + "\1\1\6\11\1\1\1\0\6\1\2\0\4\1\2\0" - + "\1\1\1\0\5\1\1\0\3\1\1\0\1\11\5\1" - + "\1\0\5\1\1\0\4\1\1\0\4\1\1\0\4\1" - + "\1\0\4\1\1\11\2\1"; + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - private static int[] zzUnpackAttribute() { - int[] result = new int[106]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. + * When a lead/high surrogate has been read from the input stream + * into the final zzBuffer position, this will have a value of 1; + * otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; - /* index in packed string */ + /* user code: */ - int j = offset; - /* index in unpacked array */ - - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } - - /** - * the input device - */ - private java.io.Reader zzReader; - - /** - * the current state of the DFA - */ - private int zzState; - - /** - * the current lexical state - */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of - * the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** - * the textposition at the last accepting state - */ - private int zzMarkedPos; - - /** - * the current text position in the buffer - */ - private int zzCurrentPos; - - /** - * startRead marks the beginning of the yytext() string in the buffer - */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from - * input - */ - private int zzEndRead; - - /** - * number of newlines encountered up to the start of the matched text - */ - private int yyline; - - /** - * the number of characters up to the start of the matched text - */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** - * zzAtEOF == true <=> the scanner is at the EOF - */ - private boolean zzAtEOF; - - /** - * denotes if the user-EOF-code has already been executed - */ - private boolean zzEOFDone; - - /** - * The number of occupied positions in zzBuffer beyond zzEndRead. When a - * lead/high surrogate has been read from the input stream into the final - * zzBuffer position, this will have a value of 1; otherwise, it will have a - * value of 0. - */ - private int zzFinalHighSurrogate = 0; - - /* user code: */ StringBuilder string = new StringBuilder(); /** @@ -631,543 +572,513 @@ public final class FlasmLexer { return yyline + 1; } - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public FlasmLexer(java.io.Reader in) { - this.zzReader = in; + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public FlasmLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x110000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2854) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x110000]; - int i = 0; - /* index in packed string */ + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + } - int j = 0; - /* index in unpacked array */ + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - while (i < 2854) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; } - return map; + } + return false; } - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { + // totalRead = 0: End of stream + return true; + } - /* first: make room (if you can) */ - if (zzStartRead > 0) { - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; + if (zzReader != null) + zzReader.close(); + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ASMParsedSymbol yylex() throws java.io.IOException, ActionParseException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + yychar+= zzMarkedPosL-zzStartRead; + + boolean zzR = false; + int zzCh; + int zzCharCount; + for (zzCurrentPosL = zzStartRead ; + zzCurrentPosL < zzMarkedPosL ; + zzCurrentPosL += zzCharCount ) { + zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); + zzCharCount = Character.charCount(zzCh); + switch (zzCh) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) + zzR = false; + else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn += zzCharCount; } + } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { - /* if not: blow it up */ - char newBuffer[] = new char[zzBuffer.length * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - zzEndRead += zzFinalHighSurrogate; - zzFinalHighSurrogate = 0; + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + else if (zzAtEOF) + zzPeek = false; + else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) + zzPeek = false; + else + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; } + if (zzPeek) yyline--; + } + zzAction = -1; - /* fill the buffer with new input */ - int requested = zzBuffer.length - zzEndRead; - int totalRead = 0; - while (totalRead < requested) { - int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); - if (numRead == -1) { - break; - } - totalRead += numRead; - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - if (totalRead > 0) { - zzEndRead += totalRead; - if (totalRead == requested) { - /* possibly more input available */ + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } - if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { - --zzEndRead; - zzFinalHighSurrogate = 1; - } - } - return false; - } - - // totalRead = 0: End of stream - return true; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; - /* indicate end of file */ - - zzEndRead = zzStartRead; - /* invalidate buffer */ - - if (zzReader != null) { - zzReader.close(); - } - } - - /** - * Resets the scanner to read from a new input stream. Does not close the - * old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). Lexical - * state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has - * grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - zzFinalHighSurrogate = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. A value from 0 to - * yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and - * a match-all fallback rule) this method will only be called with things - * that "Can't Possibly Happen". If this method is called, something is - * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error - * fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number the number of characters to be read again. This number must - * not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) { - zzScanError(ZZ_PUSHBACK_2BIG); - } - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of - * input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public ASMParsedSymbol yylex() throws java.io.IOException, ActionParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar += zzMarkedPosL - zzStartRead; - - boolean zzR = false; - int zzCh; - int zzCharCount; - for (zzCurrentPosL = zzStartRead; - zzCurrentPosL < zzMarkedPosL; - zzCurrentPosL += zzCharCount) { - zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL); - zzCharCount = Character.charCount(zzCh); - switch (zzCh) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) { - zzR = false; - } else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn += zzCharCount; - } + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) { - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - } else if (zzAtEOF) { - zzPeek = false; - } else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) { - zzPeek = false; - } else { - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - } - } - if (zzPeek) { - yyline--; - } + else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); } - zzAction = -1; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - } - - zzForAction: - { - while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } else { - zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); - zzCurrentPosL += Character.charCount(zzInput); - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) { - break zzForAction; - } - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) { - break zzForAction; - } - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - } - case 31: - break; - case 2: { - yybegin(PARAMETERS); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); - } - case 32: - break; - case 3: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); - } - case 33: - break; - case 4: { - string.append(yytext()); - } - case 34: - break; - case 5: { - throw new ActionParseException("Unterminated string at end of line", yyline + 1); - } - case 35: - break; - case 6: { - yybegin(PARAMETERS); - // length also includes the trailing quote - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING, string.toString()); - } - case 36: - break; - case 7: { - yybegin(YYINITIAL); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); - } - case 37: - break; - case 8: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT, yytext().substring(1)); - } - case 38: - break; - case 9: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER, yytext()); - } - case 39: - break; - case 10: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); - } - case 40: - break; - case 11: { - yybegin(YYINITIAL); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); - } - case 41: - break; - case 12: { - yybegin(STRING); - string.setLength(0); - } - case 42: - break; - case 13: { - String s = yytext(); - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); - } - case 43: - break; - case 14: { - throw new ActionParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 44: - break; - case 15: { - string.append('\t'); - } - case 45: - break; - case 16: { - string.append('\r'); - } - case 46: - break; - case 17: { - string.append('\f'); - } - case 47: - break; - case 18: { - string.append('\n'); - } - case 48: - break; - case 19: { - string.append('\\'); - } - case 49: - break; - case 20: { - string.append('\"'); - } - case 50: - break; - case 21: { - string.append('\b'); - } - case 51: - break; - case 22: { - string.append('\''); - } - case 52: - break; - case 23: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); - } - case 53: - break; - case 24: { - char val = (char) Integer.parseInt(yytext().substring(2), 16); - string.append(val); - } - case 54: - break; - case 25: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.TRUE); - } - case 55: - break; - case 26: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL, Null.INSTANCE); - } - case 56: - break; - case 27: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN, Boolean.FALSE); - } - case 57: - break; - case 28: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); - } - case 58: - break; - case 29: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED, Undefined.INSTANCE); - } - case 59: - break; - case 30: { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); - } - case 60: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 31: break; + case 2: + { yybegin(PARAMETERS); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INSTRUCTION_NAME, yytext()); + } + case 32: break; + case 3: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_END); + } + case 33: break; + case 4: + { string.append(yytext()); + } + case 34: break; + case 5: + { throw new ActionParseException("Unterminated string at end of line", yyline + 1); + } + case 35: break; + case 6: + { yybegin(PARAMETERS); + // length also includes the trailing quote + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_STRING, string.toString()); + } + case 36: break; + case 7: + { yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOL); + } + case 37: break; + case 8: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_COMMENT, yytext().substring(1)); + } + case 38: break; + case 9: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_IDENTIFIER, yytext()); + } + case 39: break; + case 10: + { yybegin(YYINITIAL); return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BLOCK_START); + } + case 40: break; + case 11: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_INTEGER, Long.parseLong((yytext()))); + } + case 41: break; + case 12: + { yybegin(STRING); + string.setLength(0); + } + case 42: break; + case 13: + { String s=yytext(); + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_LABEL, s.substring(0, s.length() - 1)); + } + case 43: break; + case 14: + { throw new ActionParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); + } + case 44: break; + case 15: + { string.append('\t'); + } + case 45: break; + case 16: + { string.append('\r'); + } + case 46: break; + case 17: + { string.append('\f'); + } + case 47: break; + case 18: + { string.append('\n'); + } + case 48: break; + case 19: + { string.append('\\'); + } + case 49: break; + case 20: + { string.append('\"'); + } + case 50: break; + case 21: + { string.append('\b'); + } + case 51: break; + case 22: + { string.append('\''); + } + case 52: break; + case 23: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_FLOAT, Double.parseDouble((yytext()))); + } + case 53: break; + case 24: + { char val = (char) Integer.parseInt(yytext().substring(2), 16); + string.append(val); + } + case 54: break; + case 25: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.TRUE); + } + case 55: break; + case 26: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_NULL, Null.INSTANCE); + } + case 56: break; + case 27: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_BOOLEAN,Boolean.FALSE); + } + case 57: break; + case 28: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_REGISTER, new RegisterNumber(Integer.parseInt(yytext().substring(8)))); + } + case 58: break; + case 29: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_UNDEFINED, Undefined.INSTANCE); + } + case 59: break; + case 30: + { return new ASMParsedSymbol(ASMParsedSymbol.TYPE_CONSTANT, new ConstantIndex(Integer.parseInt(yytext().substring(8)))); + } + case 60: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ASMParsedSymbol(ASMParsedSymbol.TYPE_EOF); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + + } diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex index dd0017c8c..ceceb41b2 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm.flex @@ -48,7 +48,7 @@ WhiteSpace = [ \t\f]+ Identifier = [:jletter:][:jletterdigit:]* -InstructionName = [a-zA-Z][a-zA-Z0-9_]* +InstructionName = [:jletter:][:jletterdigit:]* Label = {Identifier}: diff --git a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex index f753135b2..dfc379c87 100644 --- a/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex +++ b/libsrc/jsyntaxpane/jsyntaxpane/src/main/jflex/jsyntaxpane/lexers/flasm3.flex @@ -52,7 +52,7 @@ Multiname = m\[[0-9]+\] Identifier = [:jletter:][:jletterdigit:]* -InstructionName = [a-z][a-z0-9_]* +InstructionName = [:jletter:][:jletterdigit:]* Label = {Identifier}: From 1f84a87b84935342f4ab4ee94e3498c069b18a9c Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 26 Dec 2016 17:58:26 +0100 Subject: [PATCH 009/114] using defined constant in TraitListItem --- src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java | 1 - .../jpexs/decompiler/flash/gui/abc/TraitsListItem.java | 10 ++++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java index 1e582685f..02f18ee85 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java @@ -89,7 +89,6 @@ public class TraitsList extends JList implements ListSelectionListener { lastSelected = getSelectedIndex(); TraitsListItem sel = (TraitsListItem) getSelectedValue(); abcPanel.decompiledTextArea.gotoTrait(sel == null ? -1 : sel.getGlobalTraitId()); - } @Override diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index 49af65ebc..d79c71651 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -24,6 +24,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; import com.jpexs.decompiler.flash.gui.AppStrings; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; import java.util.ArrayList; @@ -66,16 +67,13 @@ public class TraitsListItem { public int getGlobalTraitId() { if (type == Type.INITIALIZER) { if (!isStatic) { - return -1; - //return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size(); + return GraphTextWriter.TRAIT_INSTANCE_INITIALIZER; } else { - return -2; - //return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size() + 1; + return GraphTextWriter.TRAIT_CLASS_INITIALIZER; } } if (type == Type.SCRIPT_INITIALIZER) { - //return abc.class_info.get(classIndex).static_traits.traits.size() + abc.instance_info.get(classIndex).instance_traits.traits.size() + 2; - return -3; + return GraphTextWriter.TRAIT_SCRIPT_INITIALIZER; } if (isStatic) { return index; From 93082c1eb33f925a053015c5533b0304dbf1e9ad Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 27 Dec 2016 19:52:49 +0100 Subject: [PATCH 010/114] AS3 pcode search improvements --- .../com/jpexs/decompiler/flash/abc/ABC.java | 26 +++++++ .../decompiler/flash/abc/ScriptPack.java | 6 +- .../flash/abc/types/traits/Trait.java | 2 +- .../flash/abc/types/traits/TraitClass.java | 10 +-- .../flash/abc/types/traits/TraitFunction.java | 4 +- .../types/traits/TraitMethodGetterSetter.java | 4 +- .../abc/types/traits/TraitSlotConst.java | 2 +- .../flash/abc/types/traits/TraitType.java | 43 ++++++++++++ .../flash/abc/types/traits/Traits.java | 11 +-- .../flash/helpers/GraphTextWriter.java | 2 + .../flash/locales/AppResources.properties | 4 ++ .../flash/locales/AppResources_ca.properties | 4 ++ .../flash/locales/AppResources_cs.properties | 4 ++ .../flash/locales/AppResources_de.properties | 2 + .../flash/locales/AppResources_es.properties | 4 ++ .../flash/locales/AppResources_fr.properties | 4 ++ .../flash/locales/AppResources_hu.properties | 4 ++ .../flash/locales/AppResources_it.properties | 4 ++ .../flash/locales/AppResources_nl.properties | 3 + .../flash/locales/AppResources_pl.properties | 17 +++++ .../flash/locales/AppResources_pt.properties | 2 + .../locales/AppResources_pt_BR.properties | 2 + .../flash/locales/AppResources_ru.properties | 3 + .../flash/locales/AppResources_sv.properties | 3 + .../flash/locales/AppResources_uk.properties | 3 + .../flash/locales/AppResources_zh.properties | 3 + .../flash/search/ABCSearchResult.java | 68 ++++++++++++++++--- .../flash/search/ActionScriptSearch.java | 2 +- .../decompiler/flash/search/MethodId.java | 9 ++- .../decompiler/flash/gui/abc/ABCPanel.java | 12 +++- .../flash/gui/abc/DecompiledEditorPane.java | 2 +- .../flash/gui/abc/IconListRenderer.java | 19 ++++-- .../decompiler/flash/gui/abc/TraitsList.java | 3 +- .../flash/gui/abc/TraitsListItem.java | 66 +++++------------- .../flash/gui/abc/TraitsListModel.java | 17 +++-- .../flash/gui/locales/MainFrame.properties | 4 -- .../flash/gui/locales/MainFrame_ca.properties | 4 -- .../flash/gui/locales/MainFrame_cs.properties | 4 -- .../flash/gui/locales/MainFrame_de.properties | 3 - .../flash/gui/locales/MainFrame_es.properties | 4 -- .../flash/gui/locales/MainFrame_fr.properties | 4 -- .../flash/gui/locales/MainFrame_hu.properties | 4 -- .../flash/gui/locales/MainFrame_it.properties | 4 -- .../flash/gui/locales/MainFrame_nl.properties | 3 - .../flash/gui/locales/MainFrame_pl.properties | 3 - .../flash/gui/locales/MainFrame_pt.properties | 3 - .../gui/locales/MainFrame_pt_BR.properties | 3 - .../flash/gui/locales/MainFrame_ru.properties | 3 - .../flash/gui/locales/MainFrame_sv.properties | 3 - .../flash/gui/locales/MainFrame_uk.properties | 3 - .../flash/gui/locales/MainFrame_zh.properties | 4 -- 51 files changed, 276 insertions(+), 154 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitType.java create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pl.properties diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java index f7b713b3f..75876ad75 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ABC.java @@ -41,6 +41,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitClass; import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.abc.usages.ClassNameMultinameUsage; import com.jpexs.decompiler.flash.abc.usages.ConstVarNameMultinameUsage; @@ -58,6 +59,7 @@ import com.jpexs.decompiler.flash.abc.usages.TypeNameMultinameUsage; import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecial; import com.jpexs.decompiler.flash.dumpview.DumpInfoSpecialType; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; import com.jpexs.decompiler.flash.importers.As3ScriptReplaceException; import com.jpexs.decompiler.flash.importers.As3ScriptReplacerInterface; @@ -1426,6 +1428,30 @@ public class ABC { return null; } + public int getGlobalTraitId(TraitType type, boolean isStatic, int classIndex, int index) { + if (type == TraitType.INITIALIZER) { + if (!isStatic) { + return GraphTextWriter.TRAIT_INSTANCE_INITIALIZER; + } else { + return GraphTextWriter.TRAIT_CLASS_INITIALIZER; + } + } + + if (type == TraitType.SCRIPT_INITIALIZER) { + return GraphTextWriter.TRAIT_SCRIPT_INITIALIZER; + } + + if (classIndex == -1) { + return index; + } + + if (isStatic) { + return index; + } else { + return class_info.get(classIndex).static_traits.traits.size() + index; + } + } + private void removeClassFromTraits(Traits traits, int index) { for (Trait t : traits.traits) { if (t instanceof TraitClass) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java index c3f14fb72..6948a10dd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/ScriptPack.java @@ -620,12 +620,12 @@ public class ScriptPack extends AS3ClassTreeItem { public void getMethodInfos(List methodInfos) { int script_init = abc.script_info.get(scriptIndex).init_index; - methodInfos.add(new MethodId(-1, script_init)); + methodInfos.add(new MethodId(GraphTextWriter.TRAIT_SCRIPT_INITIALIZER, -1, script_init)); List traits = abc.script_info.get(scriptIndex).traits.traits; - for (int t = 0; t < traitIndices.size(); t++) { + for (int t : traitIndices) { Trait trait = traits.get(t); - trait.getMethodInfos(abc, -1, methodInfos); + trait.getMethodInfos(abc, GraphTextWriter.TRAIT_UNKNOWN, -1, methodInfos); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java index 510217e13..b5a3e154e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Trait.java @@ -511,5 +511,5 @@ public abstract class Trait implements Cloneable, Serializable { return true; } - public abstract void getMethodInfos(ABC abc, int classIndex, List methodInfos); + public abstract void getMethodInfos(ABC abc, int traitId, int classIndex, List methodInfos); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java index 03070a2ad..170999309 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitClass.java @@ -278,19 +278,19 @@ public class TraitClass extends Trait implements TraitWithSlot { } @Override - public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + public void getMethodInfos(ABC abc, int traitId, int classIndex, List methodInfos) { InstanceInfo instanceInfo = abc.instance_info.get(class_info); ClassInfo classInfo = abc.class_info.get(class_info); //class initializer - methodInfos.add(new MethodId(class_info, classInfo.cinit_index)); + methodInfos.add(new MethodId(GraphTextWriter.TRAIT_CLASS_INITIALIZER, class_info, classInfo.cinit_index)); //constructor - instance initializer - methodInfos.add(new MethodId(class_info, instanceInfo.iinit_index)); + methodInfos.add(new MethodId(GraphTextWriter.TRAIT_INSTANCE_INITIALIZER, class_info, instanceInfo.iinit_index)); //static variables,constants & methods - classInfo.static_traits.getMethodInfos(abc, class_info, methodInfos); + classInfo.static_traits.getMethodInfos(abc, true, class_info, methodInfos); - instanceInfo.instance_traits.getMethodInfos(abc, class_info, methodInfos); + instanceInfo.instance_traits.getMethodInfos(abc, false, class_info, methodInfos); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java index d8643fd3d..7c43cbbb0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitFunction.java @@ -147,7 +147,7 @@ public class TraitFunction extends Trait implements TraitWithSlot { } @Override - public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { - methodInfos.add(new MethodId(classIndex, method_info)); + public void getMethodInfos(ABC abc, int traitId, int classIndex, List methodInfos) { + methodInfos.add(new MethodId(traitId, classIndex, method_info)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java index e84aa51de..b4b18456d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitMethodGetterSetter.java @@ -228,7 +228,7 @@ public class TraitMethodGetterSetter extends Trait { } @Override - public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { - methodInfos.add(new MethodId(classIndex, method_info)); + public void getMethodInfos(ABC abc, int traitId, int classIndex, List methodInfos) { + methodInfos.add(new MethodId(traitId, classIndex, method_info)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java index 4d6607570..9af84110e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitSlotConst.java @@ -247,6 +247,6 @@ public class TraitSlotConst extends Trait implements TraitWithSlot { } @Override - public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + public void getMethodInfos(ABC abc, int traitId, int classIndex, List methodInfos) { } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitType.java new file mode 100644 index 000000000..b3fe2d395 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/TraitType.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.abc.types.traits; + +/** + * + * @author JPEXS + */ +public enum TraitType { + METHOD, + VAR, + CONST, + INITIALIZER, + SCRIPT_INITIALIZER; + + public static TraitType getTypeForTrait(Trait t) { + if (t instanceof TraitMethodGetterSetter) { + return METHOD; + } + if (t instanceof TraitSlotConst) { + if (((TraitSlotConst) t).isConst()) { + return CONST; + } else { + return VAR; + } + } + return null; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java index f8e8b261b..964ef46f7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/traits/Traits.java @@ -171,12 +171,7 @@ public class Traits implements Cloneable, Serializable { continue; } writer.newLine(); - int h = t; - if (classIndex != -1) { - if (!isStatic) { - h += abc.class_info.get(classIndex).static_traits.traits.size(); - } - } + int h = abc.getGlobalTraitId(TraitType.METHOD /*non-initializer*/, isStatic, classIndex, t); if (trait instanceof TraitClass) { writer.startClass(((TraitClass) trait).class_info); } else { @@ -252,10 +247,10 @@ public class Traits implements Cloneable, Serializable { } } - public void getMethodInfos(ABC abc, int classIndex, List methodInfos) { + public void getMethodInfos(ABC abc, boolean isStatic, int classIndex, List methodInfos) { for (int t = 0; t < traits.size(); t++) { Trait trait = traits.get(t); - trait.getMethodInfos(abc, classIndex, methodInfos); + trait.getMethodInfos(abc, abc.getGlobalTraitId(TraitType.METHOD /*non-initializer*/, isStatic, classIndex, t), classIndex, methodInfos); } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java index 14fc85280..895ee8e11 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/GraphTextWriter.java @@ -39,6 +39,8 @@ public abstract class GraphTextWriter { public static final int TRAIT_SCRIPT_INITIALIZER = -3; + public static final int TRAIT_UNKNOWN = -4; + public CodeFormatting getFormatting() { return formatting; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources.properties index d15c905c2..6fd45c58d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources.properties @@ -36,3 +36,7 @@ timeFormat.second = second timeFormat.seconds = seconds fontNotFound = Font with id=%fontId% was not found. + +trait.scriptinitializer = script initializer +trait.instanceinitializer = instance initializer +trait.classinitializer = class initializer diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties index 2a1286504..815e46846 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ca.properties @@ -36,3 +36,7 @@ timeFormat.second = segon timeFormat.seconds = segons fontNotFound = No s'ha trobat la tipografia amb id=%fontId%. + +trait.scriptinitializer = iniciador del script +trait.instanceinitializer = inicialitzador d'inst\u00e0ncia +trait.classinitializer = inicialitzador de classe diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_cs.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_cs.properties index e6b1d93e5..e4353f3ff 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_cs.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_cs.properties @@ -34,3 +34,7 @@ timeFormat.second = vte\u0159ina timeFormat.seconds = vte\u0159in fontNotFound = P\u00edsmo s id=%fontId% nebylo nalezeno. + +trait.scriptinitializer = inicializ\u00e1tor skriptu +trait.instanceinitializer = inicializ\u00e1tor instance +trait.classinitializer = inicializ\u00e1tor t\u0159\u00eddy diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_de.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_de.properties index b5848a881..2b2fe633d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_de.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_de.properties @@ -13,3 +13,5 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. +trait.instanceinitializer = Instanzen-Initialisierer +trait.classinitializer = Klassen-Initialisierer diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_es.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_es.properties index e2530120b..b234e54a9 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_es.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_es.properties @@ -34,3 +34,7 @@ timeFormat.second = segundo timeFormat.seconds = segundos fontNotFound = La fuente con id=%fontId% no se encontr\u00f3. + +trait.scriptinitializer = inicializador de script +trait.instanceinitializer = inicializador de instancia +trait.classinitializer = inicializador de clase diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_fr.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_fr.properties index eb6209405..b7a0eb2b1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_fr.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_fr.properties @@ -36,3 +36,7 @@ timeFormat.second = seconde timeFormat.seconds = secondes fontNotFound = La police de caract\u00e8res n\u00ba%fontId% est introuvable. + +trait.scriptinitializer = Initialisateur de script +trait.instanceinitializer = instance d'initialisation +trait.classinitializer = classe d'initialisation diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_hu.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_hu.properties index 715b794e8..5c7c4a8ba 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_hu.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_hu.properties @@ -36,3 +36,7 @@ timeFormat.second = m\u00e1sodperc timeFormat.seconds = m\u00e1sodperc fontNotFound = Bet\u0171t\u00edpus (id=%fontId%) nem tal\u00e1lhat\u00f3. + +trait.scriptinitializer = szkript inicializ\u00e1l\u00f3 +trait.instanceinitializer = p\u00e9ld\u00e1ny inicializ\u00e1l\u00f3 +trait.classinitializer = oszt\u00e1ly inicializ\u00e1l\u00f3 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_it.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_it.properties index 98841f279..6d2b412d6 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_it.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_it.properties @@ -36,3 +36,7 @@ timeFormat.second = secondo timeFormat.seconds = secondi fontNotFound = Font con id=%fontId% non trovato. + +trait.scriptinitializer = Inizializzatore script +trait.instanceinitializer = instance initializer +trait.classinitializer = class initializer diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_nl.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_nl.properties index 010e60a01..a9d428ce2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_nl.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_nl.properties @@ -34,3 +34,6 @@ timeFormat.second = seconde timeFormat.seconds = seconden fontNotFound = Lettertype met id=%fontId% is niet gevonden. + +trait.instanceinitializer = instantie initialiseerder +trait.classinitializer = klasse initialiseerder diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pl.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pl.properties new file mode 100644 index 000000000..86f916691 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pl.properties @@ -0,0 +1,17 @@ +# Copyright (C) 2010-2016 JPEXS, All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 3.0 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library. + +trait.instanceinitializer = inicjator instancji +trait.classinitializer = inicjator klasy diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt.properties index b5848a881..640328265 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt.properties @@ -13,3 +13,5 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. +trait.instanceinitializer = inicializador de instancias +trait.classinitializer = inicializador de classes diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt_BR.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt_BR.properties index b5848a881..640328265 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt_BR.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_pt_BR.properties @@ -13,3 +13,5 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. +trait.instanceinitializer = inicializador de instancias +trait.classinitializer = inicializador de classes diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ru.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ru.properties index 2b234e48b..2a77dcaab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ru.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_ru.properties @@ -34,3 +34,6 @@ timeFormat.second = \u0441\u0435\u043a. timeFormat.seconds = \u0441\u0435\u043a. fontNotFound = \u0428\u0440\u0438\u0444\u0442 \u0441 id=%fontId% \u043d\u0435 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d. + +trait.instanceinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 +trait.classinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_sv.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_sv.properties index 6230eae7a..0e4b9989f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_sv.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_sv.properties @@ -34,3 +34,6 @@ timeFormat.second = sekund timeFormat.seconds = sekunder fontNotFound = Typsnitt med id=%fontId% hittades inte. + +trait.instanceinitializer = instans initierare +trait.classinitializer = klass initierare diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_uk.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_uk.properties index 70accbd3b..3edc38519 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_uk.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_uk.properties @@ -34,3 +34,6 @@ timeFormat.second = \u0441\u0435\u043a. timeFormat.seconds = \u0441\u0435\u043a. fontNotFound = \u0428\u0440\u0438\u0444\u0442 \u0437 id=%fontId% \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e. + +trait.instanceinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043e\u0431'\u0454\u043a\u0442\u0430 +trait.classinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0443 diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties index b5848a881..c7442ac7b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/locales/AppResources_zh.properties @@ -13,3 +13,6 @@ # You should have received a copy of the GNU Lesser General Public # License along with this library. +trait.scriptinitializer = \u521d\u59cb\u5316\u811a\u672c +trait.instanceinitializer = \u521d\u59cb\u5316\u5b9e\u4f8b +trait.classinitializer = \u521d\u59cb\u5316\u7c7b diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java index 68ddbff11..9b1b5ac63 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java @@ -16,7 +16,10 @@ */ package com.jpexs.decompiler.flash.search; +import com.jpexs.decompiler.flash.AppResources; +import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; /** * @@ -24,38 +27,85 @@ import com.jpexs.decompiler.flash.abc.ScriptPack; */ public class ABCSearchResult { + public static String STR_INSTANCE_INITIALIZER = AppResources.translate("trait.instanceinitializer"); + + public static String STR_CLASS_INITIALIZER = AppResources.translate("trait.classinitializer"); + + public static String STR_SCRIPT_INITIALIZER = AppResources.translate("trait.scriptinitializer"); + private final ScriptPack scriptPack; + private final boolean pcode; + private final int classIndex; - private final int methodIndex; + private final int traitId; public ABCSearchResult(ScriptPack scriptPack) { this.scriptPack = scriptPack; + pcode = false; classIndex = 0; - methodIndex = 0; + traitId = GraphTextWriter.TRAIT_UNKNOWN; } - public ABCSearchResult(ScriptPack scriptPack, int classIndex, int methodIndex) { + public ABCSearchResult(ScriptPack scriptPack, int classIndex, int traitId) { this.scriptPack = scriptPack; + pcode = true; this.classIndex = classIndex; - this.methodIndex = methodIndex; + this.traitId = traitId; } public ScriptPack getScriptPack() { return scriptPack; } - public int getClassIndex() { - return classIndex; + public boolean isPcode() { + return pcode; } - public int getMethodIndex() { - return methodIndex; + public int getTraitId() { + return traitId; + } + + private String getTraitName() { + if (traitId == GraphTextWriter.TRAIT_SCRIPT_INITIALIZER) { + return STR_SCRIPT_INITIALIZER; + } + + if (classIndex == -1) { + return null; + } + + if (traitId == GraphTextWriter.TRAIT_CLASS_INITIALIZER) { + return STR_CLASS_INITIALIZER; + } + + if (traitId == GraphTextWriter.TRAIT_INSTANCE_INITIALIZER) { + return STR_INSTANCE_INITIALIZER; + } + + ABC abc = scriptPack.abc; + + int instanceTraitCount = abc.instance_info.get(classIndex).instance_traits.traits.size(); + boolean isStatic = traitId >= instanceTraitCount; + + if (isStatic) { + int index = traitId - instanceTraitCount; + return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } else { + return abc.instance_info.get(classIndex).instance_traits.traits.get(traitId).getName(abc).getName(abc.constants, null, false, true); + } } @Override public String toString() { - return scriptPack.getClassPath().toString(); + String result = scriptPack.getClassPath().toString(); + + if (pcode) { + result += "/"; + result += getTraitName(); + } + + return result; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java index b12b29ab9..2c7caebea 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ActionScriptSearch.java @@ -159,7 +159,7 @@ public class ActionScriptSearch { abc.bodies.get(bodyIndex).getCode().toASMSource(abc.constants, abc.method_info.get(body.method_info), body, ScriptExportMode.PCODE, writer); String text = writer.toString(); if (pat.matcher(text).find()) { - ABCSearchResult searchResult = new ABCSearchResult(pack, methodInfo.getClassIndex(), methodInfo.getMethodIndex()); + ABCSearchResult searchResult = new ABCSearchResult(pack, methodInfo.getClassIndex(), methodInfo.getTraitId()); found.add(searchResult); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java index b8f88f347..6d39c0bbc 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/MethodId.java @@ -22,11 +22,14 @@ package com.jpexs.decompiler.flash.search; */ public class MethodId { + private final int traitId; + private final int classIndex; private final int methodIndex; - public MethodId(int classIndex, int methodIndex) { + public MethodId(int traitId, int classIndex, int methodIndex) { + this.traitId = traitId; this.classIndex = classIndex; this.methodIndex = methodIndex; } @@ -38,4 +41,8 @@ public class MethodId { public int getMethodIndex() { return methodIndex; } + + public int getTraitId() { + return traitId; + } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 6b1f32d12..298eac3fa 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1249,10 +1249,20 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener { - searchPanel.showQuickFindDialog(decompiledTextArea); + if (pcode) { + searchPanel.showQuickFindDialog(detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea()); + } else { + searchPanel.showQuickFindDialog(decompiledTextArea); + } }); } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index b1a688f75..48a56ca19 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -608,7 +608,7 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL Highlighting tc = Highlighting.searchIndex(highlightedText.getClassHighlights(), classIndex); if (tc != null || isScriptInit) { - Highlighting th = Highlighting.searchIndex(highlightedText.getTraitHighlights(), traitId, isScriptInit || tc == null ? 0 : tc.startPos, isScriptInit || tc == null ? -1 : tc.startPos + tc.len); + Highlighting th = Highlighting.searchIndex(highlightedText.getTraitHighlights(), traitId, isScriptInit ? 0 : tc.startPos, isScriptInit ? -1 : tc.startPos + tc.len); int pos = 0; if (th != null) { if (th.len > 1) { diff --git a/src/com/jpexs/decompiler/flash/gui/abc/IconListRenderer.java b/src/com/jpexs/decompiler/flash/gui/abc/IconListRenderer.java index 58ab74a4a..209f50b6e 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/IconListRenderer.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/IconListRenderer.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.gui.abc; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; import com.jpexs.decompiler.flash.gui.View; import java.awt.Component; import java.net.URL; @@ -62,22 +63,26 @@ public class IconListRenderer extends DefaultListCellRenderer { // Get icon to use for the list item value TraitsListItem tli = (TraitsListItem) value; - if (tli.getType() == TraitsListItem.Type.CONST) { + if (tli.getType() == TraitType.CONST) { label.setIcon(constIcon); } - if (tli.getType() == TraitsListItem.Type.VAR) { + + if (tli.getType() == TraitType.VAR) { label.setIcon(variableIcon); } - if (tli.getType() == TraitsListItem.Type.METHOD) { - label.setIcon(functionIcon); - } - if (tli.getType() == TraitsListItem.Type.INITIALIZER) { + + if (tli.getType() == TraitType.METHOD) { label.setIcon(functionIcon); } - if (tli.getType() == TraitsListItem.Type.SCRIPT_INITIALIZER) { + if (tli.getType() == TraitType.INITIALIZER) { label.setIcon(functionIcon); } + + if (tli.getType() == TraitType.SCRIPT_INITIALIZER) { + label.setIcon(functionIcon); + } + return label; } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java index 02f18ee85..7cb82c525 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsList.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics; @@ -88,7 +89,7 @@ public class TraitsList extends JList implements ListSelectionListener { } lastSelected = getSelectedIndex(); TraitsListItem sel = (TraitsListItem) getSelectedValue(); - abcPanel.decompiledTextArea.gotoTrait(sel == null ? -1 : sel.getGlobalTraitId()); + abcPanel.decompiledTextArea.gotoTrait(sel == null ? GraphTextWriter.TRAIT_UNKNOWN : sel.getGlobalTraitId()); } @Override diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index d79c71651..720918a55 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -19,14 +19,12 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.types.ConvertData; import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; -import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.gui.AppStrings; -import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; import com.jpexs.decompiler.flash.helpers.NulWriter; +import com.jpexs.decompiler.flash.search.ABCSearchResult; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; @@ -37,7 +35,7 @@ import java.util.logging.Logger; */ public class TraitsListItem { - private final Type type; + private final TraitType type; private final boolean isStatic; @@ -49,13 +47,13 @@ public class TraitsListItem { private final int scriptIndex; - public String STR_INSTANCE_INITIALIZER = AppStrings.translate("abc.traitslist.instanceinitializer"); + public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; - public String STR_CLASS_INITIALIZER = AppStrings.translate("abc.traitslist.classinitializer"); + public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; - public String STR_SCRIPT_INITIALIZER = AppStrings.translate("abc.traitslist.scriptinitializer"); + public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; - public TraitsListItem(Type type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { + public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { this.type = type; this.index = index; this.isStatic = isStatic; @@ -65,33 +63,19 @@ public class TraitsListItem { } public int getGlobalTraitId() { - if (type == Type.INITIALIZER) { - if (!isStatic) { - return GraphTextWriter.TRAIT_INSTANCE_INITIALIZER; - } else { - return GraphTextWriter.TRAIT_CLASS_INITIALIZER; - } - } - if (type == Type.SCRIPT_INITIALIZER) { - return GraphTextWriter.TRAIT_SCRIPT_INITIALIZER; - } - if (isStatic) { - return index; - } else { - return abc.class_info.get(classIndex).static_traits.traits.size() + index; - } + return abc.getGlobalTraitId(type, isStatic, classIndex, index); } public String toStringName() { - if (type == Type.INITIALIZER) { + if (type == TraitType.INITIALIZER) { if (!isStatic) { return "__" + STR_INSTANCE_INITIALIZER; } else { return "__" + STR_CLASS_INITIALIZER; } } - if (type == Type.SCRIPT_INITIALIZER) { + if (type == TraitType.SCRIPT_INITIALIZER) { return "__" + STR_SCRIPT_INITIALIZER; } if (isStatic) { @@ -105,9 +89,9 @@ public class TraitsListItem { public String toString() { String s = ""; try { - if (type == Type.SCRIPT_INITIALIZER) { + if (type == TraitType.SCRIPT_INITIALIZER) { s = STR_SCRIPT_INITIALIZER; - } else if (type == Type.INITIALIZER) { + } else if (type == TraitType.INITIALIZER) { if (!isStatic) { s = STR_INSTANCE_INITIALIZER; } else { @@ -135,7 +119,7 @@ public class TraitsListItem { return s; } - public Type getType() { + public TraitType getType() { return type; } @@ -143,25 +127,11 @@ public class TraitsListItem { return isStatic; } - public enum Type { - METHOD, - VAR, - CONST, - INITIALIZER, - SCRIPT_INITIALIZER; + public int getClassIndex() { + return classIndex; + } - public static Type getTypeForTrait(Trait t) { - if (t instanceof TraitMethodGetterSetter) { - return METHOD; - } - if (t instanceof TraitSlotConst) { - if (((TraitSlotConst) t).isConst()) { - return CONST; - } else { - return VAR; - } - } - return null; - } + public int getIndex() { + return index; } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java index 3780bca55..626bfe782 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListModel.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui.abc; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; import com.jpexs.decompiler.flash.configuration.Configuration; import java.util.ArrayList; import java.util.Collections; @@ -58,24 +59,26 @@ public final class TraitsListModel implements ListModel { if (classIndex > -1) { List traits = abc.class_info.get(classIndex).static_traits.traits; for (int t = 0; t < traits.size(); t++) { - if (traits.get(t).isVisible(true, abc)) { - items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, true, abc, classIndex, scriptIndex)); + Trait trait = traits.get(t); + if (trait.isVisible(true, abc)) { + items.add(new TraitsListItem(TraitType.getTypeForTrait(trait), t, true, abc, classIndex, scriptIndex)); } } traits = abc.instance_info.get(classIndex).instance_traits.traits; for (int t = 0; t < traits.size(); t++) { - if (traits.get(t).isVisible(false, abc)) { - items.add(new TraitsListItem(TraitsListItem.Type.getTypeForTrait(traits.get(t)), t, false, abc, classIndex, scriptIndex)); + Trait trait = traits.get(t); + if (trait.isVisible(false, abc)) { + items.add(new TraitsListItem(TraitType.getTypeForTrait(trait), t, false, abc, classIndex, scriptIndex)); } } - items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, false, abc, classIndex, scriptIndex)); - items.add(new TraitsListItem(TraitsListItem.Type.INITIALIZER, 0, true, abc, classIndex, scriptIndex)); + items.add(new TraitsListItem(TraitType.INITIALIZER, 0, false, abc, classIndex, scriptIndex)); + items.add(new TraitsListItem(TraitType.INITIALIZER, 0, true, abc, classIndex, scriptIndex)); } if (Configuration.enableScriptInitializerDisplay.get()) { - items.add(new TraitsListItem(TraitsListItem.Type.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex)); + items.add(new TraitsListItem(TraitType.SCRIPT_INITIALIZER, 0, true, abc, classIndex, scriptIndex)); } } diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index c6b0e091f..fcfeee3fa 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -200,9 +200,6 @@ info.selecttrait = Select class and click a trait in Actionscript source to edit button.viewgraph = View Graph button.viewhex = View Hex -abc.traitslist.instanceinitializer = instance initializer -abc.traitslist.classinitializer = class initializer - action.edit.experimental = (Experimental) message.action.saved = Code successfully saved @@ -631,7 +628,6 @@ error.image.alpha.invalid = Invalid alpha channel data. #after version 6.0.2 contextmenu.saveUncompressedToFile = Save to Uncompressed File -abc.traitslist.scriptinitializer = script initializer menu.settings.autoOpenLoadedSWFs = Open loaded SWFs while playing #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties index 24e3269bf..32e16a0a6 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ca.properties @@ -200,9 +200,6 @@ info.selecttrait = Selecciona una classe i fes clic sobre un tret al codi font d button.viewgraph = Visualitza Gr\u00e0fica button.viewhex = Visualitza Hex -abc.traitslist.instanceinitializer = inicialitzador d'inst\u00e0ncia -abc.traitslist.classinitializer = inicialitzador de classe - action.edit.experimental = (Experimental) message.action.saved = El codi s'ha desat correctament @@ -631,7 +628,6 @@ error.image.alpha.invalid = Dades inv\u00e0lides del canal alfa. #after version 6.0.2 contextmenu.saveUncompressedToFile = Desa a un Fitxer No Comprimit -abc.traitslist.scriptinitializer = iniciador del script menu.settings.autoOpenLoadedSWFs = Obre els SWFs carregats mentre es reprodueixen #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties index 057ffa238..26748160c 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_cs.properties @@ -198,9 +198,6 @@ info.selecttrait = Vyberte t\u0159\u00eddu a klikn\u011bte na vlastnost v zdrojo button.viewgraph = Zobrazit Graf button.viewhex = Zobrazit Hex -abc.traitslist.instanceinitializer = inicializ\u00e1tor instance -abc.traitslist.classinitializer = inicializ\u00e1tor t\u0159\u00eddy - action.edit.experimental = (Experiment\u00e1ln\u00ed) message.action.saved = K\u00f3d \u00fasp\u011b\u0161n\u011b ulo\u017een @@ -626,7 +623,6 @@ error.image.alpha.invalid = Neplatn\u00e1 data alpha kan\u00e1lu. #after version 6.0.2 contextmenu.saveUncompressedToFile = Ulo\u017eit nekomprimovan\u011b -abc.traitslist.scriptinitializer = inicializ\u00e1tor skriptu menu.settings.autoOpenLoadedSWFs = Otev\u00edrat na\u010d\u00edtan\u00e1 SWF b\u011bhem p\u0159ehr\u00e1v\u00e1n\u00ed #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties index ac4fc6197..346d83cd8 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_de.properties @@ -198,9 +198,6 @@ info.selecttrait = W\u00e4hlen Sie eine Klasse aus und klicken Sie einen Trait i button.viewgraph = Flowchart Graph button.viewhex = Hexdata dump -abc.traitslist.instanceinitializer = Instanzen-Initialisierer -abc.traitslist.classinitializer = Klassen-Initialisierer - action.edit.experimental = (Experimentell) message.action.saved = Code erfolgreich gespeichert diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties index 761277e4a..f627def81 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_es.properties @@ -198,9 +198,6 @@ info.selecttrait = Seleccione la clase y clickee un atributo en el c\u00f3digo A button.viewgraph = Ver grafo button.viewhex = Ver en hexa -abc.traitslist.instanceinitializer = inicializador de instancia -abc.traitslist.classinitializer = inicializador de clase - action.edit.experimental = (Experimental) message.action.saved = C\u00f3digo guardado exitosamente @@ -629,7 +626,6 @@ error.image.alpha.invalid = Datos de canal alpha no v\u00e1lidos #after version 6.0.2 contextmenu.saveUncompressedToFile = Guardar en archivo no comprimido -abc.traitslist.scriptinitializer = inicializador de script menu.settings.autoOpenLoadedSWFs = Abrir los SWFs cargados mientras se reproducen #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties index 10419f9e0..f4916c1e0 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_fr.properties @@ -198,9 +198,6 @@ info.selecttrait = S\u00e9lectionnez la classe et cliquez sur une caract\u00e9ri button.viewgraph = Afficher le Graphique button.viewhex = Afficher le code Hexad\u00e9cimal -abc.traitslist.instanceinitializer = instance d'initialisation -abc.traitslist.classinitializer = classe d'initialisation - action.edit.experimental = (Exp\u00e9rimental) message.action.saved = Le code a \u00e9t\u00e9 enregistr\u00e9 avec succ\u00e8s @@ -629,7 +626,6 @@ error.image.alpha.invalid = Les donn\u00e9es du canal alpha est invalide. #after version 6.0.2 contextmenu.saveUncompressedToFile = Enregistrer dans un fichier d\u00e9compress\u00e9 -abc.traitslist.scriptinitializer = Initialisateur de script menu.settings.autoOpenLoadedSWFs = Ouvrir les SWF charg\u00e9s lors de la lecture #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties index 8f3cd7abc..a3f216f87 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_hu.properties @@ -198,9 +198,6 @@ info.selecttrait = V\u00e1lasszon ki egy oszt\u00e1lyt \u00e9s kattintson egy je button.viewgraph = Gr\u00e1f mutat\u00e1sa button.viewhex = Hexa mutat\u00e1sa -abc.traitslist.instanceinitializer = p\u00e9ld\u00e1ny inicializ\u00e1l\u00f3 -abc.traitslist.classinitializer = oszt\u00e1ly inicializ\u00e1l\u00f3 - action.edit.experimental = (K\u00eds\u00e9rleti) message.action.saved = K\u00f3d sikeresen lementve @@ -628,7 +625,6 @@ error.image.alpha.invalid = \u00c9rv\u00e9nytelen alfa csatorna adat. #after version 6.0.2 contextmenu.saveUncompressedToFile = Ment\u00e9s t\u00f6m\u00f6r\u00edtett f\u00e1jlba -abc.traitslist.scriptinitializer = szkript inicializ\u00e1l\u00f3 menu.settings.autoOpenLoadedSWFs = SWF-ek megnyit\u00e1sa lej\u00e1tsz\u00e1s k\u00f6zben #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties index d37651c6e..ea9de778a 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_it.properties @@ -199,9 +199,6 @@ info.selecttrait = Selezionare una classe e fare clic su un trait nel sorgente A button.viewgraph = Visualizza grafo button.viewhex = Visualizza listato -abc.traitslist.instanceinitializer = instance initializer -abc.traitslist.classinitializer = class initializer - action.edit.experimental = (Sperimentale) message.action.saved = Codice salvato con successo @@ -629,7 +626,6 @@ error.image.alpha.invalid = Valori canale alfa non validi. #after version 6.0.2 contextmenu.saveUncompressedToFile = Salva su file senza compressione -abc.traitslist.scriptinitializer = Inizializzatore script menu.settings.autoOpenLoadedSWFs = Apri SWF caricati durante la riproduzione #after version 6.1.1 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_nl.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_nl.properties index eb008820e..623c87fb0 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_nl.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_nl.properties @@ -198,9 +198,6 @@ info.selecttrait = Selecteer de klas en klik op een karaktertrek in Actionscript button.viewgraph = Graaf bekijken button.viewhex = Hex bekijken -abc.traitslist.instanceinitializer = instantie initialiseerder -abc.traitslist.classinitializer = klasse initialiseerder - action.edit.experimental = (Experimenteel) message.action.saved = Code is succesvol opgeslagen diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties index 57cd74b8f..43498f993 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pl.properties @@ -198,9 +198,6 @@ info.selecttrait = Wybierz klas\u0119 i kliknij cech\u0119 w \u017ar\u00f3dle ko button.viewgraph = Poka\u017c Wykres button.viewhex = Poka\u017c Hex -abc.traitslist.instanceinitializer = inicjator instancji -abc.traitslist.classinitializer = inicjator klasy - action.edit.experimental = (Eksperymentalne) message.action.saved = Kod pomy\u015blnie zapisano diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt.properties index c4d522882..01cfd7e17 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt.properties @@ -198,9 +198,6 @@ info.selecttrait = Selecione uma classe e click em um atributo no ActionScript p button.viewgraph = Ver Grafico button.viewhex = Ver Hex -abc.traitslist.instanceinitializer = inicializador de instancias -abc.traitslist.classinitializer = inicializador de classes - action.edit.experimental = (Experimental) message.action.saved = C\u00f3digo salvo com sucesso diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties index 8233ba523..8655a264c 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_pt_BR.properties @@ -198,9 +198,6 @@ info.selecttrait = Selecione uma classe e click em um atributo no ActionScript p button.viewgraph = Ver Grafico button.viewhex = Ver Hex -abc.traitslist.instanceinitializer = inicializador de instancias -abc.traitslist.classinitializer = inicializador de classes - action.edit.experimental = (Experimental) message.action.saved = C\u00f3digo salvo com sucesso diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties index a8f96637c..85f827df2 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_ru.properties @@ -198,9 +198,6 @@ info.selecttrait = \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043b button.viewgraph = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0413\u0440\u0430\u0444\u0430 button.viewhex = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 Hex -abc.traitslist.instanceinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 -abc.traitslist.classinitializer = \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 - action.edit.experimental = (\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e) message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties index 10a5c5afd..14e2b939c 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_sv.properties @@ -198,9 +198,6 @@ info.selecttrait = V\u00e4lj klass och klicka p\u00e5 en egenskap i Actionskript button.viewgraph = Visa Diagram button.viewhex = Visa Hex -abc.traitslist.instanceinitializer = instans initierare -abc.traitslist.classinitializer = klass initierare - action.edit.experimental = (experimentellt) message.action.saved = Koden har sparats diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_uk.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_uk.properties index 2ddf7f571..ce082ee94 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_uk.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_uk.properties @@ -198,9 +198,6 @@ info.selecttrait = \u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043a\u043b button.viewgraph = \u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 \u0413\u0440\u0430\u0444\u0430 button.viewhex = \u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434 Hex -abc.traitslist.instanceinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043e\u0431'\u0454\u043a\u0442\u0430 -abc.traitslist.classinitializer = \u0456\u043d\u0456\u0446\u0456\u0430\u043b\u0456\u0437\u0430\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0443 - action.edit.experimental = (\u0415\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e) message.action.saved = \u041a\u043e\u0434 \u0443\u0441\u043f\u0456\u0448\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties index baa2e5fbb..811de2324 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -198,9 +198,6 @@ info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\ button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 -abc.traitslist.instanceinitializer = \u521d\u59cb\u5316\u5b9e\u4f8b -abc.traitslist.classinitializer = \u521d\u59cb\u5316\u7c7b - action.edit.experimental = (\u5b9e\u9a8c\u7684) message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f @@ -629,7 +626,6 @@ error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3 #after version 6.0.2 contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 -abc.traitslist.scriptinitializer = \u521d\u59cb\u5316\u811a\u672c menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e #after version 6.1.1 From fc4f5523543495a261b7e5ad03adcd34a7761f0a Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 27 Dec 2016 20:48:35 +0100 Subject: [PATCH 011/114] pcode search fix (jump from result list) when there are multipe classes in a scriptpack --- .../com/jpexs/decompiler/flash/search/ABCSearchResult.java | 4 ++++ src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java | 1 + 2 files changed, 5 insertions(+) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java index 9b1b5ac63..5ca608510 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java @@ -63,6 +63,10 @@ public class ABCSearchResult { return pcode; } + public int getClassIndex() { + return classIndex; + } + public int getTraitId() { return traitId; } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 298eac3fa..cc5fcf3bf 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1252,6 +1252,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener Date: Tue, 27 Dec 2016 21:00:41 +0100 Subject: [PATCH 012/114] test build error --- src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index cc5fcf3bf..134dcabd4 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1252,7 +1252,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener Date: Tue, 27 Dec 2016 21:04:14 +0100 Subject: [PATCH 013/114] build fix --- src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 134dcabd4..cc5fcf3bf 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1252,8 +1252,7 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener Date: Tue, 27 Dec 2016 21:13:02 +0100 Subject: [PATCH 014/114] email notifications about failed builds --- .travis.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index daa8978d8..1d964aeb7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,13 @@ -language: java -jdk: [oraclejdk8] -before_install: - - sudo chmod a+x ./travis/*.sh - - ./travis/before_install.sh -install: ./travis/install.sh -script: ./travis/script.sh +language: java +jdk: [oraclejdk8] +before_install: + - sudo chmod a+x ./travis/*.sh + - ./travis/before_install.sh +install: ./travis/install.sh +script: ./travis/script.sh +notifications: + email: + recipients: + - developers@free-decompiler.com + on_success: change + on_failure: always \ No newline at end of file From 725ecedb8263dea8d31209f5d0dbfab6418f57cc Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 27 Dec 2016 22:28:06 +0100 Subject: [PATCH 015/114] pcode search fix: method names --- .../jpexs/decompiler/flash/search/ABCSearchResult.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java index 5ca608510..a82d9bc98 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/search/ABCSearchResult.java @@ -90,14 +90,14 @@ public class ABCSearchResult { ABC abc = scriptPack.abc; - int instanceTraitCount = abc.instance_info.get(classIndex).instance_traits.traits.size(); - boolean isStatic = traitId >= instanceTraitCount; + int staticTraitCount = abc.class_info.get(classIndex).static_traits.traits.size(); + boolean isStatic = traitId < staticTraitCount; if (isStatic) { - int index = traitId - instanceTraitCount; - return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + return abc.class_info.get(classIndex).static_traits.traits.get(traitId).getName(abc).getName(abc.constants, null, false, true); } else { - return abc.instance_info.get(classIndex).instance_traits.traits.get(traitId).getName(abc).getName(abc.constants, null, false, true); + int index = traitId - staticTraitCount; + return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); } } From 5b0bd1f0c5ddbc557bd19aa2a86e417cadd3ec7c Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 28 Dec 2016 11:21:13 +0100 Subject: [PATCH 016/114] UI thread invoke fixes/improvements --- .../flash/gui/AdvancedSettingsDialog.java | 21 +- .../flash/gui/LoadFromMemoryFrame.java | 3 +- src/com/jpexs/decompiler/flash/gui/Main.java | 25 +- .../decompiler/flash/gui/MainFrameMenu.java | 2660 +++++++++-------- .../jpexs/decompiler/flash/gui/MainPanel.java | 88 +- .../decompiler/flash/gui/SearchPanel.java | 14 +- .../flash/gui/SearchResultsDialog.java | 4 +- .../flash/gui/SelectLanguageDialog.java | 10 +- .../jpexs/decompiler/flash/gui/TextPanel.java | 8 +- src/com/jpexs/decompiler/flash/gui/View.java | 6 + .../decompiler/flash/gui/abc/ABCPanel.java | 90 +- .../decompiler/flash/gui/abc/UsageFrame.java | 2 + .../flash/gui/action/ActionPanel.java | 48 +- .../flash/gui/pipes/FirstInstance.java | 12 +- .../flash/gui/proxy/ProxyFrame.java | 4 +- 15 files changed, 1574 insertions(+), 1421 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java index 48b93f8e0..ab24978c6 100644 --- a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java @@ -497,17 +497,16 @@ public class AdvancedSettingsDialog extends AppDialog { } } - private void showRestartConfirmDialod() { + private void showRestartConfirmDialog() { if (View.showConfirmDialog(this, translate("advancedSettings.restartConfirmation"), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - View.execInEventDispatchLater(() -> { - try { - Thread.sleep(1000); - } catch (InterruptedException ex) { - Logger.getLogger(AdvancedSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); - } - SelectLanguageDialog.reloadUi(); - }); + try { + // todo: honfika: why? + Thread.sleep(1000); + } catch (InterruptedException ex) { + Logger.getLogger(AdvancedSettingsDialog.class.getName()).log(Level.SEVERE, null, ex); + } + SelectLanguageDialog.reloadUi(); } } @@ -597,7 +596,7 @@ public class AdvancedSettingsDialog extends AppDialog { Configuration.saveConfig(); setVisible(false); if (modified) { - showRestartConfirmDialod(); + showRestartConfirmDialog(); } } @@ -620,6 +619,6 @@ public class AdvancedSettingsDialog extends AppDialog { } Configuration.saveConfig(); setVisible(false); - showRestartConfirmDialod(); + showRestartConfirmDialog(); } } diff --git a/src/com/jpexs/decompiler/flash/gui/LoadFromMemoryFrame.java b/src/com/jpexs/decompiler/flash/gui/LoadFromMemoryFrame.java index 787a7b81c..b222f969f 100644 --- a/src/com/jpexs/decompiler/flash/gui/LoadFromMemoryFrame.java +++ b/src/com/jpexs/decompiler/flash/gui/LoadFromMemoryFrame.java @@ -115,7 +115,6 @@ public class LoadFromMemoryFrame extends AppFrame { @Override protected List doInBackground() throws Exception { return new SearchInMemory(new SearchInMemoryListener() { - @Override public void publish(Object... chunks) { SelectProcessWorker.this.publish(chunks); @@ -151,6 +150,8 @@ public class LoadFromMemoryFrame extends AppFrame { } private void openSwf() { + View.checkAccess(); + if (foundIs == null) { return; } diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 472ed8156..7c012eff4 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -1220,10 +1220,14 @@ public class Main { } public static OpenFileResult openFile(String swfFile, String fileTitle) { + View.checkAccess(); + return openFile(swfFile, fileTitle, null); } public static OpenFileResult openFile(String swfFile, String fileTitle, Runnable executeAfterOpen) { + View.checkAccess(); + try { File file = new File(swfFile); if (!file.exists()) { @@ -1241,26 +1245,38 @@ public class Main { } public static OpenFileResult openFile(SWFSourceInfo sourceInfo) { + View.checkAccess(); + return openFile(new SWFSourceInfo[]{sourceInfo}); } public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { + View.checkAccess(); + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen); } public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { + View.checkAccess(); + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen, new int[]{reloadIndex}); } public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos) { + View.checkAccess(); + return openFile(newSourceInfos, null); } public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen) { + View.checkAccess(); + return openFile(newSourceInfos, executeAfterOpen, null); } public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { + View.checkAccess(); + if (mainFrame != null && !Configuration.openMultipleFiles.get()) { sourceInfos.clear(); mainFrame.getPanel().closeAll(false); @@ -1292,16 +1308,21 @@ public class Main { } public static void closeFile(SWFList swf) { + View.checkAccess(); + sourceInfos.remove(swf.sourceInfo); mainFrame.getPanel().close(swf); } public static void reloadFile(SWFList swf) { - //mainFrame.getPanel().close(swf); + View.checkAccess(); + openFile(swf.sourceInfo, null, sourceInfos.indexOf(swf.sourceInfo)); } public static boolean closeAll() { + View.checkAccess(); + boolean closeResult = mainFrame.getPanel().closeAll(true); if (closeResult) { sourceInfos.clear(); @@ -1428,6 +1449,8 @@ public class Main { } public static boolean openFileDialog() { + View.checkAccess(); + JFileChooser fc = new JFileChooser(); if (Configuration.openMultipleFiles.get()) { fc.setMultiSelectionEnabled(true); diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 85ba366ee..471aefe2c 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -1,1325 +1,1335 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.debugger.flash.DebuggerCommands; -import com.jpexs.decompiler.flash.ApplicationInfo; -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFBundle; -import com.jpexs.decompiler.flash.SWFSourceInfo; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.configuration.ConfigurationItemChangeListener; -import com.jpexs.decompiler.flash.console.ContextMenuTools; -import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; -import com.jpexs.decompiler.flash.gui.helpers.CheckResources; -import com.jpexs.decompiler.flash.tags.ABCContainerTag; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.utf8.Utf8Helper; -import com.sun.jna.Platform; -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.KeyEventDispatcher; -import java.awt.KeyboardFocusManager; -import java.awt.ScrollPane; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; -import java.awt.event.WindowEvent; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.AbstractButton; -import javax.swing.JComboBox; -import javax.swing.JDialog; -import javax.swing.JEditorPane; -import javax.swing.JFrame; -import javax.swing.JOptionPane; - -/** - * - * @author JPEXS - */ -public abstract class MainFrameMenu implements MenuBuilder { - - private final MainFrame mainFrame; - - private KeyEventDispatcher keyEventDispatcher; - - private SWF swf; - - private ConfigurationItemChangeListener configListenerAutoDeobfuscate; - - private ConfigurationItemChangeListener configListenerSimplifyExpressions; - - private ConfigurationItemChangeListener configListenerInternalFlashViewer; - - private ConfigurationItemChangeListener configListenerParallelSpeedUp; - - private ConfigurationItemChangeListener configListenerDecompile; - - //private ConfigurationItemChangeListener configListenerCacheOnDisk; - private ConfigurationItemChangeListener configListenerGotoMainClassOnStartup; - - private ConfigurationItemChangeListener configListenerAutoRenameIdentifiers; - - private ConfigurationItemChangeListener configListenerAutoOpenLoadedSWFs; - - protected final Map menuHotkeys = new HashMap<>(); - - @Override - public HotKey getMenuHotkey(String path) { - return menuHotkeys.get(path); - } - - protected final Map menuActions = new HashMap<>(); - - public boolean isInternalFlashViewerSelected() { - return isMenuChecked("/settings/internalViewer"); //miInternalViewer.isSelected(); - } - - private final boolean externalFlashPlayerUnavailable; - - public MainFrameMenu(MainFrame mainFrame, boolean externalFlashPlayerUnavailable) { - registerHotKeys(); - this.mainFrame = mainFrame; - this.externalFlashPlayerUnavailable = externalFlashPlayerUnavailable; - } - - protected String translate(String key) { - return mainFrame.translate(key); - } - - protected boolean openActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - Main.openFileDialog(); - return true; - } - - protected boolean saveActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - if (swf != null) { - boolean saved = false; - if (swf.swfList != null && swf.swfList.isBundle()) { - SWFBundle bundle = swf.swfList.bundle; - if (!bundle.isReadOnly()) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - swf.saveTo(baos); - saved = bundle.putSWF(swf.getFileTitle(), new ByteArrayInputStream(baos.toByteArray())); - } catch (IOException ex) { - Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, "Cannot save SWF", ex); - } - } - } else if (swf.binaryData != null) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - swf.saveTo(baos); - swf.binaryData.binaryData = new ByteArrayRange(baos.toByteArray()); - swf.binaryData.setModified(true); - saved = true; - } catch (IOException ex) { - Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, "Cannot save SWF", ex); - } - } else if (swf.getFile() == null) { - saved = saveAs(swf, SaveFileMode.SAVEAS); - } else { - try { - Main.saveFile(swf, swf.getFile()); - saved = true; - } catch (IOException ex) { - Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); - View.showMessageDialog(null, translate("error.file.save"), translate("error"), JOptionPane.ERROR_MESSAGE); - } - } - if (saved) { - swf.clearModified(); - mainFrame.getPanel().refreshTree(swf); - } - - return true; - } - - return false; - } - - protected boolean saveAsActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - if (swf != null) { - if (saveAs(swf, SaveFileMode.SAVEAS)) { - swf.clearModified(); - } - - return true; - } - - return false; - } - - private boolean saveAs(SWF swf, SaveFileMode mode) { - if (Main.saveFileDialog(swf, mode)) { - updateComponents(swf); - return true; - } - return false; - } - - protected void saveAsExeActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - if (swf != null) { - saveAs(swf, SaveFileMode.EXE); - } - } - - protected void closeActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - if (swf == null) { - return; - } - - Main.closeFile(swf.swfList); - } - - protected boolean closeAllActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - if (swf != null) { - return Main.closeAll(); - } - - return false; - } - - protected void importTextActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().importText(swf); - } - - protected void importScriptActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().importScript(swf); - } - - protected void importSymbolClassActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().importSymbolClass(swf); - } - - protected boolean exportAllActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - return export(false); - } - - protected boolean exportSelectedActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return false; - } - - return export(true); - } - - protected boolean export(boolean onlySelected) { - if (swf != null) { - mainFrame.getPanel().export(onlySelected); - return true; - } - - return false; - } - - protected void exportFlaActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().exportFla(swf); - } - - protected void importXmlActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().importSwfXml(); - } - - protected void exportXmlActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().exportSwfXml(); - } - - protected boolean searchActionPerformed(ActionEvent evt) { - return search(evt, null); - } - - protected boolean searchInTextPerformed(ActionEvent evt) { - return search(evt, true); - } - - protected boolean searchInActionPerformed(ActionEvent evt) { - return search(evt, false); - } - - protected boolean search(ActionEvent evt, Boolean searchInText) { - if (swf != null) { - mainFrame.getPanel().searchInActionScriptOrText(searchInText, swf); - return true; - } - - return false; - } - - protected boolean replaceActionPerformed(ActionEvent evt) { - if (swf != null) { - mainFrame.getPanel().replaceText(); - return true; - } - - return false; - } - - protected void showProxyActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - Main.showProxy(); - } - - protected boolean clearLog(ActionEvent evt) { - ErrorLogFrame.getInstance().clearLog(); - return true; - } - - protected void renameOneIdentifier(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().renameOneIdentifier(swf); - } - - protected void renameColliding(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().renameColliding(swf); - } - - protected void renameInvalidIdentifiers(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().renameIdentifiers(swf); - } - - protected void deobfuscationActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - mainFrame.getPanel().deobfuscate(); - } - - protected void setSubLimiter(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - Main.setSubLimiter(selected); - } - - protected void switchDebugger() { - DebuggerTools.switchDebugger(swf); - } - - protected void debuggerShowLogActionPerformed(ActionEvent evt) { - DebuggerTools.debuggerShowLog(); - } - - protected void debuggerInjectLoader(ActionEvent evt) { - DebuggerTools.injectDebugLoader(swf); - refreshDecompiled(); - } - - protected void debuggerReplaceTraceCallsActionPerformed(ActionEvent evt) { - ReplaceTraceDialog rtd = new ReplaceTraceDialog(Configuration.lastDebuggerReplaceFunction.get()); - rtd.setVisible(true); - if (rtd.getValue() != null) { - String fname = rtd.getValue(); - DebuggerTools.replaceTraceCalls(swf, fname); - mainFrame.getPanel().refreshDecompiled(); - Configuration.lastDebuggerReplaceFunction.set(rtd.getValue()); - } - } - - protected void clearRecentFilesActionPerformed(ActionEvent evt) { - Configuration.recentFiles.set(null); - } - - protected void removeNonScripts() { - mainFrame.getPanel().removeNonScripts(swf); - } - - protected void removeExceptSelected() { - mainFrame.getPanel().removeExceptSelected(swf); - } - - protected void refreshDecompiled() { - mainFrame.getPanel().refreshDecompiled(); - } - - protected boolean previousTag(ActionEvent evt) { - return mainFrame.getPanel().previousTag(); - } - - protected boolean nextTag(ActionEvent evt) { - return mainFrame.getPanel().nextTag(); - } - - protected void checkResources() { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - PrintStream stream = new PrintStream(os); - CheckResources.checkResources(stream, null); - final String str = new String(os.toByteArray(), Utf8Helper.charset); - JDialog dialog = new JDialog() { - @Override - public void setVisible(boolean bln) { - setSize(new Dimension(800, 600)); - Container cnt = getContentPane(); - cnt.setLayout(new BorderLayout()); - String[] languages = SelectLanguageDialog.getAvailableLanguages().clone(); - languages[0] = "all"; - JComboBox languagesComboBox = new JComboBox<>(languages); - this.add(languagesComboBox, BorderLayout.NORTH); - ScrollPane scrollPane = new ScrollPane(); - JEditorPane editor = new JEditorPane(); - editor.setEditable(false); - editor.setText(str); - scrollPane.add(editor); - this.add(scrollPane, BorderLayout.CENTER); - this.setModal(true); - View.centerScreen(this); - languagesComboBox.addActionListener((ActionEvent e) -> { - String lang = (String) languagesComboBox.getSelectedItem(); - if (lang.equals("all")) { - lang = null; - } - ByteArrayOutputStream os = new ByteArrayOutputStream(); - try (PrintStream stream = new PrintStream(os, false, "UTF-8")) { - CheckResources.checkResources(stream, lang); - String str = new String(os.toByteArray(), Utf8Helper.charset); - editor.setText(str); - } catch (UnsupportedEncodingException ex) { - // ignore - } - }); - super.setVisible(bln); - } - }; - dialog.setVisible(true); - } - - protected void checkUpdatesActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - if (!Main.checkForUpdates()) { - View.showMessageDialog(null, translate("update.check.nonewversion"), translate("update.check.title"), JOptionPane.INFORMATION_MESSAGE); - } - } - - protected void helpUsActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - String helpUsURL = ApplicationInfo.PROJECT_PAGE + "/help_us.html?utm_source=app&utm_medium=menu&utm_campaign=app"; - if (!View.navigateUrl(helpUsURL)) { - View.showMessageDialog(null, translate("message.helpus").replace("%url%", helpUsURL)); - } - } - - protected void homePageActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - String homePageURL = ApplicationInfo.PROJECT_PAGE + "?utm_source=app&utm_medium=menu&utm_campaign=app"; - if (!View.navigateUrl(homePageURL)) { - View.showMessageDialog(null, translate("message.homepage").replace("%url%", homePageURL)); - } - } - - protected void aboutActionPerformed(ActionEvent evt) { - if (Main.isWorking()) { - return; - } - - Main.about(); - } - - protected boolean reloadActionPerformed(ActionEvent evt) { - if (swf != null) { - if (View.showConfirmDialog(null, translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { - Main.reloadFile(swf.swfList); - } - } - return true; - } - - protected boolean reloadAllActionPerformed(ActionEvent evt) { - if (swf != null) { - if (View.showConfirmDialog(null, translate("message.confirm.reloadAll"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { - Main.reloadApp(); - } - - return true; - } - - Main.reloadApp(); - return true; - } - - protected void advancedSettingsActionPerformed(ActionEvent evt) { - Main.advancedSettings(); - } - - protected void searchMemoryActionPerformed(ActionEvent evt) { - Main.loadFromMemory(); - } - - protected void searchCacheActionPerformed(ActionEvent evt) { - Main.loadFromCache(); - } - - protected void gotoDucumentClassOnStartupActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.gotoMainClassOnStartup.set(selected); - } - - protected void autoOpenLoadedSWFsActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.autoOpenLoadedSWFs.set(selected); - } - - protected void autoRenameIdentifiersActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.autoRenameIdentifiers.set(selected); - } - - /*protected void cacheOnDiskActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.cacheOnDisk.set(selected); - if (selected) { - Cache.setStorageType(Cache.STORAGE_FILES); - } else { - Cache.setStorageType(Cache.STORAGE_MEMORY); - } - }*/ - protected void setLanguageActionPerformed(ActionEvent evt) { - new SelectLanguageDialog().display(); - } - - protected void disableDecompilationActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.decompile.set(!selected); - mainFrame.getPanel().disableDecompilationChanged(); - } - - protected void associateActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - if (selected == ContextMenuTools.isAddedToContextMenu()) { - return; - } - ContextMenuTools.addToContextMenu(selected, false); - - // Update checkbox menuitem accordingly (User can cancel rights elevation) - new Timer().schedule(new TimerTask() { - @Override - public void run() { - button.setSelected(ContextMenuTools.isAddedToContextMenu()); - } - }, 1000); // It takes some time registry change to apply - } - - protected void gotoDucumentClassActionPerformed(ActionEvent evt) { - mainFrame.getPanel().gotoDocumentClass(mainFrame.getPanel().getCurrentSwf()); - } - - protected void parallelSpeedUpActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - String confStr = translate("message.confirm.parallel") + "\r\n"; - if (selected) { - confStr += " " + translate("message.confirm.on"); - } else { - confStr += " " + translate("message.confirm.off"); - } - if (View.showConfirmDialog(null, confStr, translate("message.parallel"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { - Configuration.parallelSpeedUp.set(selected); - } else { - button.setSelected(Configuration.parallelSpeedUp.get()); - } - } - - protected void internalViewerSwitchActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.internalFlashViewer.set(selected); - mainFrame.getPanel().reload(true); - } - - protected void simplifyExpressionsActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - Configuration.simplifyExpressions.set(selected); - mainFrame.getPanel().autoDeobfuscateChanged(); - } - - protected void autoDeobfuscationActionPerformed(ActionEvent evt) { - AbstractButton button = (AbstractButton) evt.getSource(); - boolean selected = button.isSelected(); - - if (View.showConfirmDialog(mainFrame.getPanel(), translate("message.confirm.autodeobfuscate") + "\r\n" + (selected ? translate("message.confirm.on") : translate("message.confirm.off")), translate("message.confirm"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { - Configuration.autoDeobfuscate.set(selected); - mainFrame.getPanel().autoDeobfuscateChanged(); - } else { - button.setSelected(Configuration.autoDeobfuscate.get()); - } - } - - /*protected void deobfuscationMode(ActionEvent evt, int mode) { - Configuration.deobfuscationMode.set(mode); - mainFrame.getPanel().autoDeobfuscateChanged(); - }*/ - protected void exitActionPerformed(ActionEvent evt) { - JFrame frame = (JFrame) mainFrame; - frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); - } - - public void updateComponents() { - updateComponents(swf); - } - - public void updateComponents(SWF swf) { - this.swf = swf; - boolean isRunning = Main.isRunning(); - boolean isDebugRunning = Main.isDebugRunning(); - boolean isDebugPaused = Main.isDebugPaused(); - - boolean isRunningOrDebugging = isRunning || isDebugRunning; - - boolean swfSelected = swf != null; - boolean isWorking = Main.isWorking(); - List abcList = swf != null ? swf.getAbcList() : null; - boolean hasAbc = swfSelected && abcList != null && !abcList.isEmpty(); - boolean hasDebugger = hasAbc && DebuggerTools.hasDebugger(swf); - MainPanel mainPanel = mainFrame.getPanel(); - boolean swfLoaded = mainPanel != null ? !mainPanel.getSwfs().isEmpty() : false; - - setMenuEnabled("_/open", !isWorking); - setMenuEnabled("/file/open", !isWorking); - setMenuEnabled("_/save", swfSelected && !isWorking); - setMenuEnabled("/file/save", swfSelected && !isWorking); - setMenuEnabled("_/saveAs", swfSelected && !isWorking); - setMenuEnabled("/file/saveAs", swfSelected && !isWorking); - setMenuEnabled("/file/saveAsExe", swfSelected && !isWorking); - setMenuEnabled("_/close", swfSelected && !isWorking); - setMenuEnabled("/file/close", swfSelected && !isWorking); - setMenuEnabled("_/closeAll", swfLoaded && !isWorking); - setMenuEnabled("/file/closeAll", swfLoaded && !isWorking); - - setMenuEnabled("/file/export", swfSelected); - setMenuEnabled("_/exportAll", swfSelected && !isWorking); - setMenuEnabled("/file/export/exportAll", swfSelected && !isWorking); - setMenuEnabled("_/exportFla", swfSelected && !isWorking); - setMenuEnabled("/file/export/exportFla", swfSelected && !isWorking); - setMenuEnabled("_/exportSelected", swfSelected && !isWorking); - setMenuEnabled("/file/export/exportSelected", swfSelected && !isWorking); - setMenuEnabled("/file/export/exportXml", swfSelected && !isWorking); - - setMenuEnabled("/file/import", swfSelected); - setMenuEnabled("/file/import/importText", swfSelected && !isWorking); - setMenuEnabled("/file/import/importScript", swfSelected && !isWorking); - setMenuEnabled("/file/import/importSymbolClass", swfSelected && !isWorking); - setMenuEnabled("/file/import/importXml", swfSelected && !isWorking); - - setMenuEnabled("/tools/deobfuscation", swfSelected); - setMenuEnabled("/tools/deobfuscation/renameOneIdentifier", swfSelected && !isWorking); - setMenuEnabled("/tools/deobfuscation/renameInvalidIdentifiers", swfSelected && !isWorking); - setMenuEnabled("/tools/deobfuscation/renameColliding", swfSelected && !isWorking); - setMenuEnabled("/tools/deobfuscation/deobfuscation", hasAbc); - - setMenuEnabled("/tools/search", swfSelected); - setMenuEnabled("/tools/replace", swfSelected); - setMenuEnabled("/tools/timeline", swfSelected); - setMenuEnabled("/tools/showProxy", !isWorking); - - setMenuEnabled("/tools/gotoDocumentClass", hasAbc); - /*setMenuEnabled("/tools/debugger/debuggerSwitch", hasAbc); - setMenuChecked("/tools/debugger/debuggerSwitch", hasDebugger); - setMenuEnabled("/tools/debugger/debuggerReplaceTrace", hasAbc && hasDebugger);*/ - //setMenuEnabled("/tools/debugger/debuggerInjectLoader", hasAbc && hasDebugger); - - setMenuEnabled("_/checkUpdates", !isWorking); - setMenuEnabled("/help/checkUpdates", !isWorking); - setMenuEnabled("/help/helpUs", !isWorking); - setMenuEnabled("/help/homePage", !isWorking); - setMenuEnabled("_/about", !isWorking); - setMenuEnabled("/help/about", !isWorking); - - setMenuEnabled("/file/start/run", swfSelected && !isRunningOrDebugging); - setMenuEnabled("/file/start/debug", swfSelected && !isRunningOrDebugging); - setMenuEnabled("/file/start/debugpcode", swfSelected && !isRunningOrDebugging); - - setMenuEnabled("/file/start/stop", isRunningOrDebugging); - setMenuEnabled("/debugging/debug/stop", isRunningOrDebugging); //same as previous - - setPathVisible("/debugging", isDebugRunning); - setMenuEnabled("/debugging/debug", isDebugRunning); - //setMenuEnabled("/debugging/debug/pause", isDebugRunning); - setMenuEnabled("/debugging/debug/stepOver", isDebugPaused); - setMenuEnabled("/debugging/debug/stepInto", isDebugPaused); - setMenuEnabled("/debugging/debug/stepOut", isDebugPaused); - setMenuEnabled("/debugging/debug/continue", isDebugPaused); - //setMenuEnabled("/debugging/debug/stack", isDebugPaused); - //setMenuEnabled("/debugging/debug/watch", isDebugPaused); - StringBuilder titleBuilder = new StringBuilder(); - titleBuilder.append(ApplicationInfo.applicationVerName); - - if (Configuration.displayFileName.get() && swf != null) { - titleBuilder.append(" - "); - if (swf.swfList != null && swf.swfList.isBundle()) { - titleBuilder.append(swf.swfList.name).append("/"); - } - titleBuilder.append(swf.getFileTitle()); - } - mainFrame.setTitle(titleBuilder.toString()); - } - - private void registerHotKeys() { - - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - manager.addKeyEventDispatcher(keyEventDispatcher = this::dispatchKeyEvent); - } - - public void createMenuBar() { - initMenu(); - - if (supportsAppMenu()) { - addMenuItem("_", null, null, null, 0, null, false, null, false); - addMenuItem("_/open", translate("menu.file.open"), "open32", this::openActionPerformed, PRIORITY_TOP, this::loadRecent, false, null, false); - addMenuItem("_/save", translate("menu.file.save"), "save32", this::saveActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/saveAs", translate("menu.file.saveas"), "saveas32", this::saveAsActionPerformed, PRIORITY_TOP, null, true, null, false); - addSeparator("_"); - addMenuItem("_/exportFla", translate("menu.file.export.fla"), "exportfla32", this::exportFlaActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/exportAll", translate("menu.file.export.all"), "export32", this::exportAllActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/exportSelected", translate("menu.file.export.selection"), "exportsel32", this::exportSelectedActionPerformed, PRIORITY_TOP, null, true, null, false); - addSeparator("_"); - addMenuItem("_/checkUpdates", translate("menu.help.checkupdates"), "update32", this::checkUpdatesActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/about", translate("menu.help.about"), "about32", this::aboutActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/close", translate("menu.file.close"), "close32", this::closeActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/closeAll", translate("menu.file.closeAll"), "closeall32", this::closeAllActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("_/$exit", translate("menu.file.exit"), "exit32", this::exitActionPerformed, PRIORITY_TOP, null, true, null, false); - finishMenu("_"); - } - - addMenuItem("/file", translate("menu.file"), null, null, 0, null, false, null, false); - addMenuItem("/file/open", translate("menu.file.open"), "open32", this::openActionPerformed, PRIORITY_TOP, this::loadRecent, !supportsMenuAction(), new HotKey("CTRL+SHIFT+O"), false); - - if (!supportsMenuAction()) { - addMenuItem("/file/recent", translate("menu.recentFiles"), null, null, 0, this::loadRecent, false, null, false); - finishMenu("/file/recent"); - } else { - finishMenu("/file/open"); - } - - addMenuItem("/file/save", translate("menu.file.save"), "save32", this::saveActionPerformed, PRIORITY_TOP, null, true, new HotKey("CTRL+SHIFT+S"), false); - addMenuItem("/file/saveAs", translate("menu.file.saveas"), "saveas16", this::saveAsActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+A"), false); - addMenuItem("/file/saveAsExe", translate("menu.file.saveasexe"), "saveasexe16", this::saveAsExeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/file/reload", translate("menu.file.reload"), "reload16", this::reloadActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+R"), false); - addMenuItem("/file/reloadAll", translate("menu.file.reloadAll"), "reload16", this::reloadAllActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - - addSeparator("/file"); - - addMenuItem("/file/export", translate("menu.export"), null, null, 0, null, false, null, false); - addMenuItem("/file/export/exportFla", translate("menu.file.export.fla"), "exportfla32", this::exportFlaActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("/file/export/exportXml", translate("menu.file.export.xml"), "exportxml32", this::exportXmlActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/file/export/exportAll", translate("menu.file.export.all"), "export16", this::exportAllActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+E"), false); - addMenuItem("/file/export/exportSelected", translate("menu.file.export.selection"), "exportsel16", this::exportSelectedActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/file/export"); - - addMenuItem("/file/import", translate("menu.import"), null, null, 0, null, false, null, false); - addMenuItem("/file/import/importXml", translate("menu.file.import.xml"), "importxml32", this::importXmlActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("/file/import/importText", translate("menu.file.import.text"), "importtext32", this::importTextActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/file/import/importScript", translate("menu.file.import.script"), "importscript32", this::importScriptActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/file/import/importSymbolClass", translate("menu.file.import.symbolClass"), "importsymbolclass32", this::importSymbolClassActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/file/import"); - - addMenuItem("/file/start", translate("menu.file.start"), null, null, 0, null, false, null, false); - addMenuItem("/file/start/run", translate("menu.file.start.run"), "play32", this::runActionPerformed, PRIORITY_TOP, null, true, new HotKey("F6"), false); - addMenuItem("/file/start/debug", translate("menu.file.start.debug"), "debug32", this::debugActionPerformed, PRIORITY_TOP, null, true, new HotKey("CTRL+F5"), false); - addMenuItem("/file/start/stop", translate("menu.file.start.stop"), "stop32", this::stopActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("/file/start/debugpcode", translate("menu.file.start.debugpcode"), "debug32", this::debugPCodeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/file/start"); - - addMenuItem("/file/view", translate("menu.view"), null, null, 0, null, false, null, false); - addToggleMenuItem("/file/view/viewResources", translate("menu.file.view.resources"), "view", "viewresources16", this::viewResourcesActionPerformed, PRIORITY_MEDIUM, null); - addToggleMenuItem("/file/view/viewHex", translate("menu.file.view.hex"), "view", "viewhex16", this::viewHexActionPerformed, PRIORITY_MEDIUM, null); - finishMenu("/file/view"); - - addSeparator("/file"); - addMenuItem("/file/close", translate("menu.file.close"), "close32", this::closeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/file/closeAll", translate("menu.file.closeAll"), "closeall32", this::closeAllActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+X"), false); - - if (!supportsAppMenu()) { - addSeparator("/file"); - addMenuItem("/file/exit", translate("menu.file.exit"), "exit32", this::exitActionPerformed, PRIORITY_TOP, null, true, null, false); - } - - finishMenu("/file"); - - if (Configuration.dumpView.get()) { - setGroupSelection("view", "/file/view/viewHex"); - } else { - setGroupSelection("view", "/file/view/viewResources"); - } - - /* - menu.file.start = Start - menu.file.start.run = Run - menu.file.start.stop = Stop - menu.file.start.debug = Debug - menu.debugging = Debugging - menu.debugging.debug = Debug - menu.debugging.debug.stop = Stop - menu.debugging.debug.pause = Pause - menu.debugging.debug.stepOver = Step over - menu.debugging.debug.stepInto = Step into - menu.debugging.debug.stepOut = Step out - menu.debugging.debug.continue = Continue - menu.debugging.debug.stack = Stack... - menu.debugging.debug.watch = New watch... - */ - addMenuItem("/debugging", translate("menu.debugging"), null, null, 0, null, false, null, true); - addMenuItem("/debugging/debug", translate("menu.debugging.debug"), null, null, 0, null, false, null, false); - addMenuItem("/debugging/debug/stop", translate("menu.file.start.stop"), "stop32", this::stopActionPerformed, PRIORITY_TOP, null, true, null, false); - //addMenuItem("/debugging/debug/pause", translate("menu.debugging.debug.pause"), "pause32", this::pauseActionPerformed, PRIORITY_TOP, null, true,false); - addMenuItem("/debugging/debug/continue", translate("menu.debugging.debug.continue"), "continue32", this::continueActionPerformed, PRIORITY_TOP, null, true, new HotKey("F5"), false); - addMenuItem("/debugging/debug/stepOver", translate("menu.debugging.debug.stepOver"), "stepover32", this::stepOverActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("F8"), false); - addMenuItem("/debugging/debug/stepInto", translate("menu.debugging.debug.stepInto"), "stepinto32", this::stepIntoActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("F7"), false); - addMenuItem("/debugging/debug/stepOut", translate("menu.debugging.debug.stepOut"), "stepout32", this::stepOutActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+F7"), false); - //addMenuItem("/debugging/debug/stack", translate("menu.debugging.debug.stack"), "stack32", this::stackActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - //addMenuItem("/debugging/debug/watch", translate("menu.debugging.debug.watch"), "watch32", this::watchActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/debugging/debug"); - finishMenu("/debugging"); - - addMenuItem("/tools", translate("menu.tools"), null, null, 0, null, false, null, false); - addMenuItem("/tools/search", translate("menu.tools.search"), "search16", this::searchActionPerformed, PRIORITY_TOP, null, true, null, false); - - addMenuItem("/tools/replace", translate("menu.tools.replace"), "replace32", this::replaceActionPerformed, PRIORITY_TOP, null, true, null, false); - addToggleMenuItem("/tools/timeline", translate("menu.tools.timeline"), null, "timeline32", this::timelineActionPerformed, PRIORITY_TOP, null); - - addMenuItem("/tools/showProxy", translate("menu.tools.proxy"), "proxy16", this::showProxyActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - if (Platform.isWindows()) { - addMenuItem("/tools/searchMemory", translate("menu.tools.searchMemory"), "loadmemory16", this::searchMemoryActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - } - - //addMenuItem("/tools/searchCache", translate("menu.tools.searchCache"), "loadcache16", this::searchCacheActionPerformed, PRIORITY_MEDIUM, null, true, null); - addMenuItem("/tools/deobfuscation", translate("menu.tools.deobfuscation"), "deobfuscate16", null, 0, null, false, null, false); - addMenuItem("/tools/deobfuscation/renameOneIdentifier", translate("menu.tools.deobfuscation.globalrename"), "rename16", this::renameOneIdentifier, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/tools/deobfuscation/renameInvalidIdentifiers", translate("menu.tools.deobfuscation.renameinvalid"), "renameall16", this::renameInvalidIdentifiers, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/tools/deobfuscation/renameColliding", translate("menu.tools.deobfuscation.renameColliding"), "renameall16", this::renameColliding, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/tools/deobfuscation/deobfuscation", translate("menu.tools.deobfuscation.pcode"), "deobfuscate32", this::deobfuscationActionPerformed, PRIORITY_TOP, null, true, null, false); - finishMenu("/tools/deobfuscation"); - - /*addMenuItem("/tools/debugger", translate("menu.debugger"), null, null, 0, null, false, null,false); - addToggleMenuItem("/tools/debugger/debuggerSwitch", translate("menu.debugger.switch"), null, "debugger32", this::debuggerSwitchActionPerformed, PRIORITY_TOP, null,false); - addMenuItem("/tools/debugger/debuggerReplaceTrace", translate("menu.debugger.replacetrace"), "debuggerreplace16", this::debuggerReplaceTraceCallsActionPerformed, PRIORITY_MEDIUM, null, true, null,false); - //addMenuItem("/tools/debugger/debuggerInjectLoader", "Inject Loader", "debuggerreplace16", this::debuggerInjectLoader, PRIORITY_MEDIUM, null, true,false); - addMenuItem("/tools/debugger/debuggerShowLog", translate("menu.debugger.showlog"), "debuggerlog16", this::debuggerShowLogActionPerformed, PRIORITY_MEDIUM, null, true, null,false); - finishMenu("/tools/debugger");*/ - addMenuItem("/tools/gotoDocumentClass", translate("menu.tools.gotoDocumentClass"), "gotomainclass32", this::gotoDucumentClassActionPerformed, PRIORITY_TOP, null, true, null, false); - finishMenu("/tools"); - - //Settings - addMenuItem("/settings", translate("menu.settings"), null, null, 0, null, false, null, false); - - addToggleMenuItem("/settings/autoDeobfuscation", translate("menu.settings.autodeobfuscation"), null, null, this::autoDeobfuscationActionPerformed, 0, null); - addToggleMenuItem("/settings/simplifyExpressions", translate("menu.settings.simplifyExpressions"), null, null, this::simplifyExpressionsActionPerformed, 0, null); - addToggleMenuItem("/settings/internalViewer", translate("menu.settings.internalflashviewer"), null, null, this::internalViewerSwitchActionPerformed, 0, null); - addToggleMenuItem("/settings/parallelSpeedUp", translate("menu.settings.parallelspeedup"), null, null, this::parallelSpeedUpActionPerformed, 0, null); - addToggleMenuItem("/settings/disableDecompilation", translate("menu.settings.disabledecompilation"), null, null, this::disableDecompilationActionPerformed, 0, null); - //addToggleMenuItem("/settings/cacheOnDisk", translate("menu.settings.cacheOnDisk"), null, null, this::cacheOnDiskActionPerformed, 0, null); - addToggleMenuItem("/settings/gotoMainClassOnStartup", translate("menu.settings.gotoMainClassOnStartup"), null, null, this::gotoDucumentClassOnStartupActionPerformed, 0, null); - addToggleMenuItem("/settings/autoRenameIdentifiers", translate("menu.settings.autoRenameIdentifiers"), null, null, this::autoRenameIdentifiersActionPerformed, 0, null); - addToggleMenuItem("/settings/autoOpenLoadedSWFs", translate("menu.settings.autoOpenLoadedSWFs"), null, null, this::autoOpenLoadedSWFsActionPerformed, 0, null); - if (Platform.isWindows()) { - addToggleMenuItem("/settings/associate", translate("menu.settings.addtocontextmenu"), null, null, this::associateActionPerformed, 0, null); - } - - addMenuItem("/settings/language", translate("menu.language"), null, null, 0, null, false, null, false); - addMenuItem("/settings/language/setLanguage", translate("menu.settings.language"), "setlanguage32", this::setLanguageActionPerformed, PRIORITY_TOP, null, true, null, false); - finishMenu("/settings/language"); - - /*addMenuItem("/settings/deobfuscation", translate("menu.deobfuscation"), null, null, 0, null, false,false); - addToggleMenuItem("/settings/deobfuscation/old", translate("menu.file.deobfuscation.old"), "deobfuscation", "deobfuscateold16", (ActionEvent e) -> { - deobfuscationMode(e, 0); - }, 0); - addToggleMenuItem("/settings/deobfuscation/new", translate("menu.file.deobfuscation.new"), "deobfuscation", "deobfuscatenew16", (ActionEvent e) -> { - deobfuscationMode(e, 1); - }, 0); - - finishMenu("/settings/deobfuscation");*/ - addMenuItem("/settings/advancedSettings", translate("menu.advancedsettings.advancedsettings"), null, null, 0, null, false, null, false); - addMenuItem("/settings/advancedSettings/advancedSettings", translate("menu.advancedsettings.advancedsettings"), "settings32", this::advancedSettingsActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("/settings/advancedSettings/clearRecentFiles", translate("menu.tools.otherTools.clearRecentFiles"), "clearrecent16", this::clearRecentFilesActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/settings/advancedSettings"); - - finishMenu("/settings"); - - setMenuChecked("/settings/autoDeobfuscation", Configuration.autoDeobfuscate.get()); - Configuration.autoDeobfuscate.addListener(configListenerAutoDeobfuscate = (Boolean newValue) -> { - setMenuChecked("/settings/autoDeobfuscation", newValue); - }); - - setMenuChecked("/settings/simplifyExpressions", Configuration.simplifyExpressions.get()); - Configuration.simplifyExpressions.addListener(configListenerSimplifyExpressions = (Boolean newValue) -> { - setMenuChecked("/settings/simplifyExpressions", newValue); - }); - - setMenuChecked("/settings/internalViewer", Configuration.internalFlashViewer.get() || externalFlashPlayerUnavailable); - Configuration.internalFlashViewer.addListener(configListenerInternalFlashViewer = (Boolean newValue) -> { - setMenuChecked("/settings/internalViewer", newValue || externalFlashPlayerUnavailable); - }); - - setMenuChecked("/settings/parallelSpeedUp", Configuration.parallelSpeedUp.get()); - Configuration.parallelSpeedUp.addListener(configListenerParallelSpeedUp = (Boolean newValue) -> { - setMenuChecked("/settings/parallelSpeedUp", newValue); - }); - - setMenuChecked("/settings/disableDecompilation", !Configuration.decompile.get()); - Configuration.decompile.addListener(configListenerDecompile = (Boolean newValue) -> { - setMenuChecked("/settings/disableDecompilation", !newValue); - }); - - /*setMenuChecked("/settings/cacheOnDisk", Configuration.cacheOnDisk.get()); - Configuration.cacheOnDisk.addListener(configListenerCacheOnDisk = (Boolean newValue) -> { - setMenuChecked("/settings/cacheOnDisk", newValue); - });*/ - setMenuChecked("/settings/gotoMainClassOnStartup", Configuration.gotoMainClassOnStartup.get()); - Configuration.gotoMainClassOnStartup.addListener(configListenerGotoMainClassOnStartup = (Boolean newValue) -> { - setMenuChecked("/settings/gotoMainClassOnStartup", newValue); - }); - - setMenuChecked("/settings/autoRenameIdentifiers", Configuration.autoRenameIdentifiers.get()); - Configuration.autoRenameIdentifiers.addListener(configListenerAutoRenameIdentifiers = (Boolean newValue) -> { - setMenuChecked("/settings/autoRenameIdentifiers", newValue); - }); - - setMenuChecked("/settings/autoOpenLoadedSWFs", Configuration.autoOpenLoadedSWFs.get()); - Configuration.autoOpenLoadedSWFs.addListener(configListenerAutoOpenLoadedSWFs = (Boolean newValue) -> { - setMenuChecked("/settings/autoOpenLoadedSWFs", newValue); - }); - - if (externalFlashPlayerUnavailable) { - setMenuEnabled("/settings/internalViewer", false); - setMenuEnabled("/settings/autoOpenLoadedSWFs", false); - } - - /*int deobfuscationMode = Configuration.deobfuscationMode.get(); - switch (deobfuscationMode) { - case 0: - setGroupSelection("deobfuscation", "/settings/deobfuscation/old"); - break; - case 1: - setGroupSelection("deobfuscation", "/settings/deobfuscation/new"); - break; - }*/ - if (Platform.isWindows()) { - setMenuChecked("/settings/associate", ContextMenuTools.isAddedToContextMenu()); - } - - //Help - addMenuItem("/help", translate("menu.help"), null, null, 0, null, false, null, false); - addMenuItem("/help/helpUs", translate("menu.help.helpus"), "donate32", this::helpUsActionPerformed, PRIORITY_TOP, null, true, null, false); - addMenuItem("/help/homePage", translate("menu.help.homepage"), "homepage16", this::homePageActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addSeparator("/help"); - addMenuItem("/help/checkUpdates", translate("menu.help.checkupdates"), "update16", this::checkUpdatesActionPerformed, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/help/about", translate("menu.help.about"), "about32", this::aboutActionPerformed, PRIORITY_TOP, null, true, null, false); - finishMenu("/help"); - - if (Configuration._showDebugMenu.get() || Configuration._debugMode.get()) { - - addMenuItem("/debug", "# FFDec Debug #", null, null, 0, null, false, null, false); - addMenuItem("/debug/removeNonScripts", "Remove non scripts", "continue16", e -> removeNonScripts(), PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/removeExceptSelected", "Remove except selected", "continue16", e -> removeExceptSelected(), PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/refreshDecompiled", "Refresh decompiled script", "continue16", e -> refreshDecompiled(), PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/checkResources", "Check resources", "continue16", e -> checkResources(), PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/callGc", "Call System.gc()", "continue16", e -> System.gc(), PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/emptyCache", "Empty cache", "continue16", e -> { - SWF nswf = mainFrame.getPanel().getCurrentSwf(); - if (nswf != null) { - nswf.clearAllCache(); - } - }, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/memoryInformation", "Memory information", "continue16", e -> { - String architecture = System.getProperty("sun.arch.data.model"); - Runtime runtime = Runtime.getRuntime(); - String info = "Architecture: " + architecture + Helper.newLine - + "Jre 64bit: " + Helper.is64BitJre() + Helper.newLine - + "Os 64bit: " + Helper.is64BitOs() + Helper.newLine - + "Max: " + (runtime.maxMemory() / 1024 / 1024) + "MB" + Helper.newLine - + "Used: " + (runtime.totalMemory() / 1024 / 1024) + "MB" + Helper.newLine - + "Free: " + (runtime.freeMemory() / 1024 / 1024) + "MB"; - View.showMessageDialog(null, info); - SWF nswf = mainFrame.getPanel().getCurrentSwf(); - if (nswf != null) { - nswf.clearAllCache(); - } - }, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/fixAs3Code", "Fix AS3 code", "continue16", e -> { - SWF nswf = mainFrame.getPanel().getCurrentSwf(); - if (nswf != null) { - nswf.fixAS3Code(); - } - }, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/openTestSwfs", "Open test SWFs", "continue16", e -> { - String path; - - SWFSourceInfo[] sourceInfos = new SWFSourceInfo[2]; - String mainPath = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(); - path = mainPath + "\\..\\..\\libsrc\\ffdec_lib\\testdata\\as2\\as2.swf"; - sourceInfos[0] = new SWFSourceInfo(null, path, null); - path = mainPath + "\\..\\..\\libsrc\\ffdec_lib\\testdata\\as3\\as3.swf"; - sourceInfos[1] = new SWFSourceInfo(null, path, null); - Main.openFile(sourceInfos); - }, PRIORITY_MEDIUM, null, true, null, false); - addMenuItem("/debug/createNewSwf", "Create new SWF", "continue16", e -> { - SWF swf = new SWF(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - swf.saveTo(baos); - } catch (IOException ex) { - Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); - } - - Main.openFile(new SWFSourceInfo(new ByteArrayInputStream(baos.toByteArray()), "New SWF", "New SWF")); - }, PRIORITY_MEDIUM, null, true, null, false); - finishMenu("/debug"); - } - - finishMenu(""); - } - - public void showResourcesView() { - viewResourcesActionPerformed(null); - } - - private void viewResourcesActionPerformed(ActionEvent evt) { - Configuration.dumpView.set(false); - mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES); - setGroupSelection("view", "/file/view/viewResources"); - setMenuChecked("/tools/timeline", false); - } - - private void viewHexActionPerformed(ActionEvent evt) { - Configuration.dumpView.set(true); - MainPanel mainPanel = mainFrame.getPanel(); - if (mainPanel.isModified()) { - View.showMessageDialog(null, translate("message.warning.hexViewNotUpToDate"), translate("message.warning"), JOptionPane.WARNING_MESSAGE, Configuration.warningHexViewNotUpToDate); - } - - mainPanel.showView(MainPanel.VIEW_DUMP); - setGroupSelection("view", "/file/view/viewHex"); - setMenuChecked("/tools/timeline", false); - } - - private void debuggerSwitchActionPerformed(ActionEvent evt) { - boolean debuggerOn = isMenuChecked("/tools/debugger/debuggerSwitch"); - if (!debuggerOn || View.showConfirmDialog((Component) mainFrame, translate("message.debugger"), translate("dialog.message.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, Configuration.displayDebuggerInfo, JOptionPane.OK_OPTION) == JOptionPane.OK_OPTION) { - switchDebugger(); - mainFrame.getPanel().refreshDecompiled(); - } else { - setMenuChecked("/tools/debugger/debuggerSwitch", false); - } - setMenuEnabled("/tools/debugger/debuggerReplaceTrace", isMenuChecked("/tools/debugger/debuggerSwitch")); - //setMenuEnabled("/tools/debugger/debuggerInjectLoader", isMenuChecked("/tools/debugger/debuggerSwitch")); - } - - private void timelineActionPerformed(ActionEvent evt) { - if (isMenuChecked("/tools/timeline")) { - if (!mainFrame.getPanel().showView(MainPanel.VIEW_TIMELINE)) { - setMenuChecked("/tools/timeline", false); - } else { - setGroupSelection("view", null); - } - } else if (Configuration.dumpView.get()) { - setGroupSelection("view", "/file/view/viewHex"); - mainFrame.getPanel().showView(MainPanel.VIEW_DUMP); - } else { - setGroupSelection("view", "/file/view/viewResources"); - mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES); - } - } - - protected void loadRecent(ActionEvent evt) { - List recentFiles = Configuration.getRecentFiles(); - clearMenu("/file/" + (supportsMenuAction() ? "open" : "recent")); - clearMenu("_/open"); - - for (int i = recentFiles.size() - 1; i >= 0; i--) { - final String f = recentFiles.get(i); - ActionListener a = (ActionEvent e) -> { - if (Main.openFile(f, null) == OpenFileResult.NOT_FOUND) { - if (View.showConfirmDialog(null, translate("message.confirm.recentFileNotFound"), translate("message.confirm"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_NO_OPTION) { - Configuration.removeRecentFile(f); - } - } - }; - addMenuItem("/file/" + (supportsMenuAction() ? "open" : "recent") + "/" + i, f, null, a, 0, null, true, null, false); - addMenuItem("_/open/" + i, f, null, a, 0, null, true, null, false); - } - - finishMenu("/file/" + (supportsMenuAction() ? "open" : "recent")); - finishMenu("_/open"); - } - - public void dispose() { - KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - manager.removeKeyEventDispatcher(keyEventDispatcher); - - Configuration.autoDeobfuscate.removeListener(configListenerAutoDeobfuscate); - Configuration.simplifyExpressions.removeListener(configListenerSimplifyExpressions); - Configuration.internalFlashViewer.removeListener(configListenerInternalFlashViewer); - Configuration.parallelSpeedUp.removeListener(configListenerParallelSpeedUp); - Configuration.decompile.removeListener(configListenerDecompile); - //Configuration.cacheOnDisk.removeListener(configListenerCacheOnDisk); - Configuration.gotoMainClassOnStartup.removeListener(configListenerGotoMainClassOnStartup); - Configuration.autoRenameIdentifiers.removeListener(configListenerAutoRenameIdentifiers); - Configuration.autoOpenLoadedSWFs.removeListener(configListenerAutoOpenLoadedSWFs); - - Main.stopRun(); - } - - public boolean runActionPerformed(ActionEvent evt) { - Main.run(swf); - return true; - } - - public boolean debugActionPerformed(ActionEvent evt) { - Main.runDebug(swf, false); - return true; - } - - public boolean debugPCodeActionPerformed(ActionEvent evt) { - Main.runDebug(swf, true); - return true; - } - - public boolean stopActionPerformed(ActionEvent evt) { - Main.stopRun(); - return true; - } - - public boolean pauseActionPerformed(ActionEvent evt) { - try { - DebuggerCommands cmd = Main.getDebugHandler().getCommands(); - //TODO - - } catch (IOException ex) { - Main.getDebugHandler().disconnect(); - //ignore - } - return true; - } - - public boolean stepOverActionPerformed(ActionEvent evt) { - - try { - - DebuggerCommands cmd = Main.getDebugHandler().getCommands(); - mainFrame.getPanel().clearDebuggerColors(); - Main.startWork(AppStrings.translate("work.debugging") + "...", null); - - cmd.stepOver(); - } catch (IOException ex) { - Main.getDebugHandler().disconnect(); - //ignore - } - return true; - } - - public boolean stepIntoActionPerformed(ActionEvent evt) { - try { - DebuggerCommands cmd = Main.getDebugHandler().getCommands(); - mainFrame.getPanel().clearDebuggerColors(); - Main.startWork(AppStrings.translate("work.debugging") + "...", null); - - cmd.stepInto(); - } catch (IOException ex) { - Main.getDebugHandler().disconnect(); - //ignore - } - - return true; - } - - public boolean stepOutActionPerformed(ActionEvent evt) { - try { - DebuggerCommands cmd = Main.getDebugHandler().getCommands(); - mainFrame.getPanel().clearDebuggerColors(); - Main.startWork(AppStrings.translate("work.debugging") + "...", null); - cmd.stepOut(); - } catch (IOException ex) { - Main.getDebugHandler().disconnect(); - //ignore - } - - return true; - } - - public boolean continueActionPerformed(ActionEvent evt) { - try { - DebuggerCommands cmd = Main.getDebugHandler().getCommands(); - mainFrame.getPanel().clearDebuggerColors(); - Main.startWork(AppStrings.translate("work.debugging") + "...", null); - cmd.sendContinue(); - } catch (IOException ex) { - Main.getDebugHandler().disconnect(); - //ignore - } - - return true; - } - - public boolean stackActionPerformed(ActionEvent evt) { - //TODO - return true; - } - - public boolean watchActionPerformed(ActionEvent evt) { - //TODO - return true; - } - - public boolean dispatchKeyEvent(KeyEvent e) { - if (((JFrame) mainFrame).isActive() && e.getID() == KeyEvent.KEY_PRESSED) { - - HotKey ek = new HotKey(e); - for (String path : menuHotkeys.keySet()) { - HotKey mk = menuHotkeys.get(path); - if (ek.equals(mk)) { - if (menuActions.containsKey(path)) { - menuActions.get(path).actionPerformed(null); - return true; - } - } - } - - //other nonmenu actions - int code = e.getKeyCode(); - if (e.isControlDown() && e.isShiftDown()) { //CTRL+SHIFT - switch (code) { - case KeyEvent.VK_F: - return searchInActionPerformed(null); - case KeyEvent.VK_T: - return searchInTextPerformed(null); - case KeyEvent.VK_D: - return clearLog(null); - } - } else if (e.isControlDown() && !e.isShiftDown()) { //CTRL - switch (code) { - case KeyEvent.VK_UP: - return previousTag(null); - case KeyEvent.VK_DOWN: - return nextTag(null); - } - } - } - - return false; - } - - public abstract void hilightPath(String path); - - public abstract void setPathVisible(String path, boolean val); -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.decompiler.flash.ApplicationInfo; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFBundle; +import com.jpexs.decompiler.flash.SWFSourceInfo; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.ConfigurationItemChangeListener; +import com.jpexs.decompiler.flash.console.ContextMenuTools; +import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; +import com.jpexs.decompiler.flash.gui.helpers.CheckResources; +import com.jpexs.decompiler.flash.tags.ABCContainerTag; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.utf8.Utf8Helper; +import com.sun.jna.Platform; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.KeyEventDispatcher; +import java.awt.KeyboardFocusManager; +import java.awt.ScrollPane; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowEvent; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.AbstractButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +/** + * + * @author JPEXS + */ +public abstract class MainFrameMenu implements MenuBuilder { + + private final MainFrame mainFrame; + + private KeyEventDispatcher keyEventDispatcher; + + private SWF swf; + + private ConfigurationItemChangeListener configListenerAutoDeobfuscate; + + private ConfigurationItemChangeListener configListenerSimplifyExpressions; + + private ConfigurationItemChangeListener configListenerInternalFlashViewer; + + private ConfigurationItemChangeListener configListenerParallelSpeedUp; + + private ConfigurationItemChangeListener configListenerDecompile; + + //private ConfigurationItemChangeListener configListenerCacheOnDisk; + private ConfigurationItemChangeListener configListenerGotoMainClassOnStartup; + + private ConfigurationItemChangeListener configListenerAutoRenameIdentifiers; + + private ConfigurationItemChangeListener configListenerAutoOpenLoadedSWFs; + + protected final Map menuHotkeys = new HashMap<>(); + + @Override + public HotKey getMenuHotkey(String path) { + return menuHotkeys.get(path); + } + + protected final Map menuActions = new HashMap<>(); + + public boolean isInternalFlashViewerSelected() { + return isMenuChecked("/settings/internalViewer"); //miInternalViewer.isSelected(); + } + + private final boolean externalFlashPlayerUnavailable; + + public MainFrameMenu(MainFrame mainFrame, boolean externalFlashPlayerUnavailable) { + registerHotKeys(); + this.mainFrame = mainFrame; + this.externalFlashPlayerUnavailable = externalFlashPlayerUnavailable; + } + + protected String translate(String key) { + return mainFrame.translate(key); + } + + protected boolean openActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + Main.openFileDialog(); + return true; + } + + protected boolean saveActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + if (swf != null) { + boolean saved = false; + if (swf.swfList != null && swf.swfList.isBundle()) { + SWFBundle bundle = swf.swfList.bundle; + if (!bundle.isReadOnly()) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + swf.saveTo(baos); + saved = bundle.putSWF(swf.getFileTitle(), new ByteArrayInputStream(baos.toByteArray())); + } catch (IOException ex) { + Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, "Cannot save SWF", ex); + } + } + } else if (swf.binaryData != null) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + swf.saveTo(baos); + swf.binaryData.binaryData = new ByteArrayRange(baos.toByteArray()); + swf.binaryData.setModified(true); + saved = true; + } catch (IOException ex) { + Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, "Cannot save SWF", ex); + } + } else if (swf.getFile() == null) { + saved = saveAs(swf, SaveFileMode.SAVEAS); + } else { + try { + Main.saveFile(swf, swf.getFile()); + saved = true; + } catch (IOException ex) { + Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); + View.showMessageDialog(null, translate("error.file.save"), translate("error"), JOptionPane.ERROR_MESSAGE); + } + } + if (saved) { + swf.clearModified(); + mainFrame.getPanel().refreshTree(swf); + } + + return true; + } + + return false; + } + + protected boolean saveAsActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + if (swf != null) { + if (saveAs(swf, SaveFileMode.SAVEAS)) { + swf.clearModified(); + } + + return true; + } + + return false; + } + + private boolean saveAs(SWF swf, SaveFileMode mode) { + View.checkAccess(); + + if (Main.saveFileDialog(swf, mode)) { + updateComponents(swf); + return true; + } + return false; + } + + protected void saveAsExeActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + if (swf != null) { + saveAs(swf, SaveFileMode.EXE); + } + } + + protected void closeActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + if (swf == null) { + return; + } + + Main.closeFile(swf.swfList); + } + + protected boolean closeAllActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + if (swf != null) { + return Main.closeAll(); + } + + return false; + } + + protected void importTextActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().importText(swf); + } + + protected void importScriptActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().importScript(swf); + } + + protected void importSymbolClassActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().importSymbolClass(swf); + } + + protected boolean exportAllActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + return export(false); + } + + protected boolean exportSelectedActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return false; + } + + return export(true); + } + + protected boolean export(boolean onlySelected) { + View.checkAccess(); + + if (swf != null) { + mainFrame.getPanel().export(onlySelected); + return true; + } + + return false; + } + + protected void exportFlaActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().exportFla(swf); + } + + protected void importXmlActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().importSwfXml(); + } + + protected void exportXmlActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().exportSwfXml(); + } + + protected boolean searchActionPerformed(ActionEvent evt) { + return search(evt, null); + } + + protected boolean searchInTextPerformed(ActionEvent evt) { + return search(evt, true); + } + + protected boolean searchInActionPerformed(ActionEvent evt) { + return search(evt, false); + } + + protected boolean search(ActionEvent evt, Boolean searchInText) { + View.checkAccess(); + + if (swf != null) { + mainFrame.getPanel().searchInActionScriptOrText(searchInText, swf); + return true; + } + + return false; + } + + protected boolean replaceActionPerformed(ActionEvent evt) { + if (swf != null) { + mainFrame.getPanel().replaceText(); + return true; + } + + return false; + } + + protected void showProxyActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + Main.showProxy(); + } + + protected boolean clearLog(ActionEvent evt) { + ErrorLogFrame.getInstance().clearLog(); + return true; + } + + protected void renameOneIdentifier(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().renameOneIdentifier(swf); + } + + protected void renameColliding(ActionEvent evt) { + View.checkAccess(); + + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().renameColliding(swf); + } + + protected void renameInvalidIdentifiers(ActionEvent evt) { + View.checkAccess(); + + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().renameIdentifiers(swf); + } + + protected void deobfuscationActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + mainFrame.getPanel().deobfuscate(); + } + + protected void setSubLimiter(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + Main.setSubLimiter(selected); + } + + protected void switchDebugger() { + DebuggerTools.switchDebugger(swf); + } + + protected void debuggerShowLogActionPerformed(ActionEvent evt) { + DebuggerTools.debuggerShowLog(); + } + + protected void debuggerInjectLoader(ActionEvent evt) { + DebuggerTools.injectDebugLoader(swf); + refreshDecompiled(); + } + + protected void debuggerReplaceTraceCallsActionPerformed(ActionEvent evt) { + ReplaceTraceDialog rtd = new ReplaceTraceDialog(Configuration.lastDebuggerReplaceFunction.get()); + rtd.setVisible(true); + if (rtd.getValue() != null) { + String fname = rtd.getValue(); + DebuggerTools.replaceTraceCalls(swf, fname); + mainFrame.getPanel().refreshDecompiled(); + Configuration.lastDebuggerReplaceFunction.set(rtd.getValue()); + } + } + + protected void clearRecentFilesActionPerformed(ActionEvent evt) { + Configuration.recentFiles.set(null); + } + + protected void removeNonScripts() { + mainFrame.getPanel().removeNonScripts(swf); + } + + protected void removeExceptSelected() { + mainFrame.getPanel().removeExceptSelected(swf); + } + + protected void refreshDecompiled() { + mainFrame.getPanel().refreshDecompiled(); + } + + protected boolean previousTag(ActionEvent evt) { + return mainFrame.getPanel().previousTag(); + } + + protected boolean nextTag(ActionEvent evt) { + return mainFrame.getPanel().nextTag(); + } + + protected void checkResources() { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + PrintStream stream = new PrintStream(os); + CheckResources.checkResources(stream, null); + final String str = new String(os.toByteArray(), Utf8Helper.charset); + JDialog dialog = new JDialog() { + @Override + public void setVisible(boolean bln) { + setSize(new Dimension(800, 600)); + Container cnt = getContentPane(); + cnt.setLayout(new BorderLayout()); + String[] languages = SelectLanguageDialog.getAvailableLanguages().clone(); + languages[0] = "all"; + JComboBox languagesComboBox = new JComboBox<>(languages); + this.add(languagesComboBox, BorderLayout.NORTH); + ScrollPane scrollPane = new ScrollPane(); + JEditorPane editor = new JEditorPane(); + editor.setEditable(false); + editor.setText(str); + scrollPane.add(editor); + this.add(scrollPane, BorderLayout.CENTER); + this.setModal(true); + View.centerScreen(this); + languagesComboBox.addActionListener((ActionEvent e) -> { + String lang = (String) languagesComboBox.getSelectedItem(); + if (lang.equals("all")) { + lang = null; + } + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try (PrintStream stream = new PrintStream(os, false, "UTF-8")) { + CheckResources.checkResources(stream, lang); + String str = new String(os.toByteArray(), Utf8Helper.charset); + editor.setText(str); + } catch (UnsupportedEncodingException ex) { + // ignore + } + }); + super.setVisible(bln); + } + }; + dialog.setVisible(true); + } + + protected void checkUpdatesActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + if (!Main.checkForUpdates()) { + View.showMessageDialog(null, translate("update.check.nonewversion"), translate("update.check.title"), JOptionPane.INFORMATION_MESSAGE); + } + } + + protected void helpUsActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + String helpUsURL = ApplicationInfo.PROJECT_PAGE + "/help_us.html?utm_source=app&utm_medium=menu&utm_campaign=app"; + if (!View.navigateUrl(helpUsURL)) { + View.showMessageDialog(null, translate("message.helpus").replace("%url%", helpUsURL)); + } + } + + protected void homePageActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + String homePageURL = ApplicationInfo.PROJECT_PAGE + "?utm_source=app&utm_medium=menu&utm_campaign=app"; + if (!View.navigateUrl(homePageURL)) { + View.showMessageDialog(null, translate("message.homepage").replace("%url%", homePageURL)); + } + } + + protected void aboutActionPerformed(ActionEvent evt) { + if (Main.isWorking()) { + return; + } + + Main.about(); + } + + protected boolean reloadActionPerformed(ActionEvent evt) { + if (swf != null) { + if (View.showConfirmDialog(null, translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { + Main.reloadFile(swf.swfList); + } + } + return true; + } + + protected boolean reloadAllActionPerformed(ActionEvent evt) { + if (swf != null) { + if (View.showConfirmDialog(null, translate("message.confirm.reloadAll"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { + Main.reloadApp(); + } + + return true; + } + + Main.reloadApp(); + return true; + } + + protected void advancedSettingsActionPerformed(ActionEvent evt) { + Main.advancedSettings(); + } + + protected void searchMemoryActionPerformed(ActionEvent evt) { + Main.loadFromMemory(); + } + + protected void searchCacheActionPerformed(ActionEvent evt) { + Main.loadFromCache(); + } + + protected void gotoDucumentClassOnStartupActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.gotoMainClassOnStartup.set(selected); + } + + protected void autoOpenLoadedSWFsActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.autoOpenLoadedSWFs.set(selected); + } + + protected void autoRenameIdentifiersActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.autoRenameIdentifiers.set(selected); + } + + /*protected void cacheOnDiskActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.cacheOnDisk.set(selected); + if (selected) { + Cache.setStorageType(Cache.STORAGE_FILES); + } else { + Cache.setStorageType(Cache.STORAGE_MEMORY); + } + }*/ + protected void setLanguageActionPerformed(ActionEvent evt) { + new SelectLanguageDialog().display(); + } + + protected void disableDecompilationActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.decompile.set(!selected); + mainFrame.getPanel().disableDecompilationChanged(); + } + + protected void associateActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + if (selected == ContextMenuTools.isAddedToContextMenu()) { + return; + } + ContextMenuTools.addToContextMenu(selected, false); + + // Update checkbox menuitem accordingly (User can cancel rights elevation) + new Timer().schedule(new TimerTask() { + @Override + public void run() { + button.setSelected(ContextMenuTools.isAddedToContextMenu()); + } + }, 1000); // It takes some time registry change to apply + } + + protected void gotoDucumentClassActionPerformed(ActionEvent evt) { + mainFrame.getPanel().gotoDocumentClass(mainFrame.getPanel().getCurrentSwf()); + } + + protected void parallelSpeedUpActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + String confStr = translate("message.confirm.parallel") + "\r\n"; + if (selected) { + confStr += " " + translate("message.confirm.on"); + } else { + confStr += " " + translate("message.confirm.off"); + } + if (View.showConfirmDialog(null, confStr, translate("message.parallel"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { + Configuration.parallelSpeedUp.set(selected); + } else { + button.setSelected(Configuration.parallelSpeedUp.get()); + } + } + + protected void internalViewerSwitchActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.internalFlashViewer.set(selected); + mainFrame.getPanel().reload(true); + } + + protected void simplifyExpressionsActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + Configuration.simplifyExpressions.set(selected); + mainFrame.getPanel().autoDeobfuscateChanged(); + } + + protected void autoDeobfuscationActionPerformed(ActionEvent evt) { + AbstractButton button = (AbstractButton) evt.getSource(); + boolean selected = button.isSelected(); + + if (View.showConfirmDialog(mainFrame.getPanel(), translate("message.confirm.autodeobfuscate") + "\r\n" + (selected ? translate("message.confirm.on") : translate("message.confirm.off")), translate("message.confirm"), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { + Configuration.autoDeobfuscate.set(selected); + mainFrame.getPanel().autoDeobfuscateChanged(); + } else { + button.setSelected(Configuration.autoDeobfuscate.get()); + } + } + + /*protected void deobfuscationMode(ActionEvent evt, int mode) { + Configuration.deobfuscationMode.set(mode); + mainFrame.getPanel().autoDeobfuscateChanged(); + }*/ + protected void exitActionPerformed(ActionEvent evt) { + JFrame frame = (JFrame) mainFrame; + frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); + } + + public void updateComponents() { + updateComponents(swf); + } + + public void updateComponents(SWF swf) { + this.swf = swf; + boolean isRunning = Main.isRunning(); + boolean isDebugRunning = Main.isDebugRunning(); + boolean isDebugPaused = Main.isDebugPaused(); + + boolean isRunningOrDebugging = isRunning || isDebugRunning; + + boolean swfSelected = swf != null; + boolean isWorking = Main.isWorking(); + List abcList = swf != null ? swf.getAbcList() : null; + boolean hasAbc = swfSelected && abcList != null && !abcList.isEmpty(); + boolean hasDebugger = hasAbc && DebuggerTools.hasDebugger(swf); + MainPanel mainPanel = mainFrame.getPanel(); + boolean swfLoaded = mainPanel != null ? !mainPanel.getSwfs().isEmpty() : false; + + setMenuEnabled("_/open", !isWorking); + setMenuEnabled("/file/open", !isWorking); + setMenuEnabled("_/save", swfSelected && !isWorking); + setMenuEnabled("/file/save", swfSelected && !isWorking); + setMenuEnabled("_/saveAs", swfSelected && !isWorking); + setMenuEnabled("/file/saveAs", swfSelected && !isWorking); + setMenuEnabled("/file/saveAsExe", swfSelected && !isWorking); + setMenuEnabled("_/close", swfSelected && !isWorking); + setMenuEnabled("/file/close", swfSelected && !isWorking); + setMenuEnabled("_/closeAll", swfLoaded && !isWorking); + setMenuEnabled("/file/closeAll", swfLoaded && !isWorking); + + setMenuEnabled("/file/export", swfSelected); + setMenuEnabled("_/exportAll", swfSelected && !isWorking); + setMenuEnabled("/file/export/exportAll", swfSelected && !isWorking); + setMenuEnabled("_/exportFla", swfSelected && !isWorking); + setMenuEnabled("/file/export/exportFla", swfSelected && !isWorking); + setMenuEnabled("_/exportSelected", swfSelected && !isWorking); + setMenuEnabled("/file/export/exportSelected", swfSelected && !isWorking); + setMenuEnabled("/file/export/exportXml", swfSelected && !isWorking); + + setMenuEnabled("/file/import", swfSelected); + setMenuEnabled("/file/import/importText", swfSelected && !isWorking); + setMenuEnabled("/file/import/importScript", swfSelected && !isWorking); + setMenuEnabled("/file/import/importSymbolClass", swfSelected && !isWorking); + setMenuEnabled("/file/import/importXml", swfSelected && !isWorking); + + setMenuEnabled("/tools/deobfuscation", swfSelected); + setMenuEnabled("/tools/deobfuscation/renameOneIdentifier", swfSelected && !isWorking); + setMenuEnabled("/tools/deobfuscation/renameInvalidIdentifiers", swfSelected && !isWorking); + setMenuEnabled("/tools/deobfuscation/renameColliding", swfSelected && !isWorking); + setMenuEnabled("/tools/deobfuscation/deobfuscation", hasAbc); + + setMenuEnabled("/tools/search", swfSelected); + setMenuEnabled("/tools/replace", swfSelected); + setMenuEnabled("/tools/timeline", swfSelected); + setMenuEnabled("/tools/showProxy", !isWorking); + + setMenuEnabled("/tools/gotoDocumentClass", hasAbc); + /*setMenuEnabled("/tools/debugger/debuggerSwitch", hasAbc); + setMenuChecked("/tools/debugger/debuggerSwitch", hasDebugger); + setMenuEnabled("/tools/debugger/debuggerReplaceTrace", hasAbc && hasDebugger);*/ + //setMenuEnabled("/tools/debugger/debuggerInjectLoader", hasAbc && hasDebugger); + + setMenuEnabled("_/checkUpdates", !isWorking); + setMenuEnabled("/help/checkUpdates", !isWorking); + setMenuEnabled("/help/helpUs", !isWorking); + setMenuEnabled("/help/homePage", !isWorking); + setMenuEnabled("_/about", !isWorking); + setMenuEnabled("/help/about", !isWorking); + + setMenuEnabled("/file/start/run", swfSelected && !isRunningOrDebugging); + setMenuEnabled("/file/start/debug", swfSelected && !isRunningOrDebugging); + setMenuEnabled("/file/start/debugpcode", swfSelected && !isRunningOrDebugging); + + setMenuEnabled("/file/start/stop", isRunningOrDebugging); + setMenuEnabled("/debugging/debug/stop", isRunningOrDebugging); //same as previous + + setPathVisible("/debugging", isDebugRunning); + setMenuEnabled("/debugging/debug", isDebugRunning); + //setMenuEnabled("/debugging/debug/pause", isDebugRunning); + setMenuEnabled("/debugging/debug/stepOver", isDebugPaused); + setMenuEnabled("/debugging/debug/stepInto", isDebugPaused); + setMenuEnabled("/debugging/debug/stepOut", isDebugPaused); + setMenuEnabled("/debugging/debug/continue", isDebugPaused); + //setMenuEnabled("/debugging/debug/stack", isDebugPaused); + //setMenuEnabled("/debugging/debug/watch", isDebugPaused); + StringBuilder titleBuilder = new StringBuilder(); + titleBuilder.append(ApplicationInfo.applicationVerName); + + if (Configuration.displayFileName.get() && swf != null) { + titleBuilder.append(" - "); + if (swf.swfList != null && swf.swfList.isBundle()) { + titleBuilder.append(swf.swfList.name).append("/"); + } + titleBuilder.append(swf.getFileTitle()); + } + mainFrame.setTitle(titleBuilder.toString()); + } + + private void registerHotKeys() { + + KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + manager.addKeyEventDispatcher(keyEventDispatcher = this::dispatchKeyEvent); + } + + public void createMenuBar() { + initMenu(); + + if (supportsAppMenu()) { + addMenuItem("_", null, null, null, 0, null, false, null, false); + addMenuItem("_/open", translate("menu.file.open"), "open32", this::openActionPerformed, PRIORITY_TOP, this::loadRecent, false, null, false); + addMenuItem("_/save", translate("menu.file.save"), "save32", this::saveActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/saveAs", translate("menu.file.saveas"), "saveas32", this::saveAsActionPerformed, PRIORITY_TOP, null, true, null, false); + addSeparator("_"); + addMenuItem("_/exportFla", translate("menu.file.export.fla"), "exportfla32", this::exportFlaActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/exportAll", translate("menu.file.export.all"), "export32", this::exportAllActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/exportSelected", translate("menu.file.export.selection"), "exportsel32", this::exportSelectedActionPerformed, PRIORITY_TOP, null, true, null, false); + addSeparator("_"); + addMenuItem("_/checkUpdates", translate("menu.help.checkupdates"), "update32", this::checkUpdatesActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/about", translate("menu.help.about"), "about32", this::aboutActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/close", translate("menu.file.close"), "close32", this::closeActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/closeAll", translate("menu.file.closeAll"), "closeall32", this::closeAllActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("_/$exit", translate("menu.file.exit"), "exit32", this::exitActionPerformed, PRIORITY_TOP, null, true, null, false); + finishMenu("_"); + } + + addMenuItem("/file", translate("menu.file"), null, null, 0, null, false, null, false); + addMenuItem("/file/open", translate("menu.file.open"), "open32", this::openActionPerformed, PRIORITY_TOP, this::loadRecent, !supportsMenuAction(), new HotKey("CTRL+SHIFT+O"), false); + + if (!supportsMenuAction()) { + addMenuItem("/file/recent", translate("menu.recentFiles"), null, null, 0, this::loadRecent, false, null, false); + finishMenu("/file/recent"); + } else { + finishMenu("/file/open"); + } + + addMenuItem("/file/save", translate("menu.file.save"), "save32", this::saveActionPerformed, PRIORITY_TOP, null, true, new HotKey("CTRL+SHIFT+S"), false); + addMenuItem("/file/saveAs", translate("menu.file.saveas"), "saveas16", this::saveAsActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+A"), false); + addMenuItem("/file/saveAsExe", translate("menu.file.saveasexe"), "saveasexe16", this::saveAsExeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/file/reload", translate("menu.file.reload"), "reload16", this::reloadActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+R"), false); + addMenuItem("/file/reloadAll", translate("menu.file.reloadAll"), "reload16", this::reloadAllActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + + addSeparator("/file"); + + addMenuItem("/file/export", translate("menu.export"), null, null, 0, null, false, null, false); + addMenuItem("/file/export/exportFla", translate("menu.file.export.fla"), "exportfla32", this::exportFlaActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("/file/export/exportXml", translate("menu.file.export.xml"), "exportxml32", this::exportXmlActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/file/export/exportAll", translate("menu.file.export.all"), "export16", this::exportAllActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+E"), false); + addMenuItem("/file/export/exportSelected", translate("menu.file.export.selection"), "exportsel16", this::exportSelectedActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/file/export"); + + addMenuItem("/file/import", translate("menu.import"), null, null, 0, null, false, null, false); + addMenuItem("/file/import/importXml", translate("menu.file.import.xml"), "importxml32", this::importXmlActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("/file/import/importText", translate("menu.file.import.text"), "importtext32", this::importTextActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/file/import/importScript", translate("menu.file.import.script"), "importscript32", this::importScriptActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/file/import/importSymbolClass", translate("menu.file.import.symbolClass"), "importsymbolclass32", this::importSymbolClassActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/file/import"); + + addMenuItem("/file/start", translate("menu.file.start"), null, null, 0, null, false, null, false); + addMenuItem("/file/start/run", translate("menu.file.start.run"), "play32", this::runActionPerformed, PRIORITY_TOP, null, true, new HotKey("F6"), false); + addMenuItem("/file/start/debug", translate("menu.file.start.debug"), "debug32", this::debugActionPerformed, PRIORITY_TOP, null, true, new HotKey("CTRL+F5"), false); + addMenuItem("/file/start/stop", translate("menu.file.start.stop"), "stop32", this::stopActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("/file/start/debugpcode", translate("menu.file.start.debugpcode"), "debug32", this::debugPCodeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/file/start"); + + addMenuItem("/file/view", translate("menu.view"), null, null, 0, null, false, null, false); + addToggleMenuItem("/file/view/viewResources", translate("menu.file.view.resources"), "view", "viewresources16", this::viewResourcesActionPerformed, PRIORITY_MEDIUM, null); + addToggleMenuItem("/file/view/viewHex", translate("menu.file.view.hex"), "view", "viewhex16", this::viewHexActionPerformed, PRIORITY_MEDIUM, null); + finishMenu("/file/view"); + + addSeparator("/file"); + addMenuItem("/file/close", translate("menu.file.close"), "close32", this::closeActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/file/closeAll", translate("menu.file.closeAll"), "closeall32", this::closeAllActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+SHIFT+X"), false); + + if (!supportsAppMenu()) { + addSeparator("/file"); + addMenuItem("/file/exit", translate("menu.file.exit"), "exit32", this::exitActionPerformed, PRIORITY_TOP, null, true, null, false); + } + + finishMenu("/file"); + + if (Configuration.dumpView.get()) { + setGroupSelection("view", "/file/view/viewHex"); + } else { + setGroupSelection("view", "/file/view/viewResources"); + } + + /* + menu.file.start = Start + menu.file.start.run = Run + menu.file.start.stop = Stop + menu.file.start.debug = Debug + menu.debugging = Debugging + menu.debugging.debug = Debug + menu.debugging.debug.stop = Stop + menu.debugging.debug.pause = Pause + menu.debugging.debug.stepOver = Step over + menu.debugging.debug.stepInto = Step into + menu.debugging.debug.stepOut = Step out + menu.debugging.debug.continue = Continue + menu.debugging.debug.stack = Stack... + menu.debugging.debug.watch = New watch... + */ + addMenuItem("/debugging", translate("menu.debugging"), null, null, 0, null, false, null, true); + addMenuItem("/debugging/debug", translate("menu.debugging.debug"), null, null, 0, null, false, null, false); + addMenuItem("/debugging/debug/stop", translate("menu.file.start.stop"), "stop32", this::stopActionPerformed, PRIORITY_TOP, null, true, null, false); + //addMenuItem("/debugging/debug/pause", translate("menu.debugging.debug.pause"), "pause32", this::pauseActionPerformed, PRIORITY_TOP, null, true,false); + addMenuItem("/debugging/debug/continue", translate("menu.debugging.debug.continue"), "continue32", this::continueActionPerformed, PRIORITY_TOP, null, true, new HotKey("F5"), false); + addMenuItem("/debugging/debug/stepOver", translate("menu.debugging.debug.stepOver"), "stepover32", this::stepOverActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("F8"), false); + addMenuItem("/debugging/debug/stepInto", translate("menu.debugging.debug.stepInto"), "stepinto32", this::stepIntoActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("F7"), false); + addMenuItem("/debugging/debug/stepOut", translate("menu.debugging.debug.stepOut"), "stepout32", this::stepOutActionPerformed, PRIORITY_MEDIUM, null, true, new HotKey("CTRL+F7"), false); + //addMenuItem("/debugging/debug/stack", translate("menu.debugging.debug.stack"), "stack32", this::stackActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + //addMenuItem("/debugging/debug/watch", translate("menu.debugging.debug.watch"), "watch32", this::watchActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/debugging/debug"); + finishMenu("/debugging"); + + addMenuItem("/tools", translate("menu.tools"), null, null, 0, null, false, null, false); + addMenuItem("/tools/search", translate("menu.tools.search"), "search16", this::searchActionPerformed, PRIORITY_TOP, null, true, null, false); + + addMenuItem("/tools/replace", translate("menu.tools.replace"), "replace32", this::replaceActionPerformed, PRIORITY_TOP, null, true, null, false); + addToggleMenuItem("/tools/timeline", translate("menu.tools.timeline"), null, "timeline32", this::timelineActionPerformed, PRIORITY_TOP, null); + + addMenuItem("/tools/showProxy", translate("menu.tools.proxy"), "proxy16", this::showProxyActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + if (Platform.isWindows()) { + addMenuItem("/tools/searchMemory", translate("menu.tools.searchMemory"), "loadmemory16", this::searchMemoryActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + } + + //addMenuItem("/tools/searchCache", translate("menu.tools.searchCache"), "loadcache16", this::searchCacheActionPerformed, PRIORITY_MEDIUM, null, true, null); + addMenuItem("/tools/deobfuscation", translate("menu.tools.deobfuscation"), "deobfuscate16", null, 0, null, false, null, false); + addMenuItem("/tools/deobfuscation/renameOneIdentifier", translate("menu.tools.deobfuscation.globalrename"), "rename16", this::renameOneIdentifier, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/tools/deobfuscation/renameInvalidIdentifiers", translate("menu.tools.deobfuscation.renameinvalid"), "renameall16", this::renameInvalidIdentifiers, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/tools/deobfuscation/renameColliding", translate("menu.tools.deobfuscation.renameColliding"), "renameall16", this::renameColliding, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/tools/deobfuscation/deobfuscation", translate("menu.tools.deobfuscation.pcode"), "deobfuscate32", this::deobfuscationActionPerformed, PRIORITY_TOP, null, true, null, false); + finishMenu("/tools/deobfuscation"); + + /*addMenuItem("/tools/debugger", translate("menu.debugger"), null, null, 0, null, false, null,false); + addToggleMenuItem("/tools/debugger/debuggerSwitch", translate("menu.debugger.switch"), null, "debugger32", this::debuggerSwitchActionPerformed, PRIORITY_TOP, null,false); + addMenuItem("/tools/debugger/debuggerReplaceTrace", translate("menu.debugger.replacetrace"), "debuggerreplace16", this::debuggerReplaceTraceCallsActionPerformed, PRIORITY_MEDIUM, null, true, null,false); + //addMenuItem("/tools/debugger/debuggerInjectLoader", "Inject Loader", "debuggerreplace16", this::debuggerInjectLoader, PRIORITY_MEDIUM, null, true,false); + addMenuItem("/tools/debugger/debuggerShowLog", translate("menu.debugger.showlog"), "debuggerlog16", this::debuggerShowLogActionPerformed, PRIORITY_MEDIUM, null, true, null,false); + finishMenu("/tools/debugger");*/ + addMenuItem("/tools/gotoDocumentClass", translate("menu.tools.gotoDocumentClass"), "gotomainclass32", this::gotoDucumentClassActionPerformed, PRIORITY_TOP, null, true, null, false); + finishMenu("/tools"); + + //Settings + addMenuItem("/settings", translate("menu.settings"), null, null, 0, null, false, null, false); + + addToggleMenuItem("/settings/autoDeobfuscation", translate("menu.settings.autodeobfuscation"), null, null, this::autoDeobfuscationActionPerformed, 0, null); + addToggleMenuItem("/settings/simplifyExpressions", translate("menu.settings.simplifyExpressions"), null, null, this::simplifyExpressionsActionPerformed, 0, null); + addToggleMenuItem("/settings/internalViewer", translate("menu.settings.internalflashviewer"), null, null, this::internalViewerSwitchActionPerformed, 0, null); + addToggleMenuItem("/settings/parallelSpeedUp", translate("menu.settings.parallelspeedup"), null, null, this::parallelSpeedUpActionPerformed, 0, null); + addToggleMenuItem("/settings/disableDecompilation", translate("menu.settings.disabledecompilation"), null, null, this::disableDecompilationActionPerformed, 0, null); + //addToggleMenuItem("/settings/cacheOnDisk", translate("menu.settings.cacheOnDisk"), null, null, this::cacheOnDiskActionPerformed, 0, null); + addToggleMenuItem("/settings/gotoMainClassOnStartup", translate("menu.settings.gotoMainClassOnStartup"), null, null, this::gotoDucumentClassOnStartupActionPerformed, 0, null); + addToggleMenuItem("/settings/autoRenameIdentifiers", translate("menu.settings.autoRenameIdentifiers"), null, null, this::autoRenameIdentifiersActionPerformed, 0, null); + addToggleMenuItem("/settings/autoOpenLoadedSWFs", translate("menu.settings.autoOpenLoadedSWFs"), null, null, this::autoOpenLoadedSWFsActionPerformed, 0, null); + if (Platform.isWindows()) { + addToggleMenuItem("/settings/associate", translate("menu.settings.addtocontextmenu"), null, null, this::associateActionPerformed, 0, null); + } + + addMenuItem("/settings/language", translate("menu.language"), null, null, 0, null, false, null, false); + addMenuItem("/settings/language/setLanguage", translate("menu.settings.language"), "setlanguage32", this::setLanguageActionPerformed, PRIORITY_TOP, null, true, null, false); + finishMenu("/settings/language"); + + /*addMenuItem("/settings/deobfuscation", translate("menu.deobfuscation"), null, null, 0, null, false,false); + addToggleMenuItem("/settings/deobfuscation/old", translate("menu.file.deobfuscation.old"), "deobfuscation", "deobfuscateold16", (ActionEvent e) -> { + deobfuscationMode(e, 0); + }, 0); + addToggleMenuItem("/settings/deobfuscation/new", translate("menu.file.deobfuscation.new"), "deobfuscation", "deobfuscatenew16", (ActionEvent e) -> { + deobfuscationMode(e, 1); + }, 0); + + finishMenu("/settings/deobfuscation");*/ + addMenuItem("/settings/advancedSettings", translate("menu.advancedsettings.advancedsettings"), null, null, 0, null, false, null, false); + addMenuItem("/settings/advancedSettings/advancedSettings", translate("menu.advancedsettings.advancedsettings"), "settings32", this::advancedSettingsActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("/settings/advancedSettings/clearRecentFiles", translate("menu.tools.otherTools.clearRecentFiles"), "clearrecent16", this::clearRecentFilesActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/settings/advancedSettings"); + + finishMenu("/settings"); + + setMenuChecked("/settings/autoDeobfuscation", Configuration.autoDeobfuscate.get()); + Configuration.autoDeobfuscate.addListener(configListenerAutoDeobfuscate = (Boolean newValue) -> { + setMenuChecked("/settings/autoDeobfuscation", newValue); + }); + + setMenuChecked("/settings/simplifyExpressions", Configuration.simplifyExpressions.get()); + Configuration.simplifyExpressions.addListener(configListenerSimplifyExpressions = (Boolean newValue) -> { + setMenuChecked("/settings/simplifyExpressions", newValue); + }); + + setMenuChecked("/settings/internalViewer", Configuration.internalFlashViewer.get() || externalFlashPlayerUnavailable); + Configuration.internalFlashViewer.addListener(configListenerInternalFlashViewer = (Boolean newValue) -> { + setMenuChecked("/settings/internalViewer", newValue || externalFlashPlayerUnavailable); + }); + + setMenuChecked("/settings/parallelSpeedUp", Configuration.parallelSpeedUp.get()); + Configuration.parallelSpeedUp.addListener(configListenerParallelSpeedUp = (Boolean newValue) -> { + setMenuChecked("/settings/parallelSpeedUp", newValue); + }); + + setMenuChecked("/settings/disableDecompilation", !Configuration.decompile.get()); + Configuration.decompile.addListener(configListenerDecompile = (Boolean newValue) -> { + setMenuChecked("/settings/disableDecompilation", !newValue); + }); + + /*setMenuChecked("/settings/cacheOnDisk", Configuration.cacheOnDisk.get()); + Configuration.cacheOnDisk.addListener(configListenerCacheOnDisk = (Boolean newValue) -> { + setMenuChecked("/settings/cacheOnDisk", newValue); + });*/ + setMenuChecked("/settings/gotoMainClassOnStartup", Configuration.gotoMainClassOnStartup.get()); + Configuration.gotoMainClassOnStartup.addListener(configListenerGotoMainClassOnStartup = (Boolean newValue) -> { + setMenuChecked("/settings/gotoMainClassOnStartup", newValue); + }); + + setMenuChecked("/settings/autoRenameIdentifiers", Configuration.autoRenameIdentifiers.get()); + Configuration.autoRenameIdentifiers.addListener(configListenerAutoRenameIdentifiers = (Boolean newValue) -> { + setMenuChecked("/settings/autoRenameIdentifiers", newValue); + }); + + setMenuChecked("/settings/autoOpenLoadedSWFs", Configuration.autoOpenLoadedSWFs.get()); + Configuration.autoOpenLoadedSWFs.addListener(configListenerAutoOpenLoadedSWFs = (Boolean newValue) -> { + setMenuChecked("/settings/autoOpenLoadedSWFs", newValue); + }); + + if (externalFlashPlayerUnavailable) { + setMenuEnabled("/settings/internalViewer", false); + setMenuEnabled("/settings/autoOpenLoadedSWFs", false); + } + + /*int deobfuscationMode = Configuration.deobfuscationMode.get(); + switch (deobfuscationMode) { + case 0: + setGroupSelection("deobfuscation", "/settings/deobfuscation/old"); + break; + case 1: + setGroupSelection("deobfuscation", "/settings/deobfuscation/new"); + break; + }*/ + if (Platform.isWindows()) { + setMenuChecked("/settings/associate", ContextMenuTools.isAddedToContextMenu()); + } + + //Help + addMenuItem("/help", translate("menu.help"), null, null, 0, null, false, null, false); + addMenuItem("/help/helpUs", translate("menu.help.helpus"), "donate32", this::helpUsActionPerformed, PRIORITY_TOP, null, true, null, false); + addMenuItem("/help/homePage", translate("menu.help.homepage"), "homepage16", this::homePageActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addSeparator("/help"); + addMenuItem("/help/checkUpdates", translate("menu.help.checkupdates"), "update16", this::checkUpdatesActionPerformed, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/help/about", translate("menu.help.about"), "about32", this::aboutActionPerformed, PRIORITY_TOP, null, true, null, false); + finishMenu("/help"); + + if (Configuration._showDebugMenu.get() || Configuration._debugMode.get()) { + + addMenuItem("/debug", "# FFDec Debug #", null, null, 0, null, false, null, false); + addMenuItem("/debug/removeNonScripts", "Remove non scripts", "continue16", e -> removeNonScripts(), PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/removeExceptSelected", "Remove except selected", "continue16", e -> removeExceptSelected(), PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/refreshDecompiled", "Refresh decompiled script", "continue16", e -> refreshDecompiled(), PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/checkResources", "Check resources", "continue16", e -> checkResources(), PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/callGc", "Call System.gc()", "continue16", e -> System.gc(), PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/emptyCache", "Empty cache", "continue16", e -> { + SWF nswf = mainFrame.getPanel().getCurrentSwf(); + if (nswf != null) { + nswf.clearAllCache(); + } + }, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/memoryInformation", "Memory information", "continue16", e -> { + String architecture = System.getProperty("sun.arch.data.model"); + Runtime runtime = Runtime.getRuntime(); + String info = "Architecture: " + architecture + Helper.newLine + + "Jre 64bit: " + Helper.is64BitJre() + Helper.newLine + + "Os 64bit: " + Helper.is64BitOs() + Helper.newLine + + "Max: " + (runtime.maxMemory() / 1024 / 1024) + "MB" + Helper.newLine + + "Used: " + (runtime.totalMemory() / 1024 / 1024) + "MB" + Helper.newLine + + "Free: " + (runtime.freeMemory() / 1024 / 1024) + "MB"; + View.showMessageDialog(null, info); + SWF nswf = mainFrame.getPanel().getCurrentSwf(); + if (nswf != null) { + nswf.clearAllCache(); + } + }, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/fixAs3Code", "Fix AS3 code", "continue16", e -> { + SWF nswf = mainFrame.getPanel().getCurrentSwf(); + if (nswf != null) { + nswf.fixAS3Code(); + } + }, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/openTestSwfs", "Open test SWFs", "continue16", e -> { + String path; + + SWFSourceInfo[] sourceInfos = new SWFSourceInfo[2]; + String mainPath = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + path = mainPath + "\\..\\..\\libsrc\\ffdec_lib\\testdata\\as2\\as2.swf"; + sourceInfos[0] = new SWFSourceInfo(null, path, null); + path = mainPath + "\\..\\..\\libsrc\\ffdec_lib\\testdata\\as3\\as3.swf"; + sourceInfos[1] = new SWFSourceInfo(null, path, null); + Main.openFile(sourceInfos); + }, PRIORITY_MEDIUM, null, true, null, false); + addMenuItem("/debug/createNewSwf", "Create new SWF", "continue16", e -> { + SWF swf = new SWF(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + swf.saveTo(baos); + } catch (IOException ex) { + Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex); + } + + Main.openFile(new SWFSourceInfo(new ByteArrayInputStream(baos.toByteArray()), "New SWF", "New SWF")); + }, PRIORITY_MEDIUM, null, true, null, false); + finishMenu("/debug"); + } + + finishMenu(""); + } + + public void showResourcesView() { + viewResourcesActionPerformed(null); + } + + private void viewResourcesActionPerformed(ActionEvent evt) { + Configuration.dumpView.set(false); + mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES); + setGroupSelection("view", "/file/view/viewResources"); + setMenuChecked("/tools/timeline", false); + } + + private void viewHexActionPerformed(ActionEvent evt) { + Configuration.dumpView.set(true); + MainPanel mainPanel = mainFrame.getPanel(); + if (mainPanel.isModified()) { + View.showMessageDialog(null, translate("message.warning.hexViewNotUpToDate"), translate("message.warning"), JOptionPane.WARNING_MESSAGE, Configuration.warningHexViewNotUpToDate); + } + + mainPanel.showView(MainPanel.VIEW_DUMP); + setGroupSelection("view", "/file/view/viewHex"); + setMenuChecked("/tools/timeline", false); + } + + private void debuggerSwitchActionPerformed(ActionEvent evt) { + boolean debuggerOn = isMenuChecked("/tools/debugger/debuggerSwitch"); + if (!debuggerOn || View.showConfirmDialog((Component) mainFrame, translate("message.debugger"), translate("dialog.message.title"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, Configuration.displayDebuggerInfo, JOptionPane.OK_OPTION) == JOptionPane.OK_OPTION) { + switchDebugger(); + mainFrame.getPanel().refreshDecompiled(); + } else { + setMenuChecked("/tools/debugger/debuggerSwitch", false); + } + setMenuEnabled("/tools/debugger/debuggerReplaceTrace", isMenuChecked("/tools/debugger/debuggerSwitch")); + //setMenuEnabled("/tools/debugger/debuggerInjectLoader", isMenuChecked("/tools/debugger/debuggerSwitch")); + } + + private void timelineActionPerformed(ActionEvent evt) { + if (isMenuChecked("/tools/timeline")) { + if (!mainFrame.getPanel().showView(MainPanel.VIEW_TIMELINE)) { + setMenuChecked("/tools/timeline", false); + } else { + setGroupSelection("view", null); + } + } else if (Configuration.dumpView.get()) { + setGroupSelection("view", "/file/view/viewHex"); + mainFrame.getPanel().showView(MainPanel.VIEW_DUMP); + } else { + setGroupSelection("view", "/file/view/viewResources"); + mainFrame.getPanel().showView(MainPanel.VIEW_RESOURCES); + } + } + + protected void loadRecent(ActionEvent evt) { + List recentFiles = Configuration.getRecentFiles(); + clearMenu("/file/" + (supportsMenuAction() ? "open" : "recent")); + clearMenu("_/open"); + + for (int i = recentFiles.size() - 1; i >= 0; i--) { + final String f = recentFiles.get(i); + ActionListener a = (ActionEvent e) -> { + if (Main.openFile(f, null) == OpenFileResult.NOT_FOUND) { + if (View.showConfirmDialog(null, translate("message.confirm.recentFileNotFound"), translate("message.confirm"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_NO_OPTION) { + Configuration.removeRecentFile(f); + } + } + }; + addMenuItem("/file/" + (supportsMenuAction() ? "open" : "recent") + "/" + i, f, null, a, 0, null, true, null, false); + addMenuItem("_/open/" + i, f, null, a, 0, null, true, null, false); + } + + finishMenu("/file/" + (supportsMenuAction() ? "open" : "recent")); + finishMenu("_/open"); + } + + public void dispose() { + KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + manager.removeKeyEventDispatcher(keyEventDispatcher); + + Configuration.autoDeobfuscate.removeListener(configListenerAutoDeobfuscate); + Configuration.simplifyExpressions.removeListener(configListenerSimplifyExpressions); + Configuration.internalFlashViewer.removeListener(configListenerInternalFlashViewer); + Configuration.parallelSpeedUp.removeListener(configListenerParallelSpeedUp); + Configuration.decompile.removeListener(configListenerDecompile); + //Configuration.cacheOnDisk.removeListener(configListenerCacheOnDisk); + Configuration.gotoMainClassOnStartup.removeListener(configListenerGotoMainClassOnStartup); + Configuration.autoRenameIdentifiers.removeListener(configListenerAutoRenameIdentifiers); + Configuration.autoOpenLoadedSWFs.removeListener(configListenerAutoOpenLoadedSWFs); + + Main.stopRun(); + } + + public boolean runActionPerformed(ActionEvent evt) { + Main.run(swf); + return true; + } + + public boolean debugActionPerformed(ActionEvent evt) { + Main.runDebug(swf, false); + return true; + } + + public boolean debugPCodeActionPerformed(ActionEvent evt) { + Main.runDebug(swf, true); + return true; + } + + public boolean stopActionPerformed(ActionEvent evt) { + Main.stopRun(); + return true; + } + + public boolean pauseActionPerformed(ActionEvent evt) { + try { + DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + //TODO + + } catch (IOException ex) { + Main.getDebugHandler().disconnect(); + //ignore + } + return true; + } + + public boolean stepOverActionPerformed(ActionEvent evt) { + + try { + + DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + mainFrame.getPanel().clearDebuggerColors(); + Main.startWork(AppStrings.translate("work.debugging") + "...", null); + + cmd.stepOver(); + } catch (IOException ex) { + Main.getDebugHandler().disconnect(); + //ignore + } + return true; + } + + public boolean stepIntoActionPerformed(ActionEvent evt) { + try { + DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + mainFrame.getPanel().clearDebuggerColors(); + Main.startWork(AppStrings.translate("work.debugging") + "...", null); + + cmd.stepInto(); + } catch (IOException ex) { + Main.getDebugHandler().disconnect(); + //ignore + } + + return true; + } + + public boolean stepOutActionPerformed(ActionEvent evt) { + try { + DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + mainFrame.getPanel().clearDebuggerColors(); + Main.startWork(AppStrings.translate("work.debugging") + "...", null); + cmd.stepOut(); + } catch (IOException ex) { + Main.getDebugHandler().disconnect(); + //ignore + } + + return true; + } + + public boolean continueActionPerformed(ActionEvent evt) { + try { + DebuggerCommands cmd = Main.getDebugHandler().getCommands(); + mainFrame.getPanel().clearDebuggerColors(); + Main.startWork(AppStrings.translate("work.debugging") + "...", null); + cmd.sendContinue(); + } catch (IOException ex) { + Main.getDebugHandler().disconnect(); + //ignore + } + + return true; + } + + public boolean stackActionPerformed(ActionEvent evt) { + //TODO + return true; + } + + public boolean watchActionPerformed(ActionEvent evt) { + //TODO + return true; + } + + public boolean dispatchKeyEvent(KeyEvent e) { + if (((JFrame) mainFrame).isActive() && e.getID() == KeyEvent.KEY_PRESSED) { + + HotKey ek = new HotKey(e); + for (String path : menuHotkeys.keySet()) { + HotKey mk = menuHotkeys.get(path); + if (ek.equals(mk)) { + if (menuActions.containsKey(path)) { + menuActions.get(path).actionPerformed(null); + return true; + } + } + } + + //other nonmenu actions + int code = e.getKeyCode(); + if (e.isControlDown() && e.isShiftDown()) { //CTRL+SHIFT + switch (code) { + case KeyEvent.VK_F: + return searchInActionPerformed(null); + case KeyEvent.VK_T: + return searchInTextPerformed(null); + case KeyEvent.VK_D: + return clearLog(null); + } + } else if (e.isControlDown() && !e.isShiftDown()) { //CTRL + switch (code) { + case KeyEvent.VK_UP: + return previousTag(null); + case KeyEvent.VK_DOWN: + return nextTag(null); + } + } + } + + return false; + } + + public abstract void hilightPath(String path); + + public abstract void setPathVisible(String path, boolean val); +} diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 8fbe0077a..cd8e36531 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -134,7 +134,6 @@ import com.jpexs.decompiler.flash.tags.base.SoundTag; import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; import com.jpexs.decompiler.flash.tags.base.TextImportErrorHandler; import com.jpexs.decompiler.flash.tags.base.TextTag; -import com.jpexs.decompiler.flash.tags.text.TextAlign; import com.jpexs.decompiler.flash.tags.text.TextParseException; import com.jpexs.decompiler.flash.timeline.DepthState; import com.jpexs.decompiler.flash.timeline.Frame; @@ -340,11 +339,15 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private static final Logger logger = Logger.getLogger(MainPanel.class.getName()); public void setPercent(int percent) { + View.checkAccess(); + progressBar.setValue(percent); progressBar.setVisible(true); } public void hidePercent() { + View.checkAccess(); + if (progressBar.isVisible()) { progressBar.setVisible(false); } @@ -779,12 +782,16 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void closeTagTreeSearch() { + View.checkAccess(); + filterField.setText(""); doFilter(); searchPanel.setVisible(false); } public void loadSwfAtPos(SWFList newSwfs, int index) { + View.checkAccess(); + previewPanel.clear(); swfs.set(index, newSwfs); SWF swf = newSwfs.size() > 0 ? newSwfs.get(0) : null; @@ -797,6 +804,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void load(SWFList newSwfs, boolean first) { + View.checkAccess(); previewPanel.clear(); @@ -830,6 +838,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } private void updateUi(final SWF swf) { + View.checkAccess(); List abcList = swf.getAbcList(); @@ -874,6 +883,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } private void updateUi() { + View.checkAccess(); + if (!isWelcomeScreen && swfs.isEmpty()) { CardLayout cl = (CardLayout) (contentPanel.getLayout()); cl.show(contentPanel, WELCOME_PANEL); @@ -888,6 +899,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } private boolean closeConfirmation(SWFList swfList) { + View.checkAccess(); + String message = swfList == null ? translate("message.confirm.closeAll") : translate("message.confirm.close").replace("{swfName}", swfList.toString()); @@ -908,6 +921,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public boolean closeAll(boolean showCloseConfirmation) { + View.checkAccess(); + if (showCloseConfirmation && isModified()) { boolean closeConfirmResult = closeConfirmation(swfs.size() == 1 ? swfs.get(0) : null); if (!closeConfirmResult) { @@ -932,6 +947,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public boolean close(SWFList swfList) { + View.checkAccess(); + boolean modified = false; for (SWF swf : swfList) { if (swf.isModified()) { @@ -959,7 +976,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se return true; } - public void enableDrop(boolean value) { + private void enableDrop(boolean value) { if (value) { setDropTarget(new DropTarget() { @Override @@ -1002,6 +1019,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void doFilter() { + View.checkAccess(); + List nodes = getASTreeNodes(tagTree); for (TreeItem n : nodes) { if (n instanceof ClassesListTreeModel) { @@ -1056,15 +1075,18 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } } - View.showMessageDialog(null, translate("rename.finished.multiname").replace("%count%", Integer.toString(mulCount))); - if (abcPanel != null) { - abcPanel.reload(); - } + int fmulCount = mulCount; + View.execInEventDispatchLater(() -> { + View.showMessageDialog(null, translate("rename.finished.multiname").replace("%count%", Integer.toString(fmulCount))); + if (abcPanel != null) { + abcPanel.reload(); + } - updateClassesList(); - reload(true); - ABCPanel abcPanel = getABCPanel(); - abcPanel.hilightScript(abcPanel.getSwf(), abcPanel.decompiledTextArea.getScriptLeaf().getClassPath().toRawString()); + updateClassesList(); + reload(true); + ABCPanel abcPanel = getABCPanel(); + abcPanel.hilightScript(abcPanel.getSwf(), abcPanel.decompiledTextArea.getScriptLeaf().getClassPath().toRawString()); + }); } } } @@ -1094,6 +1116,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public boolean confirmExperimental() { + View.checkAccess(); + return View.showConfirmDialog(null, translate("message.confirm.experimental"), translate("message.warning"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.OK_OPTION; } @@ -1571,6 +1595,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void gotoFrame(int frame) { + View.checkAccess(); + TreeItem treeItem = (TreeItem) tagTree.getLastSelectedPathComponent(); if (treeItem == null) { return; @@ -1585,6 +1611,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void gotoScriptLine(SWF swf, String scriptName, int line, int classIndex, int traitIndex, int methodIndex) { + View.checkAccess(); + gotoScriptName(swf, scriptName); if (abcPanel != null) { if (Main.isDebugPCode()) { @@ -1639,6 +1667,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se }*/ public void gotoScriptName(SWF swf, String scriptName) { + View.checkAccess(); + if (swf == null) { return; } @@ -1667,6 +1697,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void gotoDocumentClass(SWF swf) { + View.checkAccess(); + if (swf == null) { return; } @@ -1688,6 +1720,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void disableDecompilationChanged() { + View.checkAccess(); + clearAllScriptCache(); if (abcPanel != null) { @@ -1706,6 +1740,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void searchInActionScriptOrText(Boolean searchInText, SWF swf) { + View.checkAccess(); + SearchDialog searchDialog = new SearchDialog(getMainFrame().getWindow(), false); if (searchInText != null) { if (searchInText) { @@ -1907,6 +1943,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se @Override public void updateSearchPos(TextTag item) { + View.checkAccess(); + setTagTreeSelectedNode(item); previewPanel.getTextPanel().updateSearchPos(); } @@ -1944,6 +1982,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void renameColliding(final SWF swf) { + View.checkAccess(); + if (swf == null) { return; } @@ -1986,6 +2026,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void renameOneIdentifier(final SWF swf) { + View.checkAccess(); + if (swf == null) { return; } @@ -2296,6 +2338,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void export(final boolean onlySel) { + View.checkAccess(); final SWF swf = getCurrentSwf(); List sel = tagTree.getAllSelected(); @@ -2369,6 +2412,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void exportSwfXml() { + View.checkAccess(); + List sel = tagTree.getSelected(); Set swfs = new HashSet<>(); @@ -2393,6 +2438,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void importSwfXml() { + View.checkAccess(); + List sel = tagTree.getSelected(); Set swfs = new HashSet<>(); for (TreeItem item : sel) { @@ -2421,6 +2468,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void renameIdentifiers(final SWF swf) { + View.checkAccess(); + if (swf == null) { return; } @@ -2467,6 +2516,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void deobfuscate() { + View.checkAccess(); + DeobfuscationDialog deobfuscationDialog = new DeobfuscationDialog(); if (deobfuscationDialog.showDialog() == AppDialog.OK_OPTION) { DeobfuscationLevel level = DeobfuscationLevel.getByLevel(deobfuscationDialog.codeProcessingLevel.getValue()); @@ -2666,14 +2717,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se return false; } - public boolean alignText(TextTag textTag, TextAlign textAlign) { - return (textTag.alignText(textAlign)); - } - - public boolean translateText(TextTag textTag, int diff) { - return textTag.translateText(diff); - } - public boolean previousTag() { if (getCurrentView() == VIEW_RESOURCES) { if (tagTree.getSelectionRows().length > 0) { @@ -3236,6 +3279,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } private void closeTag() { + View.checkAccess(); + previewPanel.closeTag(); } @@ -3314,6 +3359,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } public void reload(boolean forceReload) { + View.checkAccess(); + tagTree.scrollPathToVisible(tagTree.getSelectionPath()); if (Configuration.dumpView.get()) { dumpViewReload(forceReload); @@ -3373,11 +3420,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } if (!Main.isInited() || !Main.isWorking() || Main.isDebugging()) { ABCPanel abcPanel = getABCPanel(); + abcPanel.detailPanel.methodTraitPanel.methodCodePanel.clear(); + abcPanel.setAbc(scriptLeaf.abc); + CancellableWorker worker = new CancellableWorker() { @Override protected Void doInBackground() throws Exception { - abcPanel.detailPanel.methodTraitPanel.methodCodePanel.clear(); - abcPanel.setAbc(scriptLeaf.abc); abcPanel.decompiledTextArea.setScript(scriptLeaf, true); abcPanel.decompiledTextArea.setNoTrait(); return null; diff --git a/src/com/jpexs/decompiler/flash/gui/SearchPanel.java b/src/com/jpexs/decompiler/flash/gui/SearchPanel.java index 7d3effb8b..a611eb4d9 100644 --- a/src/com/jpexs/decompiler/flash/gui/SearchPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/SearchPanel.java @@ -87,6 +87,8 @@ public class SearchPanel extends JPanel { } public boolean setResults(List results) { + View.checkAccess(); + found = results; if (found.isEmpty()) { setVisible(false); @@ -104,20 +106,24 @@ public class SearchPanel extends JPanel { } public void setPos(int pos) { + View.checkAccess(); + foundPos = pos; doUpdate(); } public void clear() { + View.checkAccess(); + foundPos = 0; found.clear(); } private void doUpdate() { - View.execInEventDispatchLater(() -> { - searchPos.setText((foundPos + 1) + "/" + found.size()); - listener.updateSearchPos(found.get(foundPos)); - }); + View.checkAccess(); + + searchPos.setText((foundPos + 1) + "/" + found.size()); + listener.updateSearchPos(found.get(foundPos)); } private void cancelButtonActionPerformed(ActionEvent evt) { diff --git a/src/com/jpexs/decompiler/flash/gui/SearchResultsDialog.java b/src/com/jpexs/decompiler/flash/gui/SearchResultsDialog.java index 2ccf5b295..43877b8f7 100644 --- a/src/com/jpexs/decompiler/flash/gui/SearchResultsDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/SearchResultsDialog.java @@ -111,9 +111,7 @@ public class SearchResultsDialog extends AppDialog { private void gotoElement() { if (resultsList.getSelectedIndex() != -1) { - View.execInEventDispatchLater(() -> { - listener.updateSearchPos(resultsList.getSelectedValue()); - }); + listener.updateSearchPos(resultsList.getSelectedValue()); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/SelectLanguageDialog.java b/src/com/jpexs/decompiler/flash/gui/SelectLanguageDialog.java index f7ee4e986..0ee41fd25 100644 --- a/src/com/jpexs/decompiler/flash/gui/SelectLanguageDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/SelectLanguageDialog.java @@ -117,12 +117,10 @@ public class SelectLanguageDialog extends AppDialog { } public static void reloadUi() { - View.execInEventDispatchLater(() -> { - Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); - DefaultSyntaxKit.reloadConfigs(); - Main.initLang(); - Main.reloadApp(); - }); + Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); + DefaultSyntaxKit.reloadConfigs(); + Main.initLang(); + Main.reloadApp(); } public static String[] getAvailableLanguages() { diff --git a/src/com/jpexs/decompiler/flash/gui/TextPanel.java b/src/com/jpexs/decompiler/flash/gui/TextPanel.java index 573a3f490..5019a6fda 100644 --- a/src/com/jpexs/decompiler/flash/gui/TextPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TextPanel.java @@ -322,9 +322,7 @@ public class TextPanel extends JPanel implements TagEditorPanel { public void updateSearchPos() { textValue.setCaretPosition(0); - View.execInEventDispatchLater(() -> { - textSearchPanel.showQuickFindDialog(textValue); - }); + textSearchPanel.showQuickFindDialog(textValue); } private void editText() { @@ -349,7 +347,7 @@ public class TextPanel extends JPanel implements TagEditorPanel { } private void textAlign(TextAlign textAlign) { - if (mainPanel.alignText(textTag, textAlign)) { + if (textTag.alignText(textAlign)) { updateButtonsVisibility(); textTag.getSwf().clearImageCache(); mainPanel.repaintTree(); @@ -357,7 +355,7 @@ public class TextPanel extends JPanel implements TagEditorPanel { } private void translateX(int delta, int repeatCount) { - if (mainPanel.translateText(textTag, delta * (repeatCount + 1))) { + if (textTag.translateText(delta * (repeatCount + 1))) { updateButtonsVisibility(); textTag.getSwf().clearImageCache(); mainPanel.repaintTree(); diff --git a/src/com/jpexs/decompiler/flash/gui/View.java b/src/com/jpexs/decompiler/flash/gui/View.java index a5c1ea2cf..05fadbf5b 100644 --- a/src/com/jpexs/decompiler/flash/gui/View.java +++ b/src/com/jpexs/decompiler/flash/gui/View.java @@ -438,6 +438,12 @@ public class View { } } + public static void checkAccess() { + if (!SwingUtilities.isEventDispatchThread()) { + throw new RuntimeException("This method should be called from UI thread."); + } + } + public static void execInEventDispatch(Runnable r) { if (SwingUtilities.isEventDispatchThread()) { r.run(); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index cc5fcf3bf..67c9cb535 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -186,6 +186,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener abcIndex = new Reference<>(0); Reference classIndex = new Reference<>(0); Reference traitIndex = new Reference<>(0); @@ -1177,6 +1192,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener { - mainPanel.tagTree.setSelectionPath(tp); - mainPanel.tagTree.scrollPathToVisible(tp); - }); + mainPanel.tagTree.setSelectionPath(tp); + mainPanel.tagTree.scrollPathToVisible(tp); } @Override public void updateSearchPos(ABCSearchResult item) { + View.checkAccess(); + ScriptPack pack = item.getScriptPack(); setAbc(pack.abc); decompiledTextArea.setScript(pack, false); @@ -1258,45 +1283,38 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener { - if (pcode) { - searchPanel.showQuickFindDialog(detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea()); - } else { - searchPanel.showQuickFindDialog(decompiledTextArea); - } - }); - + if (pcode) { + searchPanel.showQuickFindDialog(detailPanel.methodTraitPanel.methodCodePanel.getSourceTextArea()); + } else { + searchPanel.showQuickFindDialog(decompiledTextArea); + } } public boolean isDirectEditing() { + View.checkAccess(); + return saveDecompiledButton.isVisible() && saveDecompiledButton.isEnabled(); } public void setDecompiledEditMode(boolean val) { - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - if (val) { - lastDecompiled = decompiledTextArea.getText(); - } else { - decompiledTextArea.setText(lastDecompiled); - } + if (val) { + lastDecompiled = decompiledTextArea.getText(); + } else { + decompiledTextArea.setText(lastDecompiled); + } - decompiledTextArea.setEditable(val); - saveDecompiledButton.setVisible(val); - saveDecompiledButton.setEnabled(false); - editDecompiledButton.setVisible(!val); - experimentalLabel.setVisible(!val); - cancelDecompiledButton.setVisible(val); - decompiledTextArea.getCaret().setVisible(true); - decLabel.setIcon(val ? View.getIcon("editing16") : null); - detailPanel.setVisible(!val); - - decompiledTextArea.ignoreCarret = val; - decompiledTextArea.requestFocusInWindow(); - } - }); + decompiledTextArea.setEditable(val); + saveDecompiledButton.setVisible(val); + saveDecompiledButton.setEnabled(false); + editDecompiledButton.setVisible(!val); + experimentalLabel.setVisible(!val); + cancelDecompiledButton.setVisible(val); + decompiledTextArea.getCaret().setVisible(true); + decLabel.setIcon(val ? View.getIcon("editing16") : null); + detailPanel.setVisible(!val); + decompiledTextArea.ignoreCarret = val; + decompiledTextArea.requestFocusInWindow(); } private void editDecompiledButtonActionPerformed(ActionEvent evt) { @@ -1493,12 +1511,16 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener { - if (item.isPcode()) { - searchPanel.showQuickFindDialog(editor); - } else { - searchPanel.showQuickFindDialog(decompiledEditor); - } - }); + if (item.isPcode()) { + searchPanel.showQuickFindDialog(editor); + } else { + searchPanel.showQuickFindDialog(decompiledEditor); + } } @Override public boolean tryAutoSave() { + View.checkAccess(); + // todo: implement return false; } @Override public boolean isEditing() { + View.checkAccess(); + return (saveButton.isVisible() && saveButton.isEnabled()) || (saveDecompiledButton.isVisible() && saveDecompiledButton.isEnabled()); } diff --git a/src/com/jpexs/decompiler/flash/gui/pipes/FirstInstance.java b/src/com/jpexs/decompiler/flash/gui/pipes/FirstInstance.java index f4a8bce51..5535bd5fc 100644 --- a/src/com/jpexs/decompiler/flash/gui/pipes/FirstInstance.java +++ b/src/com/jpexs/decompiler/flash/gui/pipes/FirstInstance.java @@ -18,6 +18,7 @@ package com.jpexs.decompiler.flash.gui.pipes; import com.jpexs.decompiler.flash.ApplicationInfo; import com.jpexs.decompiler.flash.gui.Main; +import com.jpexs.decompiler.flash.gui.View; import com.sun.jna.Platform; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinError; @@ -77,13 +78,20 @@ public class FirstInstance { switch (command) { case "open": int cnt = ois.readInt(); + String[] fileNames = new String[cnt]; for (int i = 0; i < cnt; i++) { - Main.openFile(ois.readUTF(), null); + fileNames[i] = ois.readUTF(); } + + View.execInEventDispatchLater(() -> { + for (int i = 0; i < cnt; i++) { + Main.openFile(fileNames[i], null); + } + }); //no break - focus too case "focus": - java.awt.EventQueue.invokeLater(new Runnable() { + View.execInEventDispatchLater(new Runnable() { @Override public void run() { Window wnd = Main.getMainFrame().getWindow(); diff --git a/src/com/jpexs/decompiler/flash/gui/proxy/ProxyFrame.java b/src/com/jpexs/decompiler/flash/gui/proxy/ProxyFrame.java index 77a86e3ee..59bbcb0dd 100644 --- a/src/com/jpexs/decompiler/flash/gui/proxy/ProxyFrame.java +++ b/src/com/jpexs/decompiler/flash/gui/proxy/ProxyFrame.java @@ -225,7 +225,6 @@ public class ProxyFrame extends AppFrame implements CatchedListener, MouseListen } tableModel = new DefaultTableModel(data, columnNames) { - @Override public Class getColumnClass(int columnIndex) { Class[] classes = new Class[]{String.class, SizeItem.class, String.class}; @@ -236,7 +235,6 @@ public class ProxyFrame extends AppFrame implements CatchedListener, MouseListen public boolean isCellEditable(int row, int column) { return false; } - }; replacementsTable = new JTable(tableModel); @@ -349,6 +347,8 @@ public class ProxyFrame extends AppFrame implements CatchedListener, MouseListen } private void open() { + View.checkAccess(); + if (replacementsTable.getSelectedRow() > -1) { Replacement r = replacements.get(replacementsTable.getRowSorter().convertRowIndexToModel(replacementsTable.getSelectedRow())); Main.openFile(r.targetFile, r.urlPattern); From 9dc4752c04b552eb48fd4063337315af2c8dc25e Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 28 Dec 2016 12:57:06 +0100 Subject: [PATCH 017/114] UI thread invoke fixes/improvements 2 --- .../flash/helpers/HighlightedText.java | 4 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 43 +---- .../flash/gui/abc/ASMSourceEditorPane.java | 2 +- .../flash/gui/abc/DecompiledEditorPane.java | 97 +++++++++-- .../decompiler/flash/gui/abc/DetailPanel.java | 22 +-- .../decompiler/flash/gui/abc/UsageFrame.java | 20 ++- .../flash/gui/action/ActionPanel.java | 157 ++++++++---------- 7 files changed, 184 insertions(+), 161 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedText.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedText.java index 220cabde6..69657ecc1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedText.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/helpers/HighlightedText.java @@ -28,6 +28,8 @@ import java.util.List; */ public class HighlightedText implements Serializable { + public static HighlightedText EMPTY = new HighlightedText(); + public String text; private final List traitHighlights; @@ -69,7 +71,7 @@ public class HighlightedText implements Serializable { this.specialHighlights = writer.specialHilights; } - public HighlightedText() { + private HighlightedText() { this(""); } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index cd8e36531..ae6dd9cf6 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -196,7 +196,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Random; import java.util.Set; -import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -327,8 +326,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private TreePanelMode treePanelMode; - private CancellableWorker setSourceWorker; - public TreeItem oldItem; // play morph shape in 2 second(s) @@ -3414,48 +3411,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (treeItem instanceof ScriptPack) { final ScriptPack scriptLeaf = (ScriptPack) treeItem; - if (setSourceWorker != null) { - setSourceWorker.cancel(true); - setSourceWorker = null; - } if (!Main.isInited() || !Main.isWorking() || Main.isDebugging()) { ABCPanel abcPanel = getABCPanel(); abcPanel.detailPanel.methodTraitPanel.methodCodePanel.clear(); abcPanel.setAbc(scriptLeaf.abc); - - CancellableWorker worker = new CancellableWorker() { - @Override - protected Void doInBackground() throws Exception { - abcPanel.decompiledTextArea.setScript(scriptLeaf, true); - abcPanel.decompiledTextArea.setNoTrait(); - return null; - } - - @Override - protected void onStart() { - Main.startWork(translate("work.decompiling") + "...", this); - } - - @Override - protected void done() { - View.execInEventDispatch(() -> { - setSourceWorker = null; - try { - get(); - } catch (CancellationException ex) { - abcPanel.decompiledTextArea.setText("// " + AppStrings.translate("work.canceled")); - } catch (Exception ex) { - logger.log(Level.SEVERE, "Error", ex); - getABCPanel().decompiledTextArea.setText("// " + AppStrings.translate("decompilationError") + ": " + ex); - } - - Main.stopWork(); - }); - } - }; - - worker.execute(); - setSourceWorker = worker; + abcPanel.decompiledTextArea.setScript(scriptLeaf, true); + abcPanel.decompiledTextArea.setNoTrait(); } showDetail(DETAILCARDAS3NAVIGATOR); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java index 760879a7d..1a21c08e4 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java @@ -76,7 +76,7 @@ public class ASMSourceEditorPane extends DebuggableEditorPane implements CaretLi return scriptIndex; } - private HighlightedText highlightedText = new HighlightedText(); + private HighlightedText highlightedText = HighlightedText.EMPTY; private final List docsListeners = new ArrayList<>(); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index 48a56ca19..0b4f31ece 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -34,6 +34,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.gui.AppStrings; +import com.jpexs.decompiler.flash.gui.Main; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.gui.editor.DebuggableEditorPane; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -43,11 +44,15 @@ import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType; import com.jpexs.decompiler.flash.helpers.hilight.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.graph.DottedChain; +import com.jpexs.helpers.CancellableWorker; import java.awt.Point; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.CancellationException; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import jsyntaxpane.SyntaxDocument; @@ -60,7 +65,9 @@ import jsyntaxpane.TokenType; */ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretListener { - private HighlightedText highlightedText = new HighlightedText(); + private static final Logger logger = Logger.getLogger(DecompiledEditorPane.class.getName()); + + private HighlightedText highlightedText = HighlightedText.EMPTY; private Highlighting currentMethodHighlight; @@ -80,6 +87,8 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL private boolean isStatic = false; + private CancellableWorker setSourceWorker; + private final List scriptListeners = new ArrayList<>(); public void addScriptListener(Runnable l) { @@ -649,6 +658,13 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL } public void setScript(ScriptPack scriptLeaf, boolean force) { + View.checkAccess(); + + if (setSourceWorker != null) { + setSourceWorker.cancel(true); + setSourceWorker = null; + } + if (!force && this.script == scriptLeaf) { return; } @@ -661,23 +677,76 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL if (scriptIndex > -1) { nscript = abc.script_info.get(scriptIndex); } + if (nscript == null) { - highlightedText = new HighlightedText(); - this.script = scriptLeaf; + highlightedText = HighlightedText.EMPTY; return; } - setText("// " + AppStrings.translate("pleasewait") + "..."); - this.script = scriptLeaf; - HighlightedText cd = null; - try { - cd = SWF.getCached(scriptLeaf); - } catch (InterruptedException ex) { + HighlightedText decompiledText = SWF.getFromCache(scriptLeaf); + + boolean decompileNeeded = decompiledText == null; + + if (decompileNeeded) { + CancellableWorker worker = new CancellableWorker() { + @Override + protected Void doInBackground() throws Exception { + + if (decompileNeeded) { + View.execInEventDispatch(() -> { + setText("// " + AppStrings.translate("work.decompiling") + "..."); + }); + + HighlightedText htext = SWF.getCached(scriptLeaf); + View.execInEventDispatch(() -> { + setSourceCompleted(scriptLeaf, htext); + }); + } + + return null; + } + + @Override + protected void done() { + View.execInEventDispatch(() -> { + setSourceWorker = null; + if (!Main.isDebugging()) { + Main.stopWork(); + } + + try { + get(); + } catch (CancellationException ex) { + setText("// " + AppStrings.translate("work.canceled")); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error", ex); + setText("// " + AppStrings.translate("decompilationError") + ": " + ex); + } + }); + } + }; + + worker.execute(); + setSourceWorker = worker; + if (!Main.isDebugging()) { + Main.startWork(AppStrings.translate("work.decompiling") + "...", worker); + } + } else { + setSourceCompleted(scriptLeaf, decompiledText); + } + } + + private void setSourceCompleted(ScriptPack scriptLeaf, HighlightedText decompiledText) { + View.checkAccess(); + + if (decompiledText == null) { + decompiledText = HighlightedText.EMPTY; } - if (cd != null) { - String hilightedCode = cd.text; - highlightedText = cd; + script = scriptLeaf; + highlightedText = decompiledText; + if (decompiledText != null) { + String hilightedCode = decompiledText.text; setText(hilightedCode); if (highlightedText.getClassHighlights().size() > 0) { @@ -688,15 +757,19 @@ public class DecompiledEditorPane extends DebuggableEditorPane implements CaretL } } } + fireScript(); } public void reloadClass() { + View.checkAccess(); + int ci = classIndex; SWF.uncache(script); if (script != null && getABC() != null) { setScript(script, true); } + setNoTrait(); setClassIndex(ci); } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java index e25f83b76..fb90237c8 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/DetailPanel.java @@ -25,7 +25,6 @@ import com.jpexs.decompiler.flash.gui.Main; import com.jpexs.decompiler.flash.gui.TagEditorPanel; import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; -import com.jpexs.helpers.CancellableWorker; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.FlowLayout; @@ -130,7 +129,6 @@ public class DetailPanel extends JPanel implements TagEditorPanel { buttonsPanel.setVisible(false); conListener = new DebuggerHandler.ConnectionListener() { - @Override public void connected() { synchronized (DetailPanel.this) { @@ -305,23 +303,21 @@ public class DetailPanel extends JPanel implements TagEditorPanel { private void saveButtonActionPerformed(ActionEvent evt) { if (cardMap.get(selectedCard) instanceof TraitDetail) { if (((TraitDetail) cardMap.get(selectedCard)).save()) { - CancellableWorker worker = new CancellableWorker() { + DecompiledEditorPane decompiledTextArea = abcPanel.decompiledTextArea; + int lastTrait = decompiledTextArea.lastTraitIndex; + decompiledTextArea.reloadClass(); + Runnable reloadComplete = new Runnable() { @Override - public Void doInBackground() throws Exception { - int lasttrait = abcPanel.decompiledTextArea.lastTraitIndex; - abcPanel.decompiledTextArea.reloadClass(); - abcPanel.decompiledTextArea.gotoTrait(lasttrait); - return null; - } - - @Override - protected void done() { + public void run() { + decompiledTextArea.removeScriptListener(this); + decompiledTextArea.gotoTrait(lastTrait); setEditMode(false); View.showMessageDialog(null, AppStrings.translate("message.trait.saved"), AppStrings.translate("dialog.message.title"), JOptionPane.INFORMATION_MESSAGE, Configuration.showTraitSavedMessage); } }; - worker.execute(); + + decompiledTextArea.addScriptListener(reloadComplete); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java index 5de5ca0c3..5f01771c8 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/UsageFrame.java @@ -103,11 +103,13 @@ public class UsageFrame extends AppDialog implements MouseListener { if (usage instanceof InsideClassMultinameUsageInterface) { final InsideClassMultinameUsageInterface icu = (InsideClassMultinameUsageInterface) usage; - Runnable settrait = new Runnable() { + DecompiledEditorPane decompiledTextArea = abcPanel.decompiledTextArea; + ABC abc = abcPanel.abc; + Runnable setTrait = new Runnable() { @Override public void run() { - abcPanel.decompiledTextArea.removeScriptListener(this); - abcPanel.decompiledTextArea.setClassIndex(icu.getClassIndex()); + decompiledTextArea.removeScriptListener(this); + decompiledTextArea.setClassIndex(icu.getClassIndex()); if (usage instanceof TraitMultinameUsage) { TraitMultinameUsage tmu = (TraitMultinameUsage) usage; int traitIndex; @@ -117,23 +119,23 @@ public class UsageFrame extends AppDialog implements MouseListener { traitIndex = tmu.getTraitIndex(); } if (tmu.getTraitsType() == TraitMultinameUsage.TRAITS_TYPE_INSTANCE) { - traitIndex += abcPanel.abc.class_info.get(tmu.getClassIndex()).static_traits.traits.size(); + traitIndex += abc.class_info.get(tmu.getClassIndex()).static_traits.traits.size(); } if (tmu instanceof MethodMultinameUsage) { MethodMultinameUsage mmu = (MethodMultinameUsage) usage; if (mmu.isInitializer() == true) { - traitIndex = abcPanel.abc.class_info.get(mmu.getClassIndex()).static_traits.traits.size() + abcPanel.abc.instance_info.get(mmu.getClassIndex()).instance_traits.traits.size() + (mmu.getTraitsType() == TraitMultinameUsage.TRAITS_TYPE_CLASS ? 1 : 0); + traitIndex = abc.class_info.get(mmu.getClassIndex()).static_traits.traits.size() + abc.instance_info.get(mmu.getClassIndex()).instance_traits.traits.size() + (mmu.getTraitsType() == TraitMultinameUsage.TRAITS_TYPE_CLASS ? 1 : 0); } } - abcPanel.decompiledTextArea.gotoTrait(traitIndex); + decompiledTextArea.gotoTrait(traitIndex); } } }; - if (abcPanel.decompiledTextArea.getClassIndex() == icu.getClassIndex() && abcPanel.abc == icu.getAbc()) { - settrait.run(); + if (decompiledTextArea.getClassIndex() == icu.getClassIndex() && abc == icu.getAbc()) { + setTrait.run(); } else { - abcPanel.decompiledTextArea.addScriptListener(settrait); + decompiledTextArea.addScriptListener(setTrait); abcPanel.hilightScript(abcPanel.getSwf(), icu.getAbc().instance_info.get(icu.getClassIndex()).getName(icu.getAbc().constants).getNameWithNamespace(icu.getAbc().constants, true).toRawString()); } } diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 454005215..7bc064c9e 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -156,9 +156,9 @@ public class ActionPanel extends JPanel implements SearchListener { - setEditorText(asm.getScriptName(), "; " + AppStrings.translate("work.disassembling") + "...", "text/flasm"); - if (decompileNeeded) { - setDecompiledText("-", "// " + AppStrings.translate("work.waitingfordissasembly") + "..."); - } - }); - - DisassemblyListener listener = getDisassemblyListener(); - asm.addDisassemblyListener(listener); - innerActions = asm.getActions(); - asm.removeDisassemblyListener(listener); - - lastCode = innerActions; - ActionList finalActions = innerActions; - View.execInEventDispatch(() -> { - setHex(getExportMode(), asm.getScriptName(), finalActions); - }); - } - - if (decompileNeeded) { - View.execInEventDispatch(() -> { - setDecompiledText("-", "// " + AppStrings.translate("work.decompiling") + "..."); - }); - - HighlightedText htext = SWF.getCached(asm, innerActions); - lastDecompiled = htext; - lastASM = asm; - - View.execInEventDispatch(() -> { - setDecompiledText(lastASM.getScriptName(), htext.text); - }); - } - - return null; - } - - @Override - protected void done() { - View.execInEventDispatch(() -> { - setSourceWorker = null; - if (!Main.isDebugging()) { - Main.stopWork(); - } - - try { - get(); - } catch (CancellationException ex) { - setEditorText("-", "; " + AppStrings.translate("work.canceled"), "text/flasm"); - } catch (Exception ex) { - setDecompiledText("-", "// " + AppStrings.translate("decompilationError") + ": " + ex); - } + if (disassemblingNeeded || decompileNeeded) { + CancellableWorker worker = new CancellableWorker() { + @Override + protected Void doInBackground() throws Exception { + ActionList innerActions = actions; if (disassemblingNeeded) { - setEditMode(false); + View.execInEventDispatch(() -> { + setEditorText(asm.getScriptName(), "; " + AppStrings.translate("work.disassembling") + "...", "text/flasm"); + if (decompileNeeded) { + setDecompiledText("-", "// " + AppStrings.translate("work.waitingfordissasembly") + "..."); + } + }); + + DisassemblyListener listener = getDisassemblyListener(); + asm.addDisassemblyListener(listener); + innerActions = asm.getActions(); + asm.removeDisassemblyListener(listener); } if (decompileNeeded) { - setDecompiledEditMode(false); + View.execInEventDispatch(() -> { + setDecompiledText("-", "// " + AppStrings.translate("work.decompiling") + "..."); + }); + + HighlightedText htext = SWF.getCached(asm, innerActions); + setSourceCompleted(asm, htext, innerActions); } - }); + + return null; + } + + @Override + protected void done() { + View.execInEventDispatch(() -> { + setSourceWorker = null; + if (!Main.isDebugging()) { + Main.stopWork(); + } + + try { + get(); + } catch (CancellationException ex) { + setEditorText("-", "; " + AppStrings.translate("work.canceled"), "text/flasm"); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Error", ex); + setDecompiledText("-", "// " + AppStrings.translate("decompilationError") + ": " + ex); + } + }); + } + }; + + worker.execute(); + setSourceWorker = worker; + if (!Main.isDebugging()) { + Main.startWork(AppStrings.translate("work.decompiling") + "...", worker); } - }; - worker.execute(); - setSourceWorker = worker; - if (!Main.isDebugging()) { - Main.startWork(AppStrings.translate("work.decompiling") + "...", worker); + } else { + setSourceCompleted(asm, decompiledText, actions); } } + private void setSourceCompleted(ASMSource asm, HighlightedText decompiledText, ActionList actions) { + View.checkAccess(); + + if (decompiledText == null) { + decompiledText = HighlightedText.EMPTY; + } + + lastASM = asm; + lastCode = actions; + lastDecompiled = decompiledText; + + setHex(getExportMode(), asm.getScriptName(), actions); + setDecompiledText(asm.getScriptName(), decompiledText.text); + } + public void hilightOffset(long offset) { View.checkAccess(); } From f7e5479bdd4b7075eacfeab1319f0b23436ba79b Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 28 Dec 2016 13:25:19 +0100 Subject: [PATCH 018/114] UI thread invoke fixes/improvements 3 --- .../decompiler/flash/gui/DebuggerHandler.java | 9 +--- .../jpexs/decompiler/flash/gui/MainPanel.java | 4 +- .../decompiler/flash/gui/abc/ABCPanel.java | 51 +++++++++++-------- .../flash/gui/abc/DecompiledEditorPane.java | 2 + .../decompiler/flash/gui/abc/DetailPanel.java | 2 +- .../flash/gui/pipes/FirstInstance.java | 4 +- .../flash/gui/player/PlayerControls.java | 7 +-- 7 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index 509c37db3..ce311cd28 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -493,8 +493,7 @@ public class DebuggerHandler implements DebugConnectionListener { @Override public void failedListen(IOException ex) { - View.execInEventDispatchLater(new Runnable() { - + View.execInEventDispatch(new Runnable() { @Override public void run() { disconnect(); @@ -629,7 +628,7 @@ public class DebuggerHandler implements DebugConnectionListener { public void message(InSwfInfo t) { for (InSwfInfo.SwfInfo s : t.swfInfos) { swfs.add(s); - View.execInEventDispatchLater(new Runnable() { + View.execInEventDispatch(new Runnable() { @Override public void run() { try { @@ -643,7 +642,6 @@ public class DebuggerHandler implements DebugConnectionListener { } con.dropMessage(t); } - }); InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); @@ -668,7 +666,6 @@ public class DebuggerHandler implements DebugConnectionListener { connected = true; } con.addMessageListener(new DebugMessageListener() { - @Override public void message(InAskBreakpoints message) { @@ -687,7 +684,6 @@ public class DebuggerHandler implements DebugConnectionListener { } }); con.addMessageListener(new DebugMessageListener() { - @Override public void message(InBreakAt message) { synchronized (DebuggerHandler.this) { @@ -752,7 +748,6 @@ public class DebuggerHandler implements DebugConnectionListener { } con.addMessageListener(new DebugMessageListener() { - @Override public void message(InTrace tr) { for (TraceListener l : traceListeners) { diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index ae6dd9cf6..324ff73bb 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -1073,7 +1073,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } int fmulCount = mulCount; - View.execInEventDispatchLater(() -> { + View.execInEventDispatch(() -> { View.showMessageDialog(null, translate("rename.finished.multiname").replace("%count%", Integer.toString(fmulCount))); if (abcPanel != null) { abcPanel.reload(); @@ -2378,7 +2378,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se long timeAfter = System.currentTimeMillis(); final long timeMs = timeAfter - timeBefore; - View.execInEventDispatchLater(() -> { + View.execInEventDispatch(() -> { setStatus(translate("export.finishedin").replace("%time%", Helper.formatTimeSec(timeMs))); }); } diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index 67c9cb535..fe96e26d4 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -1255,15 +1255,14 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener { + View.execInEventDispatch(() -> { for (int i = 0; i < cnt; i++) { Main.openFile(fileNames[i], null); } @@ -91,7 +91,7 @@ public class FirstInstance { //no break - focus too case "focus": - View.execInEventDispatchLater(new Runnable() { + View.execInEventDispatch(new Runnable() { @Override public void run() { Window wnd = Main.getMainFrame().getWindow(); diff --git a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java index 2f1008f65..27a024a8b 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java +++ b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java @@ -181,12 +181,10 @@ public class PlayerControls extends JPanel implements MediaDisplayListener { frameLabel = new JLabel("0", SwingConstants.CENTER); frameLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); frameLabel.addMouseMotionListener(new MouseMotionAdapter() { - @Override public void mouseMoved(MouseEvent e) { } - }); frameLabel.setVisible(false); @@ -194,7 +192,6 @@ public class PlayerControls extends JPanel implements MediaDisplayListener { zeroCharacterWidth = frameLabel.getFontMetrics(notUnderlinedFont).stringWidth("0"); frameLabel.addMouseListener(new MouseAdapter() { - @Override public void mouseEntered(MouseEvent e) { frameLabel.setFont(underlinedFont); @@ -212,7 +209,6 @@ public class PlayerControls extends JPanel implements MediaDisplayListener { mainPanel.gotoFrame(gotoFrame); } } - }); timeLabel = new JLabel("(00:00.00)"); totalTimeLabel = new JLabel("(00:00.00)"); @@ -441,11 +437,10 @@ public class PlayerControls extends JPanel implements MediaDisplayListener { gotoPanel.add(new JLabel(AppStrings.translate("preview.gotoframe.dialog.message").replace("%min%", "1").replace("%max%", "" + display.getTotalFrames())), BorderLayout.NORTH); gotoPanel.add(frameField, BorderLayout.CENTER); gotoPanel.addAncestorListener(new AncestorListener() { - @Override public void ancestorAdded(AncestorEvent event) { final AncestorListener al = this; - View.execInEventDispatchLater(() -> { + View.execInEventDispatch(() -> { frameField.selectAll(); frameField.requestFocusInWindow(); gotoPanel.removeAncestorListener(al); From 41b381acbea6cf441e0d3426508918f511cbe40a Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 28 Dec 2016 15:51:09 +0100 Subject: [PATCH 019/114] woraround for #1246 Minimum gui-pane widths (since version 8) make FFDEC unusable on small monitors --- .../decompiler/flash/gui/LazyCardLayout.java | 47 +++++++++++++++++++ .../jpexs/decompiler/flash/gui/MainPanel.java | 44 ++++++++++------- .../flash/gui/action/ActionPanel.java | 4 +- 3 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 src/com/jpexs/decompiler/flash/gui/LazyCardLayout.java diff --git a/src/com/jpexs/decompiler/flash/gui/LazyCardLayout.java b/src/com/jpexs/decompiler/flash/gui/LazyCardLayout.java new file mode 100644 index 000000000..b5282b974 --- /dev/null +++ b/src/com/jpexs/decompiler/flash/gui/LazyCardLayout.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import java.awt.CardLayout; +import java.awt.Component; +import java.awt.Container; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author JPEXS + */ +public class LazyCardLayout extends CardLayout { + + private final Map registeredComponents = new HashMap<>(); + + @Override + public void show(Container parent, String name) { + + Component component = registeredComponents.get(name); + if (component != null && component.getParent() != parent) { + parent.add(component, name); + } + + super.show(parent, name); + } + + public void registerLayout(Component component, String card) { + registeredComponents.put(card, component); + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 324ff73bb..fdddb5bf5 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -684,9 +684,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se }); searchPanel.add(closeSearchButton, BorderLayout.EAST); searchPanel.setVisible(false); - treePanel = new JPanel(new CardLayout()); - treePanel.add(createResourcesViewCard(), RESOURCES_VIEW); - treePanel.add(createDumpViewCard(), DUMP_VIEW); + + LazyCardLayout treePanelLayout = new LazyCardLayout(); + treePanelLayout.registerLayout(createResourcesViewCard(), RESOURCES_VIEW); + treePanelLayout.registerLayout(createDumpViewCard(), DUMP_VIEW); + treePanel = new JPanel(treePanelLayout); + //treePanel.add(searchPanel, BorderLayout.SOUTH); //searchPanel.setVisible(false); filterField.getDocument().addDocumentListener(new DocumentListener() { @@ -719,13 +722,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se timelineViewPanel = new TimelineViewPanel(); - CardLayout cl3 = new CardLayout(); - contentPanel = new JPanel(cl3); + contentPanel = new JPanel(new CardLayout()); contentPanel.add(welcomePanel, WELCOME_PANEL); contentPanel.add(splitPane1, SPLIT_PANE1); contentPanel.add(timelineViewPanel, TIMELINE_PANEL); add(contentPanel); - cl3.show(contentPanel, WELCOME_PANEL); + showContentPanelCard(WELCOME_PANEL); tagTree.addKeyListener(new KeyAdapter() { @Override @@ -846,8 +848,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } if (isWelcomeScreen) { - CardLayout cl = (CardLayout) (contentPanel.getLayout()); - cl.show(contentPanel, SPLIT_PANE1); + showContentPanelCard(SPLIT_PANE1); isWelcomeScreen = false; } @@ -883,8 +884,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se View.checkAccess(); if (!isWelcomeScreen && swfs.isEmpty()) { - CardLayout cl = (CardLayout) (contentPanel.getLayout()); - cl.show(contentPanel, WELCOME_PANEL); + showContentPanelCard(WELCOME_PANEL); isWelcomeScreen = true; closeTagTreeSearch(); } @@ -3157,27 +3157,35 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se return r; } - public boolean showView(int view) { - + private void showContentPanelCard(String card) { CardLayout cl = (CardLayout) (contentPanel.getLayout()); - CardLayout cl2 = (CardLayout) (treePanel.getLayout()); + cl.show(contentPanel, card); + } + + private void showTreePanelCard(String card) { + CardLayout cl = (CardLayout) (treePanel.getLayout()); + cl.show(treePanel, card); + } + + public boolean showView(int view) { + View.checkAccess(); setTreeModel(view); switch (view) { case VIEW_DUMP: if (!isWelcomeScreen) { - cl.show(contentPanel, SPLIT_PANE1); + showContentPanelCard(SPLIT_PANE1); } - cl2.show(treePanel, DUMP_VIEW); + showTreePanelCard(DUMP_VIEW); treePanelMode = TreePanelMode.DUMP_TREE; showDetail(DETAILCARDEMPTYPANEL); reload(true); return true; case VIEW_RESOURCES: if (!isWelcomeScreen) { - cl.show(contentPanel, SPLIT_PANE1); + showContentPanelCard(SPLIT_PANE1); } - cl2.show(treePanel, RESOURCES_VIEW); + showTreePanelCard(RESOURCES_VIEW); treePanelMode = TreePanelMode.TAG_TREE; @@ -3204,7 +3212,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se } else { timelineViewPanel.setTimelined(swf); } - cl.show(contentPanel, TIMELINE_PANEL); + showContentPanelCard(TIMELINE_PANEL); return true; } return false; diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 7bc064c9e..590ac854d 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -477,7 +477,9 @@ public class ActionPanel extends JPanel implements SearchListener { + setSourceCompleted(asm, htext, innerActions); + }); } return null; From f786c349105f335dd26937382fc8b229b0d0d1cb Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 28 Dec 2016 15:53:07 +0100 Subject: [PATCH 020/114] build fix --- src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 590ac854d..392548d96 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -477,8 +477,9 @@ public class ActionPanel extends JPanel implements SearchListener { - setSourceCompleted(asm, htext, innerActions); + setSourceCompleted(asm, htext, finalActions); }); } From cf58f71f10fc99ee45fc15ac47939a44cddd9581 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Fri, 30 Dec 2016 21:19:48 +0100 Subject: [PATCH 021/114] AVM2 execution fixes --- .../decompiler/flash/abc/avm2/AVM2Code.java | 34 +++++-- .../decompiler/flash/abc/avm2/CodeStats.java | 3 + .../construction/ConstructIns.java | 28 ++++-- .../construction/ConstructSuperIns.java | 23 +++-- .../avm2/instructions/types/AsTypeIns.java | 5 + .../instructions/types/AsTypeLateIns.java | 5 + .../parser/script/AVM2SourceGenerator.java | 12 ++- .../flash/abc/types/MethodBody.java | 15 +++ .../flash/ActionScript3DeobfuscatorTest.java | 6 +- .../flash/gui/AdobeFlashExecutor.java | 2 +- .../decompiler/flash/gui/FlashPlayerTest.java | 94 ++++++++++++++++++- 11 files changed, 189 insertions(+), 38 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 911626f6f..88aad0683 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -274,8 +274,6 @@ import com.jpexs.decompiler.flash.abc.types.MethodInfo; import com.jpexs.decompiler.flash.abc.types.Multiname; import com.jpexs.decompiler.flash.abc.types.ValueKind; import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; -import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; import com.jpexs.decompiler.flash.configuration.Configuration; @@ -746,7 +744,9 @@ public class AVM2Code implements Cloneable { lda.runtimeInfo = runtimeInfo; for (AVM2Instruction ins : code) { - ins.definition.verify(lda, constants, ins); + if (!(ins.definition instanceof CallSuperVoidIns)) { + ins.definition.verify(lda, constants, ins); + } } while (pos < code.size()) { @@ -2129,7 +2129,6 @@ public class AVM2Code implements Cloneable { public void updateInstructionByteCountByAddr(long instructionAddress, int byteDelta, MethodBody body) { if (byteDelta != 0) { updateOffsets(new OffsetUpdater() { - @Override public long updateInstructionOffset(long address) { if (address > instructionAddress) { @@ -2200,7 +2199,6 @@ public class AVM2Code implements Cloneable { final List insAddrToRemove = new ArrayList<>(); final long endOffset = getEndOffset(); updateOffsets(new OffsetUpdater() { - @Override public long updateInstructionOffset(long address) { return address; @@ -2213,7 +2211,6 @@ public class AVM2Code implements Cloneable { } return offset; } - }, body); boolean someIgnored = false; @@ -2232,7 +2229,6 @@ public class AVM2Code implements Cloneable { public void checkValidOffsets(MethodBody body) { updateOffsets(new OffsetUpdater() { - @Override public long updateInstructionOffset(long address) { adr2pos(address); @@ -2247,7 +2243,6 @@ public class AVM2Code implements Cloneable { adr2pos(targetAddress); return offset; } - }, body); } @@ -2329,7 +2324,6 @@ public class AVM2Code implements Cloneable { if (byteDelta != 0) { updateOffsets(new OffsetUpdater() { - @Override public long updateInstructionOffset(long address) { if (address > instruction.getAddress()) { @@ -2380,7 +2374,6 @@ public class AVM2Code implements Cloneable { } final long x = instruction.getAddress(); updateOffsets(new OffsetUpdater() { - @Override public long updateInstructionOffset(long offset) { if (offset >= x) { @@ -2612,6 +2605,27 @@ public class AVM2Code implements Cloneable { return stats; } + // simplified varions of getStats. This method calculates only the maxlocal value + public CodeStats getMaxLocal() { + CodeStats stats = new CodeStats(); + for (AVM2Instruction ins : code) { + if (ins.definition instanceof SetLocalTypeIns) { + handleRegister(stats, ((SetLocalTypeIns) ins.definition).getRegisterId(ins)); + } else if (ins.definition instanceof GetLocalTypeIns) { + handleRegister(stats, ((GetLocalTypeIns) ins.definition).getRegisterId(ins)); + } else { + for (int i = 0; i < ins.definition.operands.length; i++) { + int op = ins.definition.operands[i]; + if (op == DAT_LOCAL_REG_INDEX) { + handleRegister(stats, ins.operands[i]); + } + } + } + } + + return stats; + } + private void visitCode(int ip, int lastIp, HashMap> refs) throws InterruptedException { List toVisit = new ArrayList<>(); List toVisitLast = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java index e1816668f..c51fb3f67 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/CodeStats.java @@ -57,6 +57,9 @@ public class CodeStats { return writer; } + public CodeStats() { + } + public CodeStats(AVM2Code code) { instructionStats = new InstructionStats[code.code.size()]; for (int i = 0; i < code.code.size(); i++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java index 5d83071e0..93b64c618 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructIns.java @@ -34,9 +34,11 @@ import com.jpexs.decompiler.flash.abc.avm2.model.RegExpAvm2Item; import com.jpexs.decompiler.flash.abc.avm2.model.StringAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.XMLAVM2Item; import com.jpexs.decompiler.flash.abc.avm2.model.operations.AddAVM2Item; +import com.jpexs.decompiler.flash.ecma.ObjectType; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -49,18 +51,28 @@ public class ConstructIns extends InstructionDefinition { super(0x42, "construct", new int[]{AVM2Code.DAT_ARG_COUNT}, true); } + @Override + public boolean isNotCompileTimeSupported() { + return true; + } + @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { - /*int argCount = ins.getParamAsLong(constants, 0).intValue(); - List passArguments = new ArrayList(); - for (int i = argCount - 1; i >= 0; i--) { - passArguments.set(i, lda.operandStack.pop()); - } - Object obj = lda.operandStack.pop();*/ + int argCount = ins.getParamAsLong(constants, 0).intValue(); + List passArguments = new ArrayList(); + for (int i = argCount - 1; i >= 0; i--) { + passArguments.set(i, lda.operandStack.pop()); + } + + Object obj = lda.operandStack.pop(); //lda.executionException = "Cannot call constructor"; - return false; - //call construct property of obj + + ObjectType result = new ObjectType(new HashMap<>()); + //todo: call construct property of obj + //push new instance + lda.operandStack.push(result); + return true; } public static boolean walkXML(GraphTargetItem item, List list) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructSuperIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructSuperIns.java index 231168226..cf8042ca1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructSuperIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/construction/ConstructSuperIns.java @@ -39,18 +39,25 @@ public class ConstructSuperIns extends InstructionDefinition { super(0x49, "constructsuper", new int[]{AVM2Code.DAT_ARG_COUNT}, true); } + @Override + public boolean isNotCompileTimeSupported() { + return true; + } + @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { - /*int argCount = ins.getParamAsLong(constants, 0).intValue(); - List passArguments = new ArrayList(); - for (int i = argCount - 1; i >= 0; i--) { - passArguments.set(i, lda.operandStack.pop()); - } - Object obj = lda.operandStack.pop();*/ + int argCount = ins.getParamAsLong(constants, 0).intValue(); + List passArguments = new ArrayList(); + for (int i = argCount - 1; i >= 0; i--) { + passArguments.set(i, lda.operandStack.pop()); + } + + Object obj = lda.operandStack.pop(); //lda.executionException = "Cannot call super constructor"; - return false; - //call construct property of obj + + //todo: call construct property of obj //do not push anything + return true; } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java index 4d2ebec49..87b49b155 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeIns.java @@ -41,6 +41,11 @@ public class AsTypeIns extends InstructionDefinition { super(0x86, "astype", new int[]{AVM2Code.DAT_MULTINAME_INDEX}, true); } + @Override + public boolean isNotCompileTimeSupported() { + return true; + } + @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { //Long typeIndex = ins.getParamAsLong(constants, 0); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeLateIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeLateIns.java index 40e40a40e..8532f8ef7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeLateIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/types/AsTypeLateIns.java @@ -38,6 +38,11 @@ public class AsTypeLateIns extends InstructionDefinition { super(0x87, "astypelate", new int[]{}, true); } + @Override + public boolean isNotCompileTimeSupported() { + return true; + } + @Override public boolean execute(LocalDataArea lda, AVM2ConstantPool constants, AVM2Instruction ins) { //Object objClass = lda.operandStack.pop(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java index c78ecea02..5cf36f9d0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/AVM2SourceGenerator.java @@ -449,7 +449,6 @@ public class AVM2SourceGenerator implements SourceGenerator { )); GraphTargetItem assigned = new GraphTargetItem() { - @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { return null; @@ -2125,11 +2124,17 @@ public class AVM2SourceGenerator implements SourceGenerator { continue; } if (item instanceof InterfaceAVM2Item) { - generateClass(((InterfaceAVM2Item) item).pkg.getCpoolIndex(abcIndex), abcIndex.getSelectedAbc().class_info.get(((TraitClass) traits[k]).class_info), abcIndex.getSelectedAbc().instance_info.get(((TraitClass) traits[k]).class_info), initScopes.get(traits[k]), ((InterfaceAVM2Item) item).pkg.name, localData, (InterfaceAVM2Item) item, class_index); + ABC abc = abcIndex.getSelectedAbc(); + TraitClass trait = (TraitClass) traits[k]; + InterfaceAVM2Item iitem = (InterfaceAVM2Item) item; + generateClass(iitem.pkg.getCpoolIndex(abcIndex), abc.class_info.get(trait.class_info), abc.instance_info.get(trait.class_info), initScopes.get(trait), iitem.pkg.name, localData, iitem, class_index); } if (item instanceof ClassAVM2Item) { - generateClass(((ClassAVM2Item) item).pkg.getCpoolIndex(abcIndex), abcIndex.getSelectedAbc().class_info.get(((TraitClass) traits[k]).class_info), abcIndex.getSelectedAbc().instance_info.get(((TraitClass) traits[k]).class_info), initScopes.get(traits[k]), ((ClassAVM2Item) item).pkg.name, localData, (ClassAVM2Item) item, class_index); + ABC abc = abcIndex.getSelectedAbc(); + TraitClass trait = (TraitClass) traits[k]; + ClassAVM2Item citem = (ClassAVM2Item) item; + generateClass(citem.pkg.getCpoolIndex(abcIndex), abc.class_info.get(trait.class_info), abc.instance_info.get(trait.class_info), initScopes.get(trait), citem.pkg.name, localData, citem, class_index); } if ((item instanceof MethodAVM2Item) || (item instanceof GetterAVM2Item) || (item instanceof SetterAVM2Item)) { MethodAVM2Item mai = (MethodAVM2Item) item; @@ -2713,5 +2718,4 @@ public class AVM2SourceGenerator implements SourceGenerator { List ret = new ArrayList<>(); return ret; } - } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java index 6f0b5c436..943b02480 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodBody.java @@ -475,4 +475,19 @@ public final class MethodBody implements Cloneable { } return true; } + + public boolean autoFillMaxRegs(ABC abc) { + CodeStats stats = getCode().getMaxLocal(); + if (stats == null) { + return false; + } + max_regs = stats.maxlocal; + MethodInfo mi = abc.method_info.get(method_info); + int min_regs = mi.param_types.length + 1 + (mi.flagNeed_rest() ? 1 : 0); + if (max_regs < min_regs) { + max_regs = min_regs; + } + + return true; + } } diff --git a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java index dc219973c..b6d9e0a0e 100644 --- a/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java +++ b/libsrc/ffdec_lib/test/com/jpexs/decompiler/flash/ActionScript3DeobfuscatorTest.java @@ -49,7 +49,9 @@ import org.testng.annotations.Test; * * @author JPEXS */ -public class ActionScript3DeobfuscatorTest extends ActionScript2TestBase { +public class ActionScript3DeobfuscatorTest extends ActionScriptTestBase { + + protected SWF swf; @BeforeClass public void init() throws IOException, InterruptedException { @@ -67,7 +69,6 @@ public class ActionScript3DeobfuscatorTest extends ActionScript2TestBase { + str + "returnvoid\r\n"; final ABC abc = new ABC(new ABCContainerTag() { - @Override public ABC getABC() { return null; @@ -96,7 +97,6 @@ public class ActionScript3DeobfuscatorTest extends ActionScript2TestBase { private String recompile(String str) throws AVM2ParseException, IOException, CompilationException, InterruptedException { str = "package { public class Test { public static function trace(s){ } public static function test(){ " + str + " } } }"; final ABC abc = new ABC(new ABCContainerTag() { - @Override public ABC getABC() { return null; diff --git a/test/com/jpexs/decompiler/flash/gui/AdobeFlashExecutor.java b/test/com/jpexs/decompiler/flash/gui/AdobeFlashExecutor.java index 91d659809..bbd77072d 100644 --- a/test/com/jpexs/decompiler/flash/gui/AdobeFlashExecutor.java +++ b/test/com/jpexs/decompiler/flash/gui/AdobeFlashExecutor.java @@ -85,7 +85,6 @@ public class AdobeFlashExecutor { flash.setAllowScriptAccess("always"); flash.setAllowNetworking("all"); flash.addFSCommandListener(new ActiveXEventListener() { - @Override public void onEvent(ActiveXEvent axe) { resultRef.setVal((String) axe.args.get("args")); @@ -363,6 +362,7 @@ public class AdobeFlashExecutor { methodBody.max_scope_depth = 10; methodBody.setCode(code); + methodBody.autoFillMaxRegs(abc); return methodTrait.name_index; } diff --git a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java index 9fdebc123..83d23c4d3 100644 --- a/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java +++ b/test/com/jpexs/decompiler/flash/gui/FlashPlayerTest.java @@ -16,6 +16,7 @@ */ package com.jpexs.decompiler.flash.gui; +import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; import com.jpexs.decompiler.flash.abc.avm2.AVM2Runtime; @@ -25,6 +26,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instructions; import com.jpexs.decompiler.flash.abc.avm2.instructions.IfTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; +import com.jpexs.decompiler.flash.abc.types.MethodBody; import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionLocalData; import com.jpexs.decompiler.flash.action.LocalDataArea; @@ -73,10 +75,15 @@ import com.jpexs.decompiler.flash.action.swf6.ActionStringGreater; import com.jpexs.decompiler.flash.ecma.EcmaScript; import com.jpexs.decompiler.flash.ecma.Null; import com.jpexs.decompiler.flash.ecma.Undefined; +import com.jpexs.decompiler.flash.tags.ABCContainerTag; import com.jpexs.decompiler.graph.Graph; import com.jpexs.decompiler.graph.GraphTargetItem; import com.jpexs.decompiler.graph.TranslateStack; import com.jpexs.helpers.Helper; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -94,7 +101,83 @@ public class FlashPlayerTest { private final Random random = new Random(); - private final AVM2RuntimeInfo adobeRuntime = new AVM2RuntimeInfo(AVM2Runtime.ADOBE_FLASH, 19, false); + private final AVM2RuntimeInfo adobeRuntime = new AVM2RuntimeInfo(AVM2Runtime.ADOBE_FLASH, 19, true); + + //@Test + public void testAs3Files() throws IOException, InterruptedException { + List files = new ArrayList<>(); + File dir = new File("..\\swf"); + if (dir.exists()) { + File[] fs = dir.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".swf") && !name.toLowerCase().endsWith(".recompiled.swf"); + } + }); + for (File f : fs) { + files.add(dir.getAbsolutePath() + File.separator + f.getName()); + } + } + + for (String file : files) { + SWF swf = new SWF(new BufferedInputStream(new FileInputStream(file)), true); + List abcs = swf.getAbcList(); + for (ABCContainerTag abcContainer : abcs) { + ABC abc = abcContainer.getABC(); + + for (MethodBody body : abc.bodies) { + if (body.method_info != 55) { + continue; + } + + AVM2Code code = body.getCode(); + + AdobeFlashExecutor adobeExecutor = new AdobeFlashExecutor(); + + adobeExecutor.loadTestSwf(); + ABC testAbc = adobeExecutor.as3TestSwfAbcTag.getABC(); + testAbc.constants.ensureStringCapacity(1000000); + testAbc.constants.ensureMultinameCapacity(1000000); + + List tasks = new ArrayList<>(); + { + AS3ExecuteTask task = new AS3ExecuteTask(); + task.description = swf.getFileTitle() + " " + body.method_info; + while (code.code.size() > 9) { + code.code.remove(code.code.size() - 1); + } + task.code = code; + tasks.add(task); + } + + adobeExecutor.executeAvm2(tasks); + + for (AS3ExecuteTask task : tasks) { + + String ffdecExecuteResult; + try { + Object res = task.code.execute(new HashMap<>(), testAbc.constants, adobeRuntime); + ffdecExecuteResult = "Result:" + EcmaScript.toString(res) + " Type:" + EcmaScript.typeString(res); + } catch (AVM2ExecutionException ex) { + ffdecExecuteResult = "Error:" + ex.getMessage(); + } + + task.ffdecResult = ffdecExecuteResult; + } + + for (AS3ExecuteTask task : tasks) { + System.out.println("Flash result (" + task.description + "): " + task.flashResult); + System.out.println("FFDec execte result: " + task.ffdecResult); + if (!task.ffdecResult.equals(task.flashResult)) { + System.out.println(code.toASMSource(testAbc.constants)); + } + + assertEquals(task.ffdecResult, task.flashResult); + } + } + } + } + } //@Test public void testAs3Pushes() throws IOException, InterruptedException { @@ -119,20 +202,23 @@ public class FlashPlayerTest { AS3ExecuteTask task = new AS3ExecuteTask(); task.description = p1 + ", " + pushes[p1].definition.instructionName; task.code = ccode; + tasks.add(task); + } + adobeExecutor.executeAvm2(tasks); + + for (AS3ExecuteTask task : tasks) { String ffdecExecuteResult; try { - Object res = ccode.execute(new HashMap<>(), abc.constants, adobeRuntime); + Object res = task.code.execute(new HashMap<>(), abc.constants, adobeRuntime); ffdecExecuteResult = "Result:" + EcmaScript.toString(res) + " Type:" + EcmaScript.typeString(res); } catch (AVM2ExecutionException ex) { ffdecExecuteResult = "Error:" + ex.getMessage(); } task.ffdecResult = ffdecExecuteResult; - tasks.add(task); } - adobeExecutor.executeAvm2(tasks); for (AS3ExecuteTask task : tasks) { System.out.println("Flash result (" + task.description + "): " + task.flashResult); System.out.println("FFDec execte result: " + task.ffdecResult); From b13bd62e5f1b60e7c66fc2afd4920c42b7872df0 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 31 Dec 2016 17:06:45 +0100 Subject: [PATCH 022/114] #1333 Exporting sprites as swf files --- CHANGELOG.md | 1 + .../src/com/jpexs/decompiler/flash/SWF.java | 45 +- .../com/jpexs/decompiler/flash/SWFHeader.java | 5 + .../decompiler/flash/abc/avm2/AVM2Code.java | 6 +- .../flash/exporters/FrameExporter.java | 64 +- .../flash/exporters/MorphShapeExporter.java | 16 +- .../flash/exporters/PreviewExporter.java | 564 ++++++++++++++++++ .../flash/exporters/ShapeExporter.java | 27 +- .../exporters/modes/ButtonExportMode.java | 4 +- .../exporters/modes/FrameExportMode.java | 4 +- .../exporters/modes/MorphShapeExportMode.java | 15 +- .../exporters/modes/ShapeExportMode.java | 13 +- .../exporters/modes/SpriteExportMode.java | 4 +- .../settings/MorphShapeExportSettings.java | 13 + .../settings/ShapeExportSettings.java | 17 + .../console/CommandLineArgumentParser.java | 14 +- .../jpexs/decompiler/flash/gui/MainPanel.java | 49 +- .../decompiler/flash/gui/PreviewPanel.java | 523 +--------------- .../flash/gui/abc/ASMSourceEditorPane.java | 2 +- .../flash/gui/locales/ExportDialog.properties | 5 + .../decompiler/flash/gui/tagtree/TagTree.java | 10 +- 21 files changed, 784 insertions(+), 617 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/PreviewExporter.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e0e04bdd9..5473974b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ### Added - [#1240] AS search using multiple threads when parallel speedup is enabled - [#1308] Search by all P-code files in AS3 +- [#1333] Exporting sprites as swf files ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 700085ec8..50c53bce2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -1490,7 +1490,27 @@ public final class SWF implements SWFContainerItem, Timelined { } } + public static SWFHeader decodeHeader(byte[] headerData) throws IOException { + String signature = new String(headerData, 0, 3, Utf8Helper.charset); + if (!swfSignatures.contains(signature)) { + throw new SwfOpenException("Invalid SWF file, wrong signature."); + } + + int version = headerData[3]; + long fileSize; + try (SWFInputStream sis = new SWFInputStream(null, Arrays.copyOfRange(headerData, 4, 8), 4, 4)) { + fileSize = sis.readUI32("fileSize"); + } + + SWFHeader header = new SWFHeader(); + header.version = version; + header.fileSize = fileSize; + header.gfx = headerData[1] == 'F' && headerData[2] == 'X'; + return header; + } + private static SWFHeader decompress(InputStream is, OutputStream os, boolean allowUncompressed) throws IOException { + byte[] hdr = new byte[8]; // SWFheader: signature, version and fileSize @@ -1498,25 +1518,12 @@ public final class SWF implements SWFContainerItem, Timelined { throw new SwfOpenException("SWF header is too short"); } - String signature = new String(hdr, 0, 3, Utf8Helper.charset); - if (!swfSignatures.contains(signature)) { - throw new SwfOpenException("Invalid SWF file, wrong signature."); - } + SWFHeader header = decodeHeader(hdr); + long fileSize = header.fileSize; - int version = hdr[3]; - long fileSize; - try (SWFInputStream sis = new SWFInputStream(null, Arrays.copyOfRange(hdr, 4, 8), 4, 4)) { - fileSize = sis.readUI32("fileSize"); - } - - SWFHeader header = new SWFHeader(); - header.version = version; - header.fileSize = fileSize; - header.gfx = hdr[1] == 'F' && hdr[2] == 'X'; - - try (SWFOutputStream sos = new SWFOutputStream(os, version)) { + try (SWFOutputStream sos = new SWFOutputStream(os, header.version)) { sos.write(getHeaderBytes(SWFCompression.NONE, header.gfx)); - sos.writeUI8(version); + sos.writeUI8(header.version); sos.writeUI32(fileSize); switch (hdr[0]) { @@ -2980,8 +2987,7 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); timelined.resetTimeline(); } else // timeline should be always the swf here - { - if (removeDependencies) { + if (removeDependencies) { removeTagWithDependenciesFromTimeline(tag, timelined.getTimeline()); timelined.setModified(true); } else { @@ -2990,7 +2996,6 @@ public final class SWF implements SWFContainerItem, Timelined { timelined.setModified(true); } } - } } @Override diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFHeader.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFHeader.java index f80296c8a..15526847e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFHeader.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFHeader.java @@ -46,4 +46,9 @@ public class SWFHeader { * ScaleForm GFx */ public boolean gfx = false; + + /** + * Frame rate + */ + public float frameRate; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 88aad0683..4abbf75bd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2173,7 +2173,8 @@ public class AVM2Code implements Cloneable { ins.operands[j] = updater.updateOperandOffset(target, ins.operands[j]); } }*/ //Faster, but not so universal - if (ins.definition instanceof IfTypeIns) { + { + if (ins.definition instanceof IfTypeIns) { long target = ins.getTargetAddress(); try { ins.operands[0] = updater.updateOperandOffset(ins.getAddress(), target, ins.operands[0]); @@ -2181,6 +2182,7 @@ public class AVM2Code implements Cloneable { throw new ConvertException("Invalid offset (" + ins + ")", i); } } + } ins.setAddress(updater.updateInstructionOffset(ins.getAddress())); //Note: changing operands here does not change instruction byte length as offsets are always S24 (not variable length) } @@ -2605,7 +2607,7 @@ public class AVM2Code implements Cloneable { return stats; } - // simplified varions of getStats. This method calculates only the maxlocal value + // simplified version of getStats. This method calculates only the maxlocal value public CodeStats getMaxLocal() { CodeStats stats = new CodeStats(); for (AVM2Instruction ins : code) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java index 5810a690c..68d3fae11 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.AbortRetryIgnoreHandler; import com.jpexs.decompiler.flash.EventListener; import com.jpexs.decompiler.flash.RetryTask; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; @@ -91,7 +92,7 @@ public class FrameExporter { private static final Logger logger = Logger.getLogger(FrameExporter.class.getName()); - public List exportFrames(AbortRetryIgnoreHandler handler, String outdir, SWF swf, int containerId, List frames, ButtonExportSettings settings, EventListener evl) throws IOException, InterruptedException { + public List exportButtonFrames(AbortRetryIgnoreHandler handler, String outdir, SWF swf, int containerId, List frames, ButtonExportSettings settings, EventListener evl) throws IOException, InterruptedException { FrameExportMode fem; switch (settings.mode) { case BMP: @@ -103,15 +104,23 @@ public class FrameExporter { case SVG: fem = FrameExportMode.SVG; break; + case SWF: + fem = FrameExportMode.SWF; + break; default: - throw new Error("Unsupported button export mode"); + throw new Error("Unsupported button export mode: " + settings.mode); + } + + if (frames == null) { + frames = new ArrayList<>(); + frames.add(0); // todo: export all frames } FrameExportSettings fes = new FrameExportSettings(fem, settings.zoom); return exportFrames(handler, outdir, swf, containerId, frames, fes, evl); } - public List exportFrames(AbortRetryIgnoreHandler handler, String outdir, SWF swf, int containerId, List frames, SpriteExportSettings settings, EventListener evl) throws IOException, InterruptedException { + public List exportSpriteFrames(AbortRetryIgnoreHandler handler, String outdir, SWF swf, int containerId, List frames, SpriteExportSettings settings, EventListener evl) throws IOException, InterruptedException { FrameExportMode fem; switch (settings.mode) { case PNG: @@ -135,6 +144,9 @@ public class FrameExporter { case BMP: fem = FrameExportMode.BMP; break; + case SWF: + fem = FrameExportMode.SWF; + break; default: throw new Error("Unsupported sprite export mode"); } @@ -159,11 +171,11 @@ public class FrameExporter { final Timeline tim = tim0; + boolean exportAll = frames == null; if (frames == null) { - int frameCnt = tim.getFrameCount(); frames = new ArrayList<>(); - for (int i = 0; i < frameCnt; i++) { - frames.add(i); + for (Frame frame : tim.getFrames()) { + frames.add(frame.frame); } } @@ -330,10 +342,44 @@ public class FrameExporter { return ret; } - final Timeline ftim = tim; + if (settings.mode == FrameExportMode.SWF) { + Color fBackgroundColor = backgroundColor; + if (exportAll) { + new RetryTask(() -> { + File f = new File(foutdir + File.separator + "frames.swf"); + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(f))) { + try { + new PreviewExporter().exportSwf(fos, swf.getCharacter(containerId), fBackgroundColor, 0); + } catch (ActionParseException ex) { + Logger.getLogger(MorphShapeExporter.class.getName()).log(Level.SEVERE, null, ex); + } + } + + ret.add(f); + }, handler).run(); + } else { + for (Integer frame : fframes) { + new RetryTask(() -> { + File f = new File(foutdir + File.separator + frame + ".swf"); + Frame fn = (Frame) tim.getFrame(frame); + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(f))) { + try { + new PreviewExporter().exportSwf(fos, fn, fBackgroundColor, 0); + } catch (ActionParseException ex) { + Logger.getLogger(MorphShapeExporter.class.getName()).log(Level.SEVERE, null, ex); + } + } + + ret.add(f); + }, handler).run(); + } + } + } + final Color fbackgroundColor = backgroundColor; final Iterator frameImages = new Iterator() { - private int pos = 0; @Override @@ -360,7 +406,7 @@ public class FrameExporter { } int fframe = fframes.get(pos++); - BufferedImage result = SWF.frameToImageGet(ftim, fframe, fframe, null, 0, ftim.displayRect, new Matrix(), null, fbackgroundColor, settings.zoom).getBufferedImage(); + BufferedImage result = SWF.frameToImageGet(tim, fframe, fframe, null, 0, tim.displayRect, new Matrix(), null, fbackgroundColor, settings.zoom).getBufferedImage(); if (evl != null) { evl.handleExportedEvent("frame", pos, fframes.size(), tagName); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java index 0d961850f..a2b7f4b42 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/MorphShapeExporter.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.EventListener; import com.jpexs.decompiler.flash.ReadOnlyTagList; import com.jpexs.decompiler.flash.RetryTask; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; import com.jpexs.decompiler.flash.exporters.modes.MorphShapeExportMode; @@ -44,6 +45,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -83,9 +86,8 @@ public class MorphShapeExporter { if (t instanceof CharacterTag) { characterID = ((CharacterTag) t).getCharacterId(); } - String ext = settings.mode == MorphShapeExportMode.CANVAS ? "html" : "svg"; - final File file = new File(outdir + File.separator + characterID + "." + ext); + final File file = new File(outdir + File.separator + characterID + settings.getFileExtension()); new RetryTask(() -> { MorphShapeTag mst = (MorphShapeTag) t; switch (settings.mode) { @@ -115,6 +117,16 @@ public class MorphShapeExporter { SWF.writeLibrary(ct.getSwf(), needed, baos); fos.write(Utf8Helper.getBytes(cse.getHtml(new String(baos.toByteArray(), Utf8Helper.charset), SWF.getTypePrefix(mst) + mst.getCharacterId(), mst.getRect()))); } + break; + case SWF: + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(file))) { + try { + new PreviewExporter().exportSwf(fos, mst, null, 0); + } catch (ActionParseException ex) { + Logger.getLogger(MorphShapeExporter.class.getName()).log(Level.SEVERE, null, ex); + } + } + break; } }, handler).run(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/PreviewExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/PreviewExporter.java new file mode 100644 index 000000000..a06978760 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/PreviewExporter.java @@ -0,0 +1,564 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFHeader; +import com.jpexs.decompiler.flash.SWFOutputStream; +import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; +import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.tags.DefineBitsTag; +import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag; +import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag; +import com.jpexs.decompiler.flash.tags.DefineSoundTag; +import com.jpexs.decompiler.flash.tags.DefineSpriteTag; +import com.jpexs.decompiler.flash.tags.DefineTextTag; +import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; +import com.jpexs.decompiler.flash.tags.DoActionTag; +import com.jpexs.decompiler.flash.tags.DoInitActionTag; +import com.jpexs.decompiler.flash.tags.EndTag; +import com.jpexs.decompiler.flash.tags.ExportAssetsTag; +import com.jpexs.decompiler.flash.tags.FileAttributesTag; +import com.jpexs.decompiler.flash.tags.JPEGTablesTag; +import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; +import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag; +import com.jpexs.decompiler.flash.tags.ShowFrameTag; +import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.tags.VideoFrameTag; +import com.jpexs.decompiler.flash.tags.base.AloneTag; +import com.jpexs.decompiler.flash.tags.base.BoundedTag; +import com.jpexs.decompiler.flash.tags.base.CharacterIdTag; +import com.jpexs.decompiler.flash.tags.base.CharacterTag; +import com.jpexs.decompiler.flash.tags.base.FontTag; +import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag; +import com.jpexs.decompiler.flash.tags.base.RemoveTag; +import com.jpexs.decompiler.flash.tags.base.SoundStreamHeadTypeTag; +import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont; +import com.jpexs.decompiler.flash.timeline.DepthState; +import com.jpexs.decompiler.flash.timeline.Frame; +import com.jpexs.decompiler.flash.timeline.Timelined; +import com.jpexs.decompiler.flash.treeitems.TreeItem; +import com.jpexs.decompiler.flash.types.GLYPHENTRY; +import com.jpexs.decompiler.flash.types.MATRIX; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.TEXTRECORD; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import java.awt.Color; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public class PreviewExporter { + + // play morph shape in 2 second(s) + public static final int MORPH_SHAPE_ANIMATION_LENGTH = 2; + + public static final int MORPH_SHAPE_ANIMATION_FRAME_RATE = 30; + + public SWFHeader exportSwf(OutputStream os, TreeItem treeItem, Color backgroundColor, int fontPageNum) throws IOException, ActionParseException { + SWF swf = treeItem.getSwf(); + + int frameCount = 1; + float frameRate = swf.frameRate; + HashMap videoFrames = new HashMap<>(); + if (treeItem instanceof DefineVideoStreamTag) { + DefineVideoStreamTag vs = (DefineVideoStreamTag) treeItem; + SWF.populateVideoFrames(vs.getCharacterId(), swf.getTags(), videoFrames); + frameCount = videoFrames.size(); + } + + List soundFrames = new ArrayList<>(); + if (treeItem instanceof SoundStreamHeadTypeTag) { + soundFrames = ((SoundStreamHeadTypeTag) treeItem).getBlocks(); + frameCount = soundFrames.size(); + } + + if ((treeItem instanceof DefineMorphShapeTag) || (treeItem instanceof DefineMorphShape2Tag)) { + frameRate = MORPH_SHAPE_ANIMATION_FRAME_RATE; + frameCount = (int) (MORPH_SHAPE_ANIMATION_LENGTH * frameRate); + } + + if (treeItem instanceof DefineSoundTag) { + frameCount = 1; + } + + if (treeItem instanceof DefineSpriteTag) { + frameCount = ((DefineSpriteTag) treeItem).frameCount; + } + + byte[] data; + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + SWFOutputStream sos2 = new SWFOutputStream(baos, SWF.DEFAULT_VERSION); + RECT outrect = new RECT(swf.displayRect); + + RECT treeItemBounds = null; + if (treeItem instanceof FontTag) { + outrect.Xmin = 0; + outrect.Ymin = 0; + outrect.Xmax = FontTag.PREVIEWSIZE * 20; + outrect.Ymax = FontTag.PREVIEWSIZE * 20; + } else if (treeItem instanceof BoundedTag) { + treeItemBounds = ((BoundedTag) treeItem).getRect(); + } else if (treeItem instanceof Frame) { + treeItemBounds = ((Frame) treeItem).timeline.timelined.getRect(); + } + + if (treeItemBounds != null) { + if (outrect.getWidth() < treeItemBounds.getWidth()) { + outrect.Xmax += treeItemBounds.getWidth() - outrect.getWidth(); + } + + if (outrect.getHeight() < treeItemBounds.getHeight()) { + outrect.Ymax += treeItemBounds.getHeight() - outrect.getHeight(); + } + } + + int width = outrect.getWidth(); + int height = outrect.getHeight(); + + sos2.writeRECT(outrect); + sos2.writeFIXED8(frameRate); + sos2.writeUI16(frameCount); //framecnt + + FileAttributesTag fa = swf.getFileAttributes(); + if (fa != null) { + fa.writeTag(sos2); + } + + SetBackgroundColorTag setBgColorTag = swf.getBackgroundColor(); + if (setBgColorTag == null && backgroundColor != null) { + setBgColorTag = new SetBackgroundColorTag(swf, new RGB(backgroundColor)); + } + + if (setBgColorTag != null) { + setBgColorTag.writeTag(sos2); + } + + if (treeItem instanceof Frame) { + Frame fn = (Frame) treeItem; + Timelined parent = fn.timeline.timelined; + + Set doneCharacters = new HashSet<>(); + for (Tag t : parent.getTags()) { + if (t instanceof FileAttributesTag || t instanceof SetBackgroundColorTag) { + continue; + } + + if (t instanceof DoActionTag || t instanceof DoInitActionTag) { + // todo: Maybe DoABC tags should be removed, too + continue; + } + + Set needed = new HashSet<>(); + t.getNeededCharactersDeep(needed); + for (int n : needed) { + if (!doneCharacters.contains(n)) { + writeTag(swf.getCharacter(n), sos2); + doneCharacters.add(n); + } + } + + //if (t instanceof ShowFrameTag || t instanceof PlaceObjectTypeTag || t instanceof RemoveTag) { + // continue; + //} + if (t instanceof CharacterTag) { + int characterId = ((CharacterTag) t).getCharacterId(); + doneCharacters.add(characterId); + writeTag(t, sos2); + } + } + + RECT r = parent.getRect(); + for (Map.Entry value : fn.layers.entrySet()) { + PlaceObjectTypeTag pot = value.getValue().toPlaceObjectTag(value.getKey()); + MATRIX mat = new MATRIX(pot.getMatrix()); + mat.translateX += width / 2 - r.getWidth() / 2; + mat.translateY += height / 2 - r.getHeight() / 2; + pot.setMatrix(mat); + pot.writeTag(sos2); + } + + new ShowFrameTag(swf).writeTag(sos2); + } else { + boolean isSprite = false; + if (treeItem instanceof DefineSpriteTag) { + isSprite = true; + } + int chtId = -1; + if (treeItem instanceof CharacterTag) { + chtId = ((CharacterTag) treeItem).getCharacterId(); + } + + if (treeItem instanceof DefineBitsTag) { + JPEGTablesTag jtt = swf.getJtt(); + if (jtt != null) { + jtt.writeTag(sos2); + } + } else if (treeItem instanceof AloneTag) { + } else { + Set needed = new HashSet<>(); + ((Tag) treeItem).getNeededCharactersDeep(needed); + for (int n : needed) { + if (isSprite && chtId == n) { + continue; + } + + CharacterTag characterTag = swf.getCharacter(n); + if (characterTag instanceof DefineBitsTag) { + JPEGTablesTag jtt = swf.getJtt(); + if (jtt != null) { + jtt.writeTag(sos2); + } + } + + writeTag(characterTag, sos2); + } + } + + writeTag((Tag) treeItem, sos2); + + MATRIX mat = new MATRIX(); + mat.hasRotate = false; + mat.hasScale = false; + mat.translateX = 0; + mat.translateY = 0; + if (treeItem instanceof BoundedTag) { + RECT r = ((BoundedTag) treeItem).getRect(); + mat.translateX = -r.Xmin; + mat.translateY = -r.Ymin; + mat.translateX = mat.translateX + width / 2 - r.getWidth() / 2; + mat.translateY = mat.translateY + height / 2 - r.getHeight() / 2; + } else { + mat.translateX = width / 4; + mat.translateY = height / 4; + } + if (treeItem instanceof FontTag) { + FontTag ft = (FontTag) classicTag((Tag) treeItem); + + int countGlyphsTotal = ft.getGlyphShapeTable().size(); + int countGlyphs = Math.min(SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW, countGlyphsTotal); + int fontId = ft.getFontId(); + int cols = (int) Math.ceil(Math.sqrt(countGlyphs)); + int rows = (int) Math.ceil(((float) countGlyphs) / ((float) cols)); + if (rows == 0) { + rows = 1; + cols = 1; + } + int x = 0; + int y = 0; + int firstGlyphIndex = fontPageNum * SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW; + countGlyphs = Math.min(SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW, countGlyphsTotal - firstGlyphIndex); + List shapes = ft.getGlyphShapeTable(); + int maxw = 0; + for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { + RECT b = shapes.get(f).getBounds(); + if (b.Xmin == Integer.MAX_VALUE) { + continue; + } + if (b.Ymin == Integer.MAX_VALUE) { + continue; + } + int w = (int) (b.getWidth() / ft.getDivider()); + if (w > maxw) { + maxw = w; + } + x++; + } + + x = 0; + + int BORDER = 3 * 20; + + int textHeight = height / rows; + + while (maxw * textHeight / 1024.0 > width / cols - 2 * BORDER) { + textHeight--; + } + + MATRIX tmat = new MATRIX(); + for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { + if (x >= cols) { + x = 0; + y++; + } + List rec = new ArrayList<>(); + TEXTRECORD tr = new TEXTRECORD(); + + RECT b = shapes.get(f).getBounds(); + int xmin = b.Xmin == Integer.MAX_VALUE ? 0 : (int) (b.Xmin / ft.getDivider()); + xmin *= textHeight / 1024.0; + int ymin = b.Ymin == Integer.MAX_VALUE ? 0 : (int) (b.Ymin / ft.getDivider()); + ymin *= textHeight / 1024.0; + int w = (int) (b.getWidth() / ft.getDivider()); + w *= textHeight / 1024.0; + int h = (int) (b.getHeight() / ft.getDivider()); + h *= textHeight / 1024.0; + + tr.fontId = fontId; + tr.styleFlagsHasFont = true; + tr.textHeight = textHeight; + tr.xOffset = -xmin; + tr.yOffset = 0; + tr.styleFlagsHasXOffset = true; + tr.styleFlagsHasYOffset = true; + tr.glyphEntries = new ArrayList<>(1); + tr.styleFlagsHasColor = true; + tr.textColor = new RGB(0, 0, 0); + GLYPHENTRY ge = new GLYPHENTRY(); + + double ga = ft.getGlyphAdvance(f); + int cw = ga == -1 ? w : (int) (ga / ft.getDivider() * textHeight / 1024.0); + + ge.glyphAdvance = 0; + ge.glyphIndex = f; + tr.glyphEntries.add(ge); + rec.add(tr); + + tmat.translateX = x * width / cols + width / cols / 2 - w / 2; + tmat.translateY = y * height / rows + height / rows / 2; + new DefineTextTag(swf, 999 + f, new RECT(0, cw, ymin, ymin + h), new MATRIX(), rec).writeTag(sos2); + new PlaceObject2Tag(swf, false, 1 + f, 999 + f, tmat, null, 0, null, -1, null).writeTag(sos2); + x++; + } + new ShowFrameTag(swf).writeTag(sos2); + } else if ((treeItem instanceof DefineMorphShapeTag) || (treeItem instanceof DefineMorphShape2Tag)) { + new PlaceObject2Tag(swf, false, 1, chtId, mat, null, 0, null, -1, null).writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + for (int ratio = 0; ratio < 65536; ratio += 65536 / frameCount) { + new PlaceObject2Tag(swf, true, 1, chtId, mat, null, ratio, null, -1, null).writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + } + } else if (treeItem instanceof SoundStreamHeadTypeTag) { + for (SoundStreamBlockTag blk : soundFrames) { + blk.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + } + } else if (treeItem instanceof DefineSoundTag) { + ExportAssetsTag ea = new ExportAssetsTag(swf); + DefineSoundTag ds = (DefineSoundTag) treeItem; + ea.tags.add(ds.soundId); + ea.names.add("my_define_sound"); + ea.writeTag(sos2); + List actions; + DoActionTag doa; + + doa = new DoActionTag(swf, null); + actions = ASMParser.parse(0, false, + "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\"\n" + + "Push \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\" 0.0 \"Sound\"\n" + + "NewObject\n" + + "SetMember\n" + + "Push \"my_define_sound\" 1 \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"attachSound\"\n" + + "CallMethod\n" + + "Pop\n" + + "Stop", swf.version, false); + doa.setActions(actions); + doa.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + + actions = ASMParser.parse(0, false, + "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\" \"start\"\n" + + "StopSounds\n" + + "Push \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\" 0.0 \"Sound\"\n" + + "NewObject\n" + + "SetMember\n" + + "Push \"my_define_sound\" 1 \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"attachSound\"\n" + + "CallMethod\n" + + "Pop\n" + + "Push 9999 0.0 2 \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"start\"\n" + + "CallMethod\n" + + "Pop\n" + + "Stop", swf.version, false); + doa.setActions(actions); + doa.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + + actions = ASMParser.parse(0, false, + "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\" \"onSoundComplete\" \"start\" \"execParam\"\n" + + "StopSounds\n" + + "Push \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\" 0.0 \"Sound\"\n" + + "NewObject\n" + + "SetMember\n" + + "Push \"my_define_sound\" 1 \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"attachSound\"\n" + + "CallMethod\n" + + "Pop\n" + + "Push \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"onSoundComplete\"\n" + + "DefineFunction2 \"\" 0 2 false true true false true false true false false {\n" + + "Push 0.0 register1 \"my_sound\"\n" + + "GetMember\n" + + "Push \"start\"\n" + + "CallMethod\n" + + "Pop\n" + + "}\n" + + "SetMember\n" + + "Push \"_root\"\n" + + "GetVariable\n" + + "Push \"execParam\"\n" + + "GetMember\n" + + "Push 1 \"_root\"\n" + + "GetVariable\n" + + "Push \"my_sound\"\n" + + "GetMember\n" + + "Push \"start\"\n" + + "CallMethod\n" + + "Pop\n" + + "Stop", swf.version, false); + doa.setActions(actions); + doa.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + + actions = ASMParser.parse(0, false, + "StopSounds\n" + + "Stop", swf.version, false); + doa.setActions(actions); + doa.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + + new ShowFrameTag(swf).writeTag(sos2); + } else if (treeItem instanceof DefineVideoStreamTag) { + + new PlaceObject2Tag(swf, false, 1, chtId, mat, null, -1, null, -1, null).writeTag(sos2); + List frs = new ArrayList<>(videoFrames.values()); + Collections.sort(frs, new Comparator() { + @Override + public int compare(VideoFrameTag o1, VideoFrameTag o2) { + return o1.frameNum - o2.frameNum; + } + }); + boolean first = true; + int ratio = 0; + for (VideoFrameTag f : frs) { + if (!first) { + ratio++; + new PlaceObject2Tag(swf, true, 1, -1, null, null, ratio, null, -1, null).writeTag(sos2); + } + f.writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + first = false; + } + } else if (treeItem instanceof DefineSpriteTag) { + DefineSpriteTag s = (DefineSpriteTag) treeItem; + Tag lastTag = null; + for (Tag t : s.getTags()) { + if (t instanceof EndTag) { + break; + } else if (t instanceof PlaceObjectTypeTag) { + PlaceObjectTypeTag pt = (PlaceObjectTypeTag) t; + MATRIX m = pt.getMatrix(); + MATRIX m2 = new Matrix(m).preConcatenate(new Matrix(mat)).toMATRIX(); + pt.writeTagWithMatrix(sos2, m2); + lastTag = t; + } else { + t.writeTag(sos2); + lastTag = t; + } + } + if (!s.getTags().isEmpty() && (lastTag != null) && (!(lastTag instanceof ShowFrameTag))) { + new ShowFrameTag(swf).writeTag(sos2); + } + } else { + new PlaceObject2Tag(swf, false, 1, chtId, mat, null, 0, null, -1, null).writeTag(sos2); + new ShowFrameTag(swf).writeTag(sos2); + } + + } // not showframe + + new EndTag(swf).writeTag(sos2); + data = baos.toByteArray(); + } + + SWFHeader result = new SWFHeader(); + result.version = Math.max(10, swf.version); + result.frameRate = frameRate; + + SWFOutputStream sos = new SWFOutputStream(os, result.version); + sos.write("FWS".getBytes()); + sos.write(swf.version); + result.fileSize = sos.getPos() + data.length + 4; + sos.writeUI32(result.fileSize); + sos.write(data); + os.flush(); + + return result; + } + + private static Tag classicTag(Tag t) { + if (t instanceof DefineCompactedFont) { + return ((DefineCompactedFont) t).toClassicFont(); + } + return t; + } + + private static void writeTag(Tag t, SWFOutputStream sos) throws IOException { + t = classicTag(t); + + t.writeTag(sos); + if (t instanceof CharacterIdTag) { + List chIdTags = t.getSwf().getCharacterIdTags(((CharacterIdTag) t).getCharacterId()); + if (chIdTags != null) { + for (CharacterIdTag chIdTag : chIdTags) { + if (!(chIdTag instanceof PlaceObjectTypeTag || chIdTag instanceof RemoveTag)) { + ((Tag) chIdTag).writeTag(sos); + } + } + } + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java index 277ff7f0d..7408a6652 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.EventListener; import com.jpexs.decompiler.flash.ReadOnlyTagList; import com.jpexs.decompiler.flash.RetryTask; import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.parser.ActionParseException; import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; @@ -50,6 +51,8 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -85,19 +88,7 @@ public class ShapeExporter { evl.handleExportingEvent("shape", currentIndex, count, t.getName()); } - int characterID = st.getCharacterId(); - String ext = ".svg"; - if (settings.mode == ShapeExportMode.PNG) { - ext = ".png"; - } - if (settings.mode == ShapeExportMode.BMP) { - ext = ".bmp"; - } - if (settings.mode == ShapeExportMode.CANVAS) { - ext = ".html"; - } - - final File file = new File(outdir + File.separator + Helper.makeFileName(st.getCharacterExportFileName() + ext)); + final File file = new File(outdir + File.separator + Helper.makeFileName(st.getCharacterExportFileName() + settings.getFileExtension())); new RetryTask(() -> { switch (settings.mode) { case SVG: @@ -142,6 +133,16 @@ public class ShapeExporter { SWF.writeLibrary(st.getSwf(), needed, baos); fos.write(Utf8Helper.getBytes(cse.getHtml(new String(baos.toByteArray(), Utf8Helper.charset), SWF.getTypePrefix(st) + st.getCharacterId(), st.getRect()))); } + break; + case SWF: + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(file))) { + try { + new PreviewExporter().exportSwf(fos, st, null, 0); + } catch (ActionParseException ex) { + Logger.getLogger(MorphShapeExporter.class.getName()).log(Level.SEVERE, null, ex); + } + } + break; } }, handler).run(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ButtonExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ButtonExportMode.java index 2529db29c..de49df0e2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ButtonExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ButtonExportMode.java @@ -21,8 +21,8 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum ButtonExportMode { - PNG, SVG, - BMP + BMP, + SWF, } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/FrameExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/FrameExportMode.java index 0ec83a415..5e183fbef 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/FrameExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/FrameExportMode.java @@ -21,12 +21,12 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum FrameExportMode { - PNG, GIF, AVI, SVG, CANVAS, PDF, - BMP + BMP, + SWF, } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/MorphShapeExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/MorphShapeExportMode.java index a7680c7f9..4e35744a2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/MorphShapeExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/MorphShapeExportMode.java @@ -1,18 +1,19 @@ /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.exporters.modes; /** @@ -20,11 +21,11 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum MorphShapeExportMode { - //TODO: implement other morphshape export modes SVG, - CANVAS + CANVAS, //PNG, //GIF, - //AVI + //AVI, + SWF, } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ShapeExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ShapeExportMode.java index af8c767c7..7995d0b73 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ShapeExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/ShapeExportMode.java @@ -1,18 +1,19 @@ /* * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3.0 of the License, or (at your option) any later version. - * + * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.exporters.modes; /** @@ -20,9 +21,9 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum ShapeExportMode { - SVG, PNG, CANVAS, - BMP + BMP, + SWF, } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/SpriteExportMode.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/SpriteExportMode.java index 583d8979d..d342f4bc5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/SpriteExportMode.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/modes/SpriteExportMode.java @@ -21,12 +21,12 @@ package com.jpexs.decompiler.flash.exporters.modes; * @author JPEXS */ public enum SpriteExportMode { - PNG, GIF, AVI, SVG, CANVAS, PDF, - BMP + BMP, + SWF, } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/MorphShapeExportSettings.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/MorphShapeExportSettings.java index bdad9f8cd..b08cb4c50 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/MorphShapeExportSettings.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/MorphShapeExportSettings.java @@ -34,4 +34,17 @@ public class MorphShapeExportSettings { this.mode = mode; this.zoom = zoom; } + + public String getFileExtension() { + switch (mode) { + case SVG: + return ".svg"; + case CANVAS: + return ".html"; + case SWF: + return ".swf"; + default: + throw new Error("Unsupported morphshape export mode: " + mode); + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ShapeExportSettings.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ShapeExportSettings.java index bc8ae7d25..f4cd798a3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ShapeExportSettings.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/settings/ShapeExportSettings.java @@ -34,4 +34,21 @@ public class ShapeExportSettings { this.mode = mode; this.zoom = zoom; } + + public String getFileExtension() { + switch (mode) { + case SVG: + return ".svg"; + case PNG: + return ".png"; + case BMP: + return ".bmp"; + case CANVAS: + return ".html"; + case SWF: + return ".swf"; + default: + throw new Error("Unsupported morphshape export mode: " + mode); + } + } } diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index 629d0cb4c..547adff73 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -218,6 +218,7 @@ public class CommandLineArgumentParser { private static String stdErr = null; private static final String METADATA_FORMAT_JSLIKE = "jslike"; + private static final String METADATA_FORMAT_RAW = "raw"; @SuppressWarnings("unchecked") @@ -1238,7 +1239,6 @@ public class CommandLineArgumentParser { } return false; } - }); System.exit(0); } @@ -1449,7 +1449,6 @@ public class CommandLineArgumentParser { } return false; } - }); System.exit(0); } @@ -1579,7 +1578,6 @@ public class CommandLineArgumentParser { } return false; } - }); System.exit(0); @@ -2221,7 +2219,7 @@ public class CommandLineArgumentParser { SpriteExportSettings ses = new SpriteExportSettings(enumFromStr(formats.get("sprite"), SpriteExportMode.class), zoom); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof DefineSpriteTag) { - frameExporter.exportFrames(handler, outDir + (multipleExportTypes ? File.separator + SpriteExportSettings.EXPORT_FOLDER_NAME : ""), swf, c.getCharacterId(), null, ses, evl); + frameExporter.exportSpriteFrames(handler, outDir + (multipleExportTypes ? File.separator + SpriteExportSettings.EXPORT_FOLDER_NAME : ""), swf, c.getCharacterId(), null, ses, evl); } } } @@ -2231,9 +2229,7 @@ public class CommandLineArgumentParser { ButtonExportSettings bes = new ButtonExportSettings(enumFromStr(formats.get("button"), ButtonExportMode.class), zoom); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof ButtonTag) { - List frameNums = new ArrayList<>(); - frameNums.add(0); // todo: export all frames - frameExporter.exportFrames(handler, outDir + (multipleExportTypes ? File.separator + ButtonExportSettings.EXPORT_FOLDER_NAME : ""), swf, c.getCharacterId(), frameNums, bes, evl); + frameExporter.exportButtonFrames(handler, outDir + (multipleExportTypes ? File.separator + ButtonExportSettings.EXPORT_FOLDER_NAME : ""), swf, c.getCharacterId(), null, bes, evl); } } } @@ -2660,7 +2656,6 @@ public class CommandLineArgumentParser { try { new SearchInMemory(new SearchInMemoryListener() { - @Override public void publish(Object... chunks) { for (Object s : chunks) { @@ -2872,7 +2867,6 @@ public class CommandLineArgumentParser { } else if (characterTag instanceof TextTag) { TextTag textTag = (TextTag) characterTag; new TextImporter(new MissingCharacterHandler(), new TextImportErrorHandler() { - @Override public boolean handle(TextTag textTag) { String msg = "Error during text import."; @@ -3540,7 +3534,6 @@ public class CommandLineArgumentParser { public boolean missingFloat4(Float4 value) { return true; } - }, abc.bodies.get(bodyIndex), abc.method_info.get(abc.bodies.get(bodyIndex).method_info)); //acode.getBytes(abc.bodies.get(bodyIndex).getCodeBytes()); abc.bodies.get(bodyIndex).setCode(acode); @@ -4033,5 +4026,4 @@ public class CommandLineArgumentParser { } } } - } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index fdddb5bf5..9cab00508 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -42,6 +42,7 @@ import com.jpexs.decompiler.flash.exporters.FrameExporter; import com.jpexs.decompiler.flash.exporters.ImageExporter; import com.jpexs.decompiler.flash.exporters.MorphShapeExporter; import com.jpexs.decompiler.flash.exporters.MovieExporter; +import com.jpexs.decompiler.flash.exporters.PreviewExporter; import com.jpexs.decompiler.flash.exporters.ShapeExporter; import com.jpexs.decompiler.flash.exporters.SoundExporter; import com.jpexs.decompiler.flash.exporters.SymbolClassExporter; @@ -328,11 +329,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se public TreeItem oldItem; - // play morph shape in 2 second(s) - public static final int MORPH_SHAPE_ANIMATION_LENGTH = 2; - - public static final int MORPH_SHAPE_ANIMATION_FRAME_RATE = 30; - private static final Logger logger = Logger.getLogger(MainPanel.class.getName()); public void setPercent(int percent) { @@ -1121,7 +1117,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se public List exportSelection(AbortRetryIgnoreHandler handler, String selFile, ExportDialog export) throws IOException, InterruptedException { List ret = new ArrayList<>(); - List sel = folderPreviewPanel.selectedItems.isEmpty() ? tagTree.getAllSelected() : new ArrayList<>(folderPreviewPanel.selectedItems.values()); + List sel = tagTree.getSelection(getCurrentSwf()); Set usedSwfs = new HashSet<>(); for (TreeItem d : sel) { @@ -1137,6 +1133,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se List images = new ArrayList<>(); List shapes = new ArrayList<>(); List morphshapes = new ArrayList<>(); + List sprites = new ArrayList<>(); List buttons = new ArrayList<>(); List movies = new ArrayList<>(); List sounds = new ArrayList<>(); @@ -1175,6 +1172,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (nodeType == TreeNodeType.MORPH_SHAPE) { morphshapes.add((Tag) d); } + if (nodeType == TreeNodeType.SPRITE) { + sprites.add((Tag) d); + } if (nodeType == TreeNodeType.AS) { as12scripts.add(d); } @@ -1211,13 +1211,19 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (!frames.containsKey(parentId)) { frames.put(parentId, new ArrayList<>()); } + frames.get(parentId).add(frame); } + if (d instanceof ScriptPack) { as3scripts.add((ScriptPack) d); } } + for (Tag sprite : sprites) { + frames.put(((DefineSpriteTag) sprite).getCharacterId(), null); + } + String selFile2; if (usedSwfs.size() > 1) { selFile2 = selFile + File.separator + Helper.getNextId(swf.getShortFileName(), usedSwfsIds); @@ -1275,12 +1281,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se if (export.isOptionEnabled(FrameExportMode.class)) { FrameExportSettings fes = new FrameExportSettings(export.getValue(FrameExportMode.class), export.getZoom()); - for (Entry> entry : frames.entrySet()) { - int containerId = entry.getKey(); - if (containerId == 0) { - String subFolder = FrameExportSettings.EXPORT_FOLDER_NAME; - ret.addAll(frameExporter.exportFrames(handler, selFile2 + File.separator + subFolder, swf, containerId, entry.getValue(), fes, evl)); - } + if (frames.containsKey(0)) { + String subFolder = FrameExportSettings.EXPORT_FOLDER_NAME; + ret.addAll(frameExporter.exportFrames(handler, selFile2 + File.separator + subFolder, swf, 0, frames.get(0), fes, evl)); } } @@ -1290,7 +1293,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se int containerId = entry.getKey(); if (containerId != 0) { String subFolder = SpriteExportSettings.EXPORT_FOLDER_NAME; - ret.addAll(frameExporter.exportFrames(handler, selFile2 + File.separator + subFolder, swf, containerId, entry.getValue(), ses, evl)); + ret.addAll(frameExporter.exportSpriteFrames(handler, selFile2 + File.separator + subFolder, swf, containerId, entry.getValue(), ses, evl)); } } } @@ -1300,9 +1303,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se for (Tag tag : buttons) { ButtonTag button = (ButtonTag) tag; String subFolder = ButtonExportSettings.EXPORT_FOLDER_NAME; - List frameNums = new ArrayList<>(); - frameNums.add(0); // todo: export all frames - ret.addAll(frameExporter.exportFrames(handler, selFile2 + File.separator + subFolder, swf, button.getCharacterId(), frameNums, bes, evl)); + ret.addAll(frameExporter.exportButtonFrames(handler, selFile2 + File.separator + subFolder, swf, button.getCharacterId(), null, bes, evl)); } } @@ -1399,7 +1400,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se SpriteExportSettings ses = new SpriteExportSettings(export.getValue(SpriteExportMode.class), export.getZoom()); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof DefineSpriteTag) { - frameExporter.exportFrames(handler, Path.combine(selFile, SpriteExportSettings.EXPORT_FOLDER_NAME), swf, c.getCharacterId(), null, ses, evl); + frameExporter.exportSpriteFrames(handler, Path.combine(selFile, SpriteExportSettings.EXPORT_FOLDER_NAME), swf, c.getCharacterId(), null, ses, evl); } } } @@ -1408,9 +1409,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se ButtonExportSettings bes = new ButtonExportSettings(export.getValue(ButtonExportMode.class), export.getZoom()); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof ButtonTag) { - List frameNums = new ArrayList<>(); - frameNums.add(0); // todo: export all frames - frameExporter.exportFrames(handler, Path.combine(selFile, ButtonExportSettings.EXPORT_FOLDER_NAME), swf, c.getCharacterId(), frameNums, bes, evl); + frameExporter.exportButtonFrames(handler, Path.combine(selFile, ButtonExportSettings.EXPORT_FOLDER_NAME), swf, c.getCharacterId(), null, bes, evl); } } } @@ -1513,7 +1512,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se SpriteExportSettings ses = new SpriteExportSettings(exportMode, export.getZoom()); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof DefineSpriteTag) { - frameExporter.exportFrames(handler, Path.combine(selFile, SpriteExportSettings.EXPORT_FOLDER_NAME, exportMode.name()), swf, c.getCharacterId(), null, ses, evl); + frameExporter.exportSpriteFrames(handler, Path.combine(selFile, SpriteExportSettings.EXPORT_FOLDER_NAME, exportMode.name()), swf, c.getCharacterId(), null, ses, evl); } } } @@ -1524,9 +1523,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se ButtonExportSettings bes = new ButtonExportSettings(exportMode, export.getZoom()); for (CharacterTag c : swf.getCharacters().values()) { if (c instanceof ButtonTag) { - List frameNums = new ArrayList<>(); - frameNums.add(0); // todo: export all frames - frameExporter.exportFrames(handler, Path.combine(selFile, ButtonExportSettings.EXPORT_FOLDER_NAME, exportMode.name()), swf, c.getCharacterId(), frameNums, bes, evl); + frameExporter.exportButtonFrames(handler, Path.combine(selFile, ButtonExportSettings.EXPORT_FOLDER_NAME, exportMode.name()), swf, c.getCharacterId(), null, bes, evl); } } } @@ -3618,8 +3615,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se private void initTimeline(Timeline timeline) { if (tag instanceof MorphShapeTag) { - timeline.frameRate = MORPH_SHAPE_ANIMATION_FRAME_RATE; - int framesCnt = (int) (timeline.frameRate * MORPH_SHAPE_ANIMATION_LENGTH); + timeline.frameRate = PreviewExporter.MORPH_SHAPE_ANIMATION_FRAME_RATE; + int framesCnt = (int) (timeline.frameRate * PreviewExporter.MORPH_SHAPE_ANIMATION_LENGTH); for (int i = 0; i < framesCnt; i++) { Frame f = new Frame(timeline, i); DepthState ds = new DepthState(tag.getSwf(), f); diff --git a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java index b87786298..d6d06fe34 100644 --- a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java @@ -17,12 +17,10 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFOutputStream; -import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.SWFHeader; import com.jpexs.decompiler.flash.action.parser.ActionParseException; -import com.jpexs.decompiler.flash.action.parser.pcode.ASMParser; import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.PreviewExporter; import com.jpexs.decompiler.flash.gui.controls.JPersistentSplitPane; import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane; @@ -30,47 +28,15 @@ import com.jpexs.decompiler.flash.gui.player.FlashPlayerPanel; import com.jpexs.decompiler.flash.gui.player.MediaDisplay; import com.jpexs.decompiler.flash.gui.player.PlayerControls; import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; -import com.jpexs.decompiler.flash.tags.DefineBitsTag; -import com.jpexs.decompiler.flash.tags.DefineMorphShape2Tag; -import com.jpexs.decompiler.flash.tags.DefineMorphShapeTag; -import com.jpexs.decompiler.flash.tags.DefineSoundTag; -import com.jpexs.decompiler.flash.tags.DefineSpriteTag; -import com.jpexs.decompiler.flash.tags.DefineTextTag; -import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; -import com.jpexs.decompiler.flash.tags.DoActionTag; -import com.jpexs.decompiler.flash.tags.DoInitActionTag; -import com.jpexs.decompiler.flash.tags.EndTag; -import com.jpexs.decompiler.flash.tags.ExportAssetsTag; -import com.jpexs.decompiler.flash.tags.FileAttributesTag; -import com.jpexs.decompiler.flash.tags.JPEGTablesTag; import com.jpexs.decompiler.flash.tags.MetadataTag; -import com.jpexs.decompiler.flash.tags.PlaceObject2Tag; import com.jpexs.decompiler.flash.tags.SetBackgroundColorTag; -import com.jpexs.decompiler.flash.tags.ShowFrameTag; -import com.jpexs.decompiler.flash.tags.SoundStreamBlockTag; import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.tags.VideoFrameTag; -import com.jpexs.decompiler.flash.tags.base.AloneTag; -import com.jpexs.decompiler.flash.tags.base.BoundedTag; -import com.jpexs.decompiler.flash.tags.base.CharacterIdTag; -import com.jpexs.decompiler.flash.tags.base.CharacterTag; import com.jpexs.decompiler.flash.tags.base.FontTag; -import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag; -import com.jpexs.decompiler.flash.tags.base.RemoveTag; -import com.jpexs.decompiler.flash.tags.base.SoundStreamHeadTypeTag; import com.jpexs.decompiler.flash.tags.base.TextTag; -import com.jpexs.decompiler.flash.tags.gfx.DefineCompactedFont; -import com.jpexs.decompiler.flash.timeline.DepthState; import com.jpexs.decompiler.flash.timeline.Frame; import com.jpexs.decompiler.flash.timeline.TagScript; import com.jpexs.decompiler.flash.timeline.Timelined; import com.jpexs.decompiler.flash.treeitems.TreeItem; -import com.jpexs.decompiler.flash.types.GLYPHENTRY; -import com.jpexs.decompiler.flash.types.MATRIX; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.decompiler.flash.types.TEXTRECORD; import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; import com.jpexs.helpers.SerializableImage; import java.awt.BorderLayout; @@ -81,7 +47,6 @@ import java.awt.Insets; import java.awt.event.ActionEvent; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -90,14 +55,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.StringReader; import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JButton; @@ -620,31 +577,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel nextFontsButton.setVisible(false); } - private static Tag classicTag(Tag t) { - if (t instanceof DefineCompactedFont) { - return ((DefineCompactedFont) t).toClassicFont(); - } - return t; - } - - private static void writeTag(Tag t, SWFOutputStream sos) throws IOException { - t = classicTag(t); - - t.writeTag(sos); - if (t instanceof CharacterIdTag) { - List chIdTags = t.getSwf().getCharacterIdTags(((CharacterIdTag) t).getCharacterId()); - if (chIdTags != null) { - for (CharacterIdTag chIdTag : chIdTags) { - if (!(chIdTag instanceof PlaceObjectTypeTag || chIdTag instanceof RemoveTag)) { - ((Tag) chIdTag).writeTag(sos); - } - } - } - } - } - public void createAndShowTempSwf(TreeItem treeItem) { - SWF swf = null; try { if (tempFile != null) { tempFile.delete(); @@ -657,465 +590,29 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel if (treeItem instanceof Tag) { Tag tag = (Tag) treeItem; - swf = tag.getSwf(); if (tag instanceof FontTag) { //Fonts are always black on white backgroundColor = View.getDefaultBackgroundColor(); } } else if (treeItem instanceof Frame) { Frame fn = (Frame) treeItem; - swf = fn.getSwf(); - if (fn.timeline.timelined == swf) { - SetBackgroundColorTag setBgColorTag = swf.getBackgroundColor(); + SWF sourceSwf = fn.getSwf(); + if (fn.timeline.timelined == sourceSwf) { + SetBackgroundColorTag setBgColorTag = sourceSwf.getBackgroundColor(); if (setBgColorTag != null) { backgroundColor = setBgColorTag.backgroundColor.toColor(); } } } - int frameCount = 1; - float frameRate = swf.frameRate; - HashMap videoFrames = new HashMap<>(); - if (treeItem instanceof DefineVideoStreamTag) { - DefineVideoStreamTag vs = (DefineVideoStreamTag) treeItem; - SWF.populateVideoFrames(vs.getCharacterId(), swf.getTags(), videoFrames); - frameCount = videoFrames.size(); - } - - List soundFrames = new ArrayList<>(); - if (treeItem instanceof SoundStreamHeadTypeTag) { - soundFrames = ((SoundStreamHeadTypeTag) treeItem).getBlocks(); - frameCount = soundFrames.size(); - } - - if ((treeItem instanceof DefineMorphShapeTag) || (treeItem instanceof DefineMorphShape2Tag)) { - frameRate = MainPanel.MORPH_SHAPE_ANIMATION_FRAME_RATE; - frameCount = (int) (MainPanel.MORPH_SHAPE_ANIMATION_LENGTH * frameRate); - } - - if (treeItem instanceof DefineSoundTag) { - frameCount = 1; - } - - if (treeItem instanceof DefineSpriteTag) { - frameCount = ((DefineSpriteTag) treeItem).frameCount; - } - - byte[] data; - try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { - SWFOutputStream sos2 = new SWFOutputStream(baos, SWF.DEFAULT_VERSION); - RECT outrect = new RECT(swf.displayRect); - - RECT treeItemBounds = null; - if (treeItem instanceof FontTag) { - outrect.Xmin = 0; - outrect.Ymin = 0; - outrect.Xmax = FontTag.PREVIEWSIZE * 20; - outrect.Ymax = FontTag.PREVIEWSIZE * 20; - } else if (treeItem instanceof BoundedTag) { - treeItemBounds = ((BoundedTag) treeItem).getRect(); - } else if (treeItem instanceof Frame) { - treeItemBounds = ((Frame) treeItem).timeline.timelined.getRect(); - } - - if (treeItemBounds != null) { - if (outrect.getWidth() < treeItemBounds.getWidth()) { - outrect.Xmax += treeItemBounds.getWidth() - outrect.getWidth(); - } - - if (outrect.getHeight() < treeItemBounds.getHeight()) { - outrect.Ymax += treeItemBounds.getHeight() - outrect.getHeight(); - } - } - - int width = outrect.getWidth(); - int height = outrect.getHeight(); - - sos2.writeRECT(outrect); - sos2.writeFIXED8(frameRate); - sos2.writeUI16(frameCount); //framecnt - - FileAttributesTag fa = swf.getFileAttributes(); - if (fa != null) { - fa.writeTag(sos2); - } - - SetBackgroundColorTag setBgColorTag = swf.getBackgroundColor(); - if (setBgColorTag == null) { - setBgColorTag = new SetBackgroundColorTag(swf, new RGB(backgroundColor)); - } - - setBgColorTag.writeTag(sos2); - - if (treeItem instanceof Frame) { - Frame fn = (Frame) treeItem; - Timelined parent = fn.timeline.timelined; - - Set doneCharacters = new HashSet<>(); - for (Tag t : parent.getTags()) { - if (t instanceof FileAttributesTag || t instanceof SetBackgroundColorTag) { - continue; - } - - if (t instanceof DoActionTag || t instanceof DoInitActionTag) { - // todo: Maybe DoABC tags should be removed, too - continue; - } - - Set needed = new HashSet<>(); - t.getNeededCharactersDeep(needed); - for (int n : needed) { - if (!doneCharacters.contains(n)) { - writeTag(swf.getCharacter(n), sos2); - doneCharacters.add(n); - } - } - - //if (t instanceof ShowFrameTag || t instanceof PlaceObjectTypeTag || t instanceof RemoveTag) { - // continue; - //} - if (t instanceof CharacterTag) { - int characterId = ((CharacterTag) t).getCharacterId(); - doneCharacters.add(characterId); - writeTag(t, sos2); - } - } - - RECT r = parent.getRect(); - for (Map.Entry value : fn.layers.entrySet()) { - PlaceObjectTypeTag pot = value.getValue().toPlaceObjectTag(value.getKey()); - MATRIX mat = new MATRIX(pot.getMatrix()); - mat.translateX += width / 2 - r.getWidth() / 2; - mat.translateY += height / 2 - r.getHeight() / 2; - pot.setMatrix(mat); - pot.writeTag(sos2); - } - - new ShowFrameTag(swf).writeTag(sos2); - } else { - boolean isSprite = false; - if (treeItem instanceof DefineSpriteTag) { - isSprite = true; - } - int chtId = -1; - if (treeItem instanceof CharacterTag) { - chtId = ((CharacterTag) treeItem).getCharacterId(); - } - - if (treeItem instanceof DefineBitsTag) { - JPEGTablesTag jtt = swf.getJtt(); - if (jtt != null) { - jtt.writeTag(sos2); - } - } else if (treeItem instanceof AloneTag) { - } else { - Set needed = new HashSet<>(); - ((Tag) treeItem).getNeededCharactersDeep(needed); - for (int n : needed) { - if (isSprite && chtId == n) { - continue; - } - - CharacterTag characterTag = swf.getCharacter(n); - if (characterTag instanceof DefineBitsTag) { - JPEGTablesTag jtt = swf.getJtt(); - if (jtt != null) { - jtt.writeTag(sos2); - } - } - - writeTag(characterTag, sos2); - } - } - - writeTag((Tag) treeItem, sos2); - - MATRIX mat = new MATRIX(); - mat.hasRotate = false; - mat.hasScale = false; - mat.translateX = 0; - mat.translateY = 0; - if (treeItem instanceof BoundedTag) { - RECT r = ((BoundedTag) treeItem).getRect(); - mat.translateX = -r.Xmin; - mat.translateY = -r.Ymin; - mat.translateX = mat.translateX + width / 2 - r.getWidth() / 2; - mat.translateY = mat.translateY + height / 2 - r.getHeight() / 2; - } else { - mat.translateX = width / 4; - mat.translateY = height / 4; - } - if (treeItem instanceof FontTag) { - FontTag ft = (FontTag) classicTag((Tag) treeItem); - - int countGlyphsTotal = ft.getGlyphShapeTable().size(); - int countGlyphs = Math.min(SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW, countGlyphsTotal); - int fontId = ft.getFontId(); - int cols = (int) Math.ceil(Math.sqrt(countGlyphs)); - int rows = (int) Math.ceil(((float) countGlyphs) / ((float) cols)); - if (rows == 0) { - rows = 1; - cols = 1; - } - int x = 0; - int y = 0; - int firstGlyphIndex = fontPageNum * SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW; - countGlyphs = Math.min(SHAPERECORD.MAX_CHARACTERS_IN_FONT_PREVIEW, countGlyphsTotal - firstGlyphIndex); - List shapes = ft.getGlyphShapeTable(); - int maxw = 0; - for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { - RECT b = shapes.get(f).getBounds(); - if (b.Xmin == Integer.MAX_VALUE) { - continue; - } - if (b.Ymin == Integer.MAX_VALUE) { - continue; - } - int w = (int) (b.getWidth() / ft.getDivider()); - if (w > maxw) { - maxw = w; - } - x++; - } - - x = 0; - - int BORDER = 3 * 20; - - int textHeight = height / rows; - - while (maxw * textHeight / 1024.0 > width / cols - 2 * BORDER) { - textHeight--; - } - - MATRIX tmat = new MATRIX(); - for (int f = firstGlyphIndex; f < firstGlyphIndex + countGlyphs; f++) { - if (x >= cols) { - x = 0; - y++; - } - List rec = new ArrayList<>(); - TEXTRECORD tr = new TEXTRECORD(); - - RECT b = shapes.get(f).getBounds(); - int xmin = b.Xmin == Integer.MAX_VALUE ? 0 : (int) (b.Xmin / ft.getDivider()); - xmin *= textHeight / 1024.0; - int ymin = b.Ymin == Integer.MAX_VALUE ? 0 : (int) (b.Ymin / ft.getDivider()); - ymin *= textHeight / 1024.0; - int w = (int) (b.getWidth() / ft.getDivider()); - w *= textHeight / 1024.0; - int h = (int) (b.getHeight() / ft.getDivider()); - h *= textHeight / 1024.0; - - tr.fontId = fontId; - tr.styleFlagsHasFont = true; - tr.textHeight = textHeight; - tr.xOffset = -xmin; - tr.yOffset = 0; - tr.styleFlagsHasXOffset = true; - tr.styleFlagsHasYOffset = true; - tr.glyphEntries = new ArrayList<>(1); - tr.styleFlagsHasColor = true; - tr.textColor = new RGB(0, 0, 0); - GLYPHENTRY ge = new GLYPHENTRY(); - - double ga = ft.getGlyphAdvance(f); - int cw = ga == -1 ? w : (int) (ga / ft.getDivider() * textHeight / 1024.0); - - ge.glyphAdvance = 0; - ge.glyphIndex = f; - tr.glyphEntries.add(ge); - rec.add(tr); - - tmat.translateX = x * width / cols + width / cols / 2 - w / 2; - tmat.translateY = y * height / rows + height / rows / 2; - new DefineTextTag(swf, 999 + f, new RECT(0, cw, ymin, ymin + h), new MATRIX(), rec).writeTag(sos2); - new PlaceObject2Tag(swf, false, 1 + f, 999 + f, tmat, null, 0, null, -1, null).writeTag(sos2); - x++; - } - new ShowFrameTag(swf).writeTag(sos2); - } else if ((treeItem instanceof DefineMorphShapeTag) || (treeItem instanceof DefineMorphShape2Tag)) { - new PlaceObject2Tag(swf, false, 1, chtId, mat, null, 0, null, -1, null).writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - for (int ratio = 0; ratio < 65536; ratio += 65536 / frameCount) { - new PlaceObject2Tag(swf, true, 1, chtId, mat, null, ratio, null, -1, null).writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - } - } else if (treeItem instanceof SoundStreamHeadTypeTag) { - for (SoundStreamBlockTag blk : soundFrames) { - blk.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - } - } else if (treeItem instanceof DefineSoundTag) { - ExportAssetsTag ea = new ExportAssetsTag(swf); - DefineSoundTag ds = (DefineSoundTag) treeItem; - ea.tags.add(ds.soundId); - ea.names.add("my_define_sound"); - ea.writeTag(sos2); - List actions; - DoActionTag doa; - - doa = new DoActionTag(swf, null); - actions = ASMParser.parse(0, false, - "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\"\n" - + "Push \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\" 0.0 \"Sound\"\n" - + "NewObject\n" - + "SetMember\n" - + "Push \"my_define_sound\" 1 \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"attachSound\"\n" - + "CallMethod\n" - + "Pop\n" - + "Stop", swf.version, false); - doa.setActions(actions); - doa.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - - actions = ASMParser.parse(0, false, - "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\" \"start\"\n" - + "StopSounds\n" - + "Push \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\" 0.0 \"Sound\"\n" - + "NewObject\n" - + "SetMember\n" - + "Push \"my_define_sound\" 1 \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"attachSound\"\n" - + "CallMethod\n" - + "Pop\n" - + "Push 9999 0.0 2 \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"start\"\n" - + "CallMethod\n" - + "Pop\n" - + "Stop", swf.version, false); - doa.setActions(actions); - doa.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - - actions = ASMParser.parse(0, false, - "ConstantPool \"_root\" \"my_sound\" \"Sound\" \"my_define_sound\" \"attachSound\" \"onSoundComplete\" \"start\" \"execParam\"\n" - + "StopSounds\n" - + "Push \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\" 0.0 \"Sound\"\n" - + "NewObject\n" - + "SetMember\n" - + "Push \"my_define_sound\" 1 \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"attachSound\"\n" - + "CallMethod\n" - + "Pop\n" - + "Push \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"onSoundComplete\"\n" - + "DefineFunction2 \"\" 0 2 false true true false true false true false false {\n" - + "Push 0.0 register1 \"my_sound\"\n" - + "GetMember\n" - + "Push \"start\"\n" - + "CallMethod\n" - + "Pop\n" - + "}\n" - + "SetMember\n" - + "Push \"_root\"\n" - + "GetVariable\n" - + "Push \"execParam\"\n" - + "GetMember\n" - + "Push 1 \"_root\"\n" - + "GetVariable\n" - + "Push \"my_sound\"\n" - + "GetMember\n" - + "Push \"start\"\n" - + "CallMethod\n" - + "Pop\n" - + "Stop", swf.version, false); - doa.setActions(actions); - doa.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - - actions = ASMParser.parse(0, false, - "StopSounds\n" - + "Stop", swf.version, false); - doa.setActions(actions); - doa.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - - new ShowFrameTag(swf).writeTag(sos2); - } else if (treeItem instanceof DefineVideoStreamTag) { - - new PlaceObject2Tag(swf, false, 1, chtId, mat, null, -1, null, -1, null).writeTag(sos2); - List frs = new ArrayList<>(videoFrames.values()); - Collections.sort(frs, new Comparator() { - @Override - public int compare(VideoFrameTag o1, VideoFrameTag o2) { - return o1.frameNum - o2.frameNum; - } - }); - boolean first = true; - int ratio = 0; - for (VideoFrameTag f : frs) { - if (!first) { - ratio++; - new PlaceObject2Tag(swf, true, 1, -1, null, null, ratio, null, -1, null).writeTag(sos2); - } - f.writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - first = false; - } - } else if (treeItem instanceof DefineSpriteTag) { - DefineSpriteTag s = (DefineSpriteTag) treeItem; - Tag lastTag = null; - for (Tag t : s.getTags()) { - if (t instanceof EndTag) { - break; - } else if (t instanceof PlaceObjectTypeTag) { - PlaceObjectTypeTag pt = (PlaceObjectTypeTag) t; - MATRIX m = pt.getMatrix(); - MATRIX m2 = new Matrix(m).preConcatenate(new Matrix(mat)).toMATRIX(); - pt.writeTagWithMatrix(sos2, m2); - lastTag = t; - } else { - t.writeTag(sos2); - lastTag = t; - } - } - if (!s.getTags().isEmpty() && (lastTag != null) && (!(lastTag instanceof ShowFrameTag))) { - new ShowFrameTag(swf).writeTag(sos2); - } - } else { - new PlaceObject2Tag(swf, false, 1, chtId, mat, null, 0, null, -1, null).writeTag(sos2); - new ShowFrameTag(swf).writeTag(sos2); - } - - } // not showframe - - new EndTag(swf).writeTag(sos2); - data = baos.toByteArray(); - } - + SWFHeader header; try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(tempFile))) { - SWFOutputStream sos = new SWFOutputStream(fos, Math.max(10, swf.version)); - sos.write("FWS".getBytes()); - sos.write(swf.version); - sos.writeUI32(sos.getPos() + data.length + 4); - sos.write(data); - fos.flush(); + header = new PreviewExporter().exportSwf(fos, treeItem, backgroundColor, fontPageNum); } + if (flashPanel != null) { - flashPanel.displaySWF(tempFile.getAbsolutePath(), backgroundColor, frameRate); + flashPanel.displaySWF(tempFile.getAbsolutePath(), backgroundColor, header.frameRate); } + showFlashViewerPanel(); } catch (IOException | ActionParseException ex) { Logger.getLogger(PreviewPanel.class.getName()).log(Level.SEVERE, null, ex); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java index 1a21c08e4..ca8c81011 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java @@ -429,7 +429,7 @@ public class ASMSourceEditorPane extends DebuggableEditorPane implements CaretLi int caretPos = getCaretPosition(); Flasm3Lexer lexer = new Flasm3Lexer(new StringReader(getText().replace("\r\n", "\n"))); ParsedSymbol symb; - String lastLevel = null; + String lastLevel; final Integer singleUse[] = new Integer[]{ ParsedSymbol.TYPE_KEYWORD_FINAL, ParsedSymbol.TYPE_KEYWORD_OVERRIDE, diff --git a/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog.properties index 61e11cdec..cda0f3caa 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/ExportDialog.properties @@ -17,6 +17,7 @@ shapes.svg = SVG shapes.png = PNG shapes.bmp = BMP shapes.canvas = HTML5 Canvas +shapes.swf = SWF texts = Texts texts.plain = Plain text @@ -58,6 +59,7 @@ morphshapes = Morphshapes morphshapes.gif = GIF morphshapes.svg = SVG morphshapes.canvas = HTML5 Canvas +morphshapes.swf = SWF frames = Frames frames.png = PNG @@ -67,6 +69,7 @@ frames.svg = SVG frames.canvas = HTML5 Canvas frames.pdf = PDF frames.bmp = BMP +frames.swf = SWF sprites = Sprites sprites.png = PNG @@ -76,11 +79,13 @@ sprites.svg = SVG sprites.canvas = HTML5 Canvas sprites.pdf = PDF sprites.bmp = BMP +sprites.swf = SWF buttons = Buttons buttons.png = PNG buttons.svg = SVG buttons.bmp = BMP +buttons.swf = SWF fonts = Fonts fonts.ttf = TTF diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java index 9ba56f74f..ce982d077 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTree.java @@ -537,7 +537,12 @@ public class TagTree extends JTree { if (mainPanel.folderPreviewPanel.selectedItems.isEmpty()) { sel = getAllSelected(); } else { - sel = new ArrayList<>(mainPanel.folderPreviewPanel.selectedItems.values()); + sel = new ArrayList<>(); + + for (TreeItem treeItem : mainPanel.folderPreviewPanel.selectedItems.values()) { + sel.add(treeItem); + getAllSubs(treeItem, sel); + } } return getSelection(swf, sel); } @@ -570,6 +575,9 @@ public class TagTree extends JTree { if (nodeType == TreeNodeType.MORPH_SHAPE) { ret.add(d); } + if (nodeType == TreeNodeType.SPRITE) { + ret.add(d); + } if (nodeType == TreeNodeType.BUTTON) { ret.add(d); } From 86f19ff07b7ee0c7d34f5baa81207b0430bf2ceb Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Tue, 3 Jan 2017 10:19:33 +0100 Subject: [PATCH 023/114] #1332 Do not render image tags with internal viewer --- .../com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java | 10 ++++++---- .../com/jpexs/decompiler/flash/timeline/Timeline.java | 8 +++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 4abbf75bd..19c774f43 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2187,10 +2187,12 @@ public class AVM2Code implements Cloneable { //Note: changing operands here does not change instruction byte length as offsets are always S24 (not variable length) } - for (ABCException ex : body.exceptions) { - ex.start = updater.updateOperandOffset(-1, ex.start, ex.start); - ex.end = updater.updateOperandOffset(-1, ex.end, ex.end); - ex.target = updater.updateOperandOffset(-1, ex.target, ex.target); + if (body != null) { + for (ABCException ex : body.exceptions) { + ex.start = updater.updateOperandOffset(-1, ex.start, ex.start); + ex.end = updater.updateOperandOffset(-1, ex.end, ex.end); + ex.target = updater.updateOperandOffset(-1, ex.target, ex.target); + } } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java index f0144e696..ef20b3154 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -39,6 +39,7 @@ import com.jpexs.decompiler.flash.tags.base.ButtonTag; import com.jpexs.decompiler.flash.tags.base.CharacterIdTag; import com.jpexs.decompiler.flash.tags.base.CharacterTag; import com.jpexs.decompiler.flash.tags.base.DrawableTag; +import com.jpexs.decompiler.flash.tags.base.ImageTag; import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; import com.jpexs.decompiler.flash.tags.base.PlaceObjectTypeTag; import com.jpexs.decompiler.flash.tags.base.RemoveTag; @@ -691,7 +692,12 @@ public class Timeline { img = new SerializableImage(newWidth, newHeight, SerializableImage.TYPE_INT_ARGB_PRE); img.fillTransparent(); - drawable.toImage(dframe, time, ratio, renderContext, img, isClip || clipDepth > -1, m, strokeTransform, absMat, clrTrans); + if (!(drawable instanceof ImageTag)) { + // image tags are not rendered, they should be embedded in shape tags + drawable.toImage(dframe, time, ratio, renderContext, img, isClip || clipDepth > -1, m, strokeTransform, absMat, clrTrans); + } else { + // todo: show one time warning + } if (filters != null) { for (FILTER filter : filters) { From 09c802fe255b50b0dc453d8424e5ad3f8ab5b0fe Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 4 Jan 2017 14:15:22 +0100 Subject: [PATCH 024/114] #1331: plugin to change the bitmap fill --- .gitignore | 4 +- libsrc/plugins/src/BitmapFillChanger.java | 102 ++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 libsrc/plugins/src/BitmapFillChanger.java diff --git a/.gitignore b/.gitignore index 75ea952eb..9ac98523f 100644 --- a/.gitignore +++ b/.gitignore @@ -71,4 +71,6 @@ hs_err_pid*.log /libsrc/treetable/nbproject/private/ /libsrc/treetable/build/ /libsrc/treetable/dist/ -/libsrc/plugins/nbproject/private/ \ No newline at end of file +/libsrc/plugins/nbproject/private/ +/libsrc/plugins/dist/ +/libsrc/plugins/build/ \ No newline at end of file diff --git a/libsrc/plugins/src/BitmapFillChanger.java b/libsrc/plugins/src/BitmapFillChanger.java new file mode 100644 index 000000000..ab4899236 --- /dev/null +++ b/libsrc/plugins/src/BitmapFillChanger.java @@ -0,0 +1,102 @@ + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.MethodBody; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.helpers.SWFDecompilerListener; +import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.tags.base.ShapeTag; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.decompiler.graph.GraphTargetItem; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class BitmapFillChanger implements SWFDecompilerListener { + + @Override + public byte[] proxyFileCatched(byte[] data) { + return null; + } + + @Override + public void actionListParsed(ActionList actions, SWF swf) { + } + + @Override + public void actionTreeCreated(List tree, SWF swf) { + } + + @Override + public void swfParsed(SWF swf) { + String[] custom = SWFDecompilerPlugin.customParameters; + if (custom == null || custom.length == 0) { + // change it in command line mode only + return; + } + + try { + for (Tag tag : swf.getTags()) { + if (tag instanceof ShapeTag) { + boolean modified = false; + SHAPEWITHSTYLE shapes = ((ShapeTag) tag).getShapes(); + for (FILLSTYLE fillStyle : shapes.fillStyles.fillStyles) { + modified |= changeFillStyle(fillStyle); + } + + for (SHAPERECORD shapeRecord : shapes.shapeRecords) { + if (shapeRecord instanceof StyleChangeRecord) { + StyleChangeRecord scr = (StyleChangeRecord) shapeRecord; + if (scr.stateNewStyles) { + for (FILLSTYLE fillStyle : scr.fillStyles.fillStyles) { + modified |= changeFillStyle(fillStyle); + } + } + } + } + + if (modified) { + tag.setModified(true); + } + } + } + + swf.saveTo(new FileOutputStream(swf.getFile() + ".patched.swf")); + } catch (IOException ex) { + Logger.getLogger(BitmapFillChanger.class.getName()).log(Level.SEVERE, null, ex); + } + } + + private boolean changeFillStyle(FILLSTYLE fillStyle) { + if (fillStyle.fillStyleType == FILLSTYLE.NON_SMOOTHED_CLIPPED_BITMAP) { + fillStyle.fillStyleType = FILLSTYLE.CLIPPED_BITMAP; + return true; + } + + if (fillStyle.fillStyleType == FILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP) { + fillStyle.fillStyleType = FILLSTYLE.REPEATING_BITMAP; + return true; + } + + return false; + } + + @Override + public void abcParsed(ABC abc, SWF swf) { + } + + @Override + public void methodBodyParsed(ABC abc, MethodBody body, SWF swf) { + } + + @Override + public void avm2CodeRemoveTraps(String path, int classIndex, boolean isStatic, int scriptIndex, ABC abc, Trait trait, int methodInfo, MethodBody body) throws InterruptedException { + } +} From 16e1cf3b6315f3bdf696dcaa952da3ca49b4d4f4 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Wed, 18 Jan 2017 09:15:34 +0100 Subject: [PATCH 025/114] #1340 Recommended 64bit JRE on 32bit OS --- src/com/jpexs/decompiler/flash/gui/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 7c012eff4..85db3d614 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -2365,7 +2365,7 @@ public class Main { @Override public void uncaughtException(Thread t, Throwable e) { logger.log(Level.SEVERE, "Uncaught exception in thread: " + t.getName(), e); - if (e instanceof OutOfMemoryError || !Helper.is64BitJre() && Helper.is64BitOs()) { + if (e instanceof OutOfMemoryError && !Helper.is64BitJre() && Helper.is64BitOs()) { View.showMessageDialog(null, AppStrings.translate("message.warning.outOfMemory32BitJre"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE); } } From 871f4f52d96a3390ea396147b543f3babc0c0dac Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 2 Feb 2017 10:19:33 +0100 Subject: [PATCH 026/114] [#1343] AS 1/2 direct editation critical bug --- CHANGELOG.md | 1 + .../flash/gui/action/ActionPanel.java | 32 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5473974b0..bb48fdb5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file. ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter +- [#1343] AS 1/2 direct editation critical bug ## [10.0.0] - 2016-12-24 ### Added diff --git a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java index 392548d96..b34e3c450 100644 --- a/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/action/ActionPanel.java @@ -901,24 +901,22 @@ public class ActionPanel extends JPanel implements SearchListener -1) { - if (lastLine - prefLines >= 0) { - decompiledEditor.gotoLine(lastLine - prefLines + 1); + if (src != null) { + int lastLine = decompiledEditor.getLine(); + int prefLines = src.getPrefixLineCount(); + if (val) { + String newText = src.removePrefixAndSuffix(lastDecompiled.text); + setDecompiledText(src.getScriptName(), newText); + if (lastLine > -1) { + if (lastLine - prefLines >= 0) { + decompiledEditor.gotoLine(lastLine - prefLines + 1); + } + } + } else { + setDecompiledText(src.getScriptName(), lastDecompiled.text); + if (lastLine > -1) { + decompiledEditor.gotoLine(lastLine + prefLines + 1); } - } - } else { - setDecompiledText(lastASM.getScriptName(), lastDecompiled.text); - if (lastLine > -1) { - decompiledEditor.gotoLine(lastLine + prefLines + 1); } } From 3e99d19a1d0e68074fde36f6b04c38a84d1cc53d Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 6 Feb 2017 13:51:49 +0100 Subject: [PATCH 027/114] [#1348] Cannot properly export frame with cyrillic symbols to SVG --- CHANGELOG.md | 1 + .../jpexs/decompiler/flash/exporters/FrameExporter.java | 4 ++-- .../flash/exporters/commonshape/SVGExporter.java | 2 +- .../src/com/jpexs/decompiler/flash/tags/base/TextTag.java | 8 ++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb48fdb5d..3a6da53dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to this project will be documented in this file. ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter - [#1343] AS 1/2 direct editation critical bug +- [#1348] Cannot properly export frame with cyrillic symbols to SVG ## [10.0.0] - 2016-12-24 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java index 68d3fae11..eecca7d31 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/FrameExporter.java @@ -201,7 +201,7 @@ public class FrameExporter { final Color fbackgroundColor = null; new RetryTask(() -> { int frame = fframes.get(fi); - File f = new File(foutdir + File.separator + frame + ".svg"); + File f = new File(foutdir + File.separator + (frame + 1) + ".svg"); try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(f))) { ExportRectangle rect = new ExportRectangle(tim.displayRect); rect.xMax *= settings.zoom; @@ -361,7 +361,7 @@ public class FrameExporter { } else { for (Integer frame : fframes) { new RetryTask(() -> { - File f = new File(foutdir + File.separator + frame + ".swf"); + File f = new File(foutdir + File.separator + (frame + 1) + ".swf"); Frame fn = (Frame) tim.getFrame(frame); try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(f))) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java index 974aabedd..c29249a94 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java @@ -74,7 +74,7 @@ public class SVGExporter { public Map exportedTags = new HashMap<>(); - public Map> exportedChars = new HashMap<>(); + public Map> exportedChars = new HashMap<>(); private final Map lastIds = new HashMap<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index 4dccc9851..8908be962 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -736,11 +736,11 @@ public abstract class TextTag extends DrawableTag { char ch = font.glyphToChar(entry.glyphIndex); String charId = null; - Map chs; + Map chs; if (exporter.exportedChars.containsKey(font)) { chs = exporter.exportedChars.get(font); - if (chs.containsKey(ch)) { - charId = chs.get(ch); + if (chs.containsKey(entry.glyphIndex)) { + charId = chs.get(entry.glyphIndex); } } else { chs = new HashMap<>(); @@ -753,7 +753,7 @@ public abstract class TextTag extends DrawableTag { SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, exporter, null, colorTransform, zoom); shapeExporter.export(); exporter.endGroup(); - chs.put(ch, charId); + chs.put(entry.glyphIndex, charId); } Element charImage = exporter.addUse(mat, bounds, charId, null); From 0b65cb3c6b6b0d90483066649e572efda690a341 Mon Sep 17 00:00:00 2001 From: MultiplyByZer0 Date: Sat, 11 Feb 2017 21:33:51 -0500 Subject: [PATCH 028/114] Deobfuscate no-op push instructions Some obfuscators will scatter the instructions: pushtrue pop or: pushfalse pop randomly throughout the P-code. As any push instruction immediately followed by a pop instruction must be a no-op, they are removed. --- .../deobfuscation/AVM2DeobfuscatorSimple.java | 35 +++++++++++++++++++ .../AVM2DeobfuscatorSimpleOld.java | 35 +++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index 5b389e12f..a900c705b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -64,11 +64,14 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushDoubleIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntegerTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNanIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNullIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushShortIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushStringIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUIntIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUndefinedIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.SwapIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceOrConvertTypeIns; @@ -148,6 +151,37 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { return result; } + protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { + boolean result = false; + // Deliberately skip over instruction zero + for(int i = 1; i < code.code.size(); i++) { + AVM2Instruction ins1 = code.code.get(i - 1); + AVM2Instruction ins2 = code.code.get(i); + if(ins2.definition instanceof PopIns && + (ins1.definition instanceof PushByteIns || + ins1.definition instanceof PushDoubleIns || + ins1.definition instanceof PushFalseIns || + ins1.definition instanceof PushIntIns || + ins1.definition instanceof PushIntegerTypeIns || + ins1.definition instanceof PushNanIns || + ins1.definition instanceof PushNullIns || + ins1.definition instanceof PushShortIns || + ins1.definition instanceof PushStringIns || + ins1.definition instanceof PushTrueIns || + ins1.definition instanceof PushUIntIns || + ins1.definition instanceof PushUndefinedIns) + ) { + if (Thread.currentThread().isInterrupted()) { + throw new InterruptedException(); + } + + code.removeInstruction(i - 1, body); i--; + code.removeInstruction(i, body); i--; + result = true; + } + } return result; + } + protected void initLocalRegs(LocalDataArea localData, int localReservedCount, int maxRegs, boolean executeFromFirst) { for (int i = 0; i < localReservedCount; i++) { localData.localRegisters.put(i, NotCompileTime.INSTANCE); @@ -374,6 +408,7 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { code.removeDeadCode(body); removeObfuscationIfs(classIndex, isStatic, scriptIndex, abc, body, null); removeZeroJumps(code, body); + removeNullPushes(code, body); } class ExecutionResult { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 11ded804a..1052b5e81 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -68,11 +68,14 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushByteIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushDoubleIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushFalseIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntegerTypeIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushIntIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNanIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushNullIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushShortIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushStringIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushTrueIns; +import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUIntIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PushUndefinedIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.SwapIns; import com.jpexs.decompiler.flash.abc.avm2.instructions.types.CoerceOrConvertTypeIns; @@ -203,6 +206,37 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { return result; } + protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { + boolean result = false; + // Deliberately skip over instruction zero + for(int i = 1; i < code.code.size(); i++) { + AVM2Instruction ins1 = code.code.get(i - 1); + AVM2Instruction ins2 = code.code.get(i); + if(ins2.definition instanceof PopIns && + (ins1.definition instanceof PushByteIns || + ins1.definition instanceof PushDoubleIns || + ins1.definition instanceof PushFalseIns || + ins1.definition instanceof PushIntIns || + ins1.definition instanceof PushIntegerTypeIns || + ins1.definition instanceof PushNanIns || + ins1.definition instanceof PushNullIns || + ins1.definition instanceof PushShortIns || + ins1.definition instanceof PushStringIns || + ins1.definition instanceof PushTrueIns || + ins1.definition instanceof PushUIntIns || + ins1.definition instanceof PushUndefinedIns) + ) { + if (Thread.currentThread().isInterrupted()) { + throw new InterruptedException(); + } + + code.removeInstruction(i - 1, body); i--; + code.removeInstruction(i, body); i--; + result = true; + } + } return result; + } + protected AVM2LocalData newLocalData(int scriptIndex, ABC abc, AVM2ConstantPool cpool, MethodBody body, boolean isStatic, int classIndex) { AVM2LocalData localData = new AVM2LocalData(); localData.isStatic = isStatic; @@ -475,6 +509,7 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { code.removeDeadCode(body); removeObfuscationIfs(classIndex, isStatic, scriptIndex, abc, body, new ArrayList<>()); removeZeroJumps(code, body); + removeNullPushes(code, body); } class ExecutionResult { From ceffd8bdb5692412c374720865f5fd96e1dc3c20 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 27 Feb 2017 12:28:11 +0100 Subject: [PATCH 029/114] [#1354] Various FLA export problem fixes --- CHANGELOG.md | 1 + .../decompiler/flash/xfl/XFLConverter.java | 70 +++++++++++-------- .../gui/editor/LineMarkedEditorPane.java | 6 +- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a6da53dc..57ea3e8ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ All notable changes to this project will be documented in this file. - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter - [#1343] AS 1/2 direct editation critical bug - [#1348] Cannot properly export frame with cyrillic symbols to SVG +- [#1354] Various FLA export problem fixes ## [10.0.0] - 2016-12-24 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java index 8e130c6b1..2f7fc3b68 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/xfl/XFLConverter.java @@ -1562,39 +1562,43 @@ public class XFLConverter { } } CharacterTag character = characters.get(rec.characterId); - MATRIX matrix = rec.placeMatrix; - XFLXmlWriter recCharWriter = new XFLXmlWriter(); + if (character != null) { + MATRIX matrix = rec.placeMatrix; + XFLXmlWriter recCharWriter = new XFLXmlWriter(); - int characterId = character.getCharacterId(); - if ((character instanceof ShapeTag) && (nonLibraryShapes.contains(characterId))) { - ShapeTag shape = (ShapeTag) character; - convertShape(characters, matrix, shape.getShapeNum(), shape.getShapes().shapeRecords, shape.getShapes().fillStyles, shape.getShapes().lineStyles, false, false, recCharWriter); - } else if (character instanceof TextTag) { - convertText(null, (TextTag) character, matrix, filters, null, recCharWriter); - } else if (character instanceof DefineVideoStreamTag) { - convertVideoInstance(null, matrix, (DefineVideoStreamTag) character, null, recCharWriter); - } else { - convertSymbolInstance(null, matrix, colorTransformAlpha, false, blendMode, filters, true, null, null, null, characters.get(rec.characterId), characters, tags, flaVersion, recCharWriter); - } + int characterId = character.getCharacterId(); + if ((character instanceof ShapeTag) && (nonLibraryShapes.contains(characterId))) { + ShapeTag shape = (ShapeTag) character; + convertShape(characters, matrix, shape.getShapeNum(), shape.getShapes().shapeRecords, shape.getShapes().fillStyles, shape.getShapes().lineStyles, false, false, recCharWriter); + } else if (character instanceof TextTag) { + convertText(null, (TextTag) character, matrix, filters, null, recCharWriter); + } else if (character instanceof DefineVideoStreamTag) { + convertVideoInstance(null, matrix, (DefineVideoStreamTag) character, null, recCharWriter); + } else { + convertSymbolInstance(null, matrix, colorTransformAlpha, false, blendMode, filters, true, null, null, null, characters.get(rec.characterId), characters, tags, flaVersion, recCharWriter); + } - int duration = frame - lastFrame; - lastFrame = frame; - if (duration > 0) { - if (duration > 1) { + int duration = frame - lastFrame; + lastFrame = frame; + if (duration > 0) { + if (duration > 1) { + symbolStr.writeStartElement("DOMFrame", new String[]{ + "index", Integer.toString(frame - duration), + "duration", Integer.toString(duration - 1), + "keyMode", Integer.toString(KEY_MODE_NORMAL),}); + symbolStr.writeElementValue("elements", ""); + symbolStr.writeEndElement(); + } symbolStr.writeStartElement("DOMFrame", new String[]{ - "index", Integer.toString(frame - duration), - "duration", Integer.toString(duration - 1), + "index", Integer.toString(frame - 1), "keyMode", Integer.toString(KEY_MODE_NORMAL),}); - symbolStr.writeElementValue("elements", ""); + symbolStr.writeStartElement("elements"); + symbolStr.writeCharactersRaw(recCharWriter.toString()); + symbolStr.writeEndElement(); symbolStr.writeEndElement(); } - symbolStr.writeStartElement("DOMFrame", new String[]{ - "index", Integer.toString(frame - 1), - "keyMode", Integer.toString(KEY_MODE_NORMAL),}); - symbolStr.writeStartElement("elements"); - symbolStr.writeCharactersRaw(recCharWriter.toString()); - symbolStr.writeEndElement(); - symbolStr.writeEndElement(); + } else { + logger.log(Level.WARNING, "Character with id={0} was not found.", rec.characterId); } } } @@ -3997,11 +4001,19 @@ public class XFLConverter { //kerning ? String ls = attributes.getValue("letterSpacing"); if (ls != null) { - letterSpacing = Double.parseDouble(ls); + try { + letterSpacing = Double.parseDouble(ls); + } catch (NumberFormatException ex) { + logger.log(Level.WARNING, "Invalid letter spacing value: {0}", ls); + } } String s = attributes.getValue("size"); if (s != null) { - size = Integer.parseInt(s); + try { + size = Integer.parseInt(s); + } catch (NumberFormatException ex) { + logger.log(Level.WARNING, "Invalid font size: {0}", s); + } } String c = attributes.getValue("color"); if (c != null) { diff --git a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java index 41683b60f..ad2a514aa 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java @@ -341,8 +341,10 @@ public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHan Rectangle r; try { r = modelToView(pos); - if (lastPos.x < r.x) { - pos--; + if (r != null) { + if (lastPos.x < r.x) { + pos--; + } } } catch (BadLocationException ex) { //ignore From e8e598dc6c6441feacdd4c0b71fd292a87e77b1d Mon Sep 17 00:00:00 2001 From: MultiplyByZer0 Date: Tue, 28 Feb 2017 15:49:21 -0500 Subject: [PATCH 030/114] Correct deobfuscation for labels The deobfuscator will no longer incorrectly remove the following code: pushtrue label1:pop --- .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java | 2 ++ .../abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index a900c705b..145c51fa3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -155,9 +155,11 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { boolean result = false; // Deliberately skip over instruction zero for(int i = 1; i < code.code.size(); i++) { + Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if(ins2.definition instanceof PopIns && + !offsets.contains(ins2.getAddress()) && (ins1.definition instanceof PushByteIns || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns || diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 1052b5e81..1e8e925d2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -105,6 +105,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; /** * @@ -210,9 +211,11 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { boolean result = false; // Deliberately skip over instruction zero for(int i = 1; i < code.code.size(); i++) { + Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if(ins2.definition instanceof PopIns && + !offsets.contains(ins2.getAddress()) && (ins1.definition instanceof PushByteIns || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns || From 2c85203985093ed65b75e1c228b9919bee1fc5c5 Mon Sep 17 00:00:00 2001 From: MultiplyByZer0 Date: Sat, 11 Mar 2017 22:50:30 -0400 Subject: [PATCH 031/114] Prevent crash when calling insertInstruction() on empty MethodBody If an AVM2Code object is empty, and we attempt to insert an instruction, the method will execute code.get(-1) and throw an exception. This commit handles the situation. --- .../src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index 19c774f43..248eaefa7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -2371,7 +2371,9 @@ public class AVM2Code implements Cloneable { pos = code.size(); } final int byteCount = instruction.getBytesLength(); - if (pos == code.size()) { + if (code.size() == 0) { + instruction.setAddress(0); + } else if (pos == code.size()) { instruction.setAddress(code.get(pos - 1).getAddress() + code.get(pos - 1).getBytesLength()); } else { instruction.setAddress(code.get(pos).getAddress()); From 53e29673eec48330ceec836e64a578cac31199f1 Mon Sep 17 00:00:00 2001 From: MultiplyByZer0 Date: Tue, 14 Mar 2017 02:53:17 -0400 Subject: [PATCH 032/114] Allow reload confirmation to be disabled If the user has disabled confirmation for closing, disable confirmation for reloading as well. --- src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 471aefe2c..8efd1cbec 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -533,7 +533,7 @@ public abstract class MainFrameMenu implements MenuBuilder { protected boolean reloadActionPerformed(ActionEvent evt) { if (swf != null) { - if (View.showConfirmDialog(null, translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { + if (!Configuration.showCloseConfirmation.get() || View.showConfirmDialog(null, translate("message.confirm.reload"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { Main.reloadFile(swf.swfList); } } @@ -542,7 +542,7 @@ public abstract class MainFrameMenu implements MenuBuilder { protected boolean reloadAllActionPerformed(ActionEvent evt) { if (swf != null) { - if (View.showConfirmDialog(null, translate("message.confirm.reloadAll"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { + if (!Configuration.showCloseConfirmation.get() || View.showConfirmDialog(null, translate("message.confirm.reloadAll"), translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { Main.reloadApp(); } From b7d1cfce810dc60f6034d3445143ff153ba3cde4 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 08:15:35 +0200 Subject: [PATCH 033/114] [#1367] Raw edit conditional type fix. --- CHANGELOG.md | 1 + .../flash/exporters/shape/BitmapExporter.java | 16 +++++++- .../com/jpexs/decompiler/flash/tags/Tag.java | 3 ++ .../decompiler/flash/types/FILLSTYLE.java | 4 +- .../decompiler/flash/types/LINESTYLE.java | 2 +- .../flash/gui/GenericTagTreePanel.java | 37 ++++++++++++++++--- 6 files changed, 54 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57ea3e8ba..7c3e93a48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file. - [#1343] AS 1/2 direct editation critical bug - [#1348] Cannot properly export frame with cyrillic symbols to SVG - [#1354] Various FLA export problem fixes +- [#1367] Raw edit conditional type fix. ## [10.0.0] - 2016-12-24 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java index 0f242649d..7af0c0510 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java @@ -46,6 +46,8 @@ import java.awt.geom.GeneralPath; import java.awt.geom.NoninvertibleTransformException; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -85,6 +87,8 @@ public class BitmapExporter extends ShapeExporterBase { private Matrix strokeTransformation; + private static boolean linearGradientColorWarnignShown = false; + private class TransformedStroke implements Stroke { /** @@ -238,7 +242,17 @@ public class BitmapExporter extends ShapeExporterBase { cm = MultipleGradientPaint.CycleMethod.REPEAT; } - fillPaint = new LinearGradientPaint(POINT_NEG16384_0, POINT_16384_0, ratiosArr, colorsArr, cm, cstype, IDENTITY_TRANSFORM); + if (colorsArr.length >= 2) { + fillPaint = new LinearGradientPaint(POINT_NEG16384_0, POINT_16384_0, ratiosArr, colorsArr, cm, cstype, IDENTITY_TRANSFORM); + } else { + if (!linearGradientColorWarnignShown) { + Logger.getLogger(BitmapExporter.class.getName()).log(Level.WARNING, "Linear gradient fill should have at least 2 gradient records."); + linearGradientColorWarnignShown = true; + } + + fillPaint = null; + } + fillTransform = matrix.toTransform(); } break; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java index c3e9a3aa2..bae51e888 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -53,6 +53,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.logging.Logger; /** * Represents Tag inside SWF file @@ -61,6 +62,8 @@ import java.util.Set; */ public abstract class Tag implements NeedsCharacters, Exportable, Serializable { + private static final Logger logger = Logger.getLogger(Tag.class.getName()); + /** * Identifier of tag type */ diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java index 4d305e6ca..0972138ab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.types; import com.jpexs.decompiler.flash.tags.DefineShape3Tag; +import com.jpexs.decompiler.flash.tags.DefineShape4Tag; import com.jpexs.decompiler.flash.tags.base.NeedsCharacters; import com.jpexs.decompiler.flash.types.annotations.Conditional; import com.jpexs.decompiler.flash.types.annotations.ConditionalType; @@ -66,7 +67,8 @@ public class FILLSTYLE implements NeedsCharacters, Serializable { @Internal public boolean inShape3; - @ConditionalType(type = RGBA.class, tags = DefineShape3Tag.ID) + @Conditional(value = "fillStyleType", options = {SOLID}) + @ConditionalType(type = RGBA.class, tags = {DefineShape3Tag.ID, DefineShape4Tag.ID}) public RGB color; @Conditional(value = "fillStyleType", options = {LINEAR_GRADIENT, RADIAL_GRADIENT, FOCAL_RADIAL_GRADIENT}) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java index 172e5e810..26628ccd1 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/LINESTYLE.java @@ -33,7 +33,7 @@ public class LINESTYLE implements NeedsCharacters, Serializable { @SWFType(BasicType.UI16) public int width; - @ConditionalType(tags = {DefineShape3Tag.ID, DefineShape4Tag.ID}, type = RGBA.class) + @ConditionalType(type = RGBA.class, tags = {DefineShape3Tag.ID, DefineShape4Tag.ID}) public RGB color; @Override diff --git a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java index 53a22d829..7d6e3f643 100644 --- a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java @@ -34,6 +34,7 @@ import com.jpexs.decompiler.flash.types.BasicType; import com.jpexs.decompiler.flash.types.RGB; import com.jpexs.decompiler.flash.types.RGBA; import com.jpexs.decompiler.flash.types.annotations.Conditional; +import com.jpexs.decompiler.flash.types.annotations.ConditionalType; import com.jpexs.decompiler.flash.types.annotations.EnumValue; import com.jpexs.decompiler.flash.types.annotations.EnumValues; import com.jpexs.decompiler.flash.types.annotations.HideInRawEdit; @@ -478,13 +479,16 @@ public class GenericTagTreePanel extends GenericTagPanel { private static final class FieldNode extends DefaultMutableTreeNode { + private Tag tag; + private Object obj; private FieldSet fieldSet; private int index; - public FieldNode(Object obj, FieldSet fieldSet, int index) { + public FieldNode(Tag tag, Object obj, FieldSet fieldSet, int index) { + this.tag = tag; this.obj = obj; this.fieldSet = fieldSet; this.index = index; @@ -682,7 +686,28 @@ public class GenericTagTreePanel extends GenericTagPanel { Object val = ReflectionTools.getValue(obj, fieldSet.get(fieldIndex), index); if (val == null) { try { - val = ReflectionTools.newInstanceOf(fieldSet.get(fieldIndex).getType()); + Class type = fieldSet.get(fieldIndex).getType(); + ConditionalType cond = fieldSet.get(fieldIndex).getAnnotation(ConditionalType.class); + if (cond != null) { + boolean condEnabled = false; + int[] tags = cond.tags(); + if (tags != null && tags.length > 0) { + int tagId = tag.getId(); + for (int i = 0; i < tags.length; i++) { + if (tags[i] == tagId) { + condEnabled = true; + break; + } + } + } + + // todo: check other condition filters + if (condEnabled) { + type = cond.type(); + } + } + + val = ReflectionTools.newInstanceOf(type); ReflectionTools.setValue(obj, fieldSet.get(fieldIndex), index, val); } catch (InstantiationException | IllegalAccessException ex) { logger.log(Level.SEVERE, null, ex); @@ -725,7 +750,7 @@ public class GenericTagTreePanel extends GenericTagPanel { private static class MyTreeModel extends DefaultTreeModel { - private final Object mtroot; + private final Tag mtroot; private final List listeners = new ArrayList<>(); @@ -814,15 +839,15 @@ public class GenericTagTreePanel extends GenericTagPanel { private Object getChild(Object parent, int index, boolean limited) { if (parent == mtroot) { - return new FieldNode(mtroot, filterFields(this, mtroot.getClass().getSimpleName(), mtroot.getClass(), limited).get(index), -1); + return new FieldNode(mtroot, mtroot, filterFields(this, mtroot.getClass().getSimpleName(), mtroot.getClass(), limited).get(index), -1); } FieldNode fnode = (FieldNode) parent; Field field = fnode.fieldSet.get(FIELD_INDEX); if (ReflectionTools.needsIndex(field) && (fnode.index == -1)) { //Arrays ot Lists - return new FieldNode(fnode.obj, fnode.fieldSet, index); + return new FieldNode(mtroot, fnode.obj, fnode.fieldSet, index); } parent = fnode.getValue(FIELD_INDEX); - return new FieldNode(parent, filterFields(this, getNodePathName(fnode), parent.getClass(), limited).get(index), -1); + return new FieldNode(mtroot, parent, filterFields(this, getNodePathName(fnode), parent.getClass(), limited).get(index), -1); } @Override From 29f5c1776760d8894d956cf5d1355ef0186be55e Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 11:31:10 +0200 Subject: [PATCH 034/114] Focal radial gradient raw edit fix --- .../decompiler/flash/SWFOutputStream.java | 3 +- .../decompiler/flash/types/FILLSTYLE.java | 25 ++++++++++++++++- .../flash/types/FieldChangeObserver.java | 28 +++++++++++++++++++ .../parser/ConditionEvaluator.java | 11 ++++++-- .../com/jpexs/helpers/ReflectionTools.java | 10 +++++++ .../flash/gui/GenericTagTreePanel.java | 5 ++-- 6 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FieldChangeObserver.java diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java index 9ad13c603..4d9f18c49 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWFOutputStream.java @@ -1201,8 +1201,7 @@ public class SWFOutputStream extends OutputStream { if ((value.fillStyleType == FILLSTYLE.LINEAR_GRADIENT) || (value.fillStyleType == FILLSTYLE.RADIAL_GRADIENT)) { writeGRADIENT(value.gradient, shapeNum); - } - if (value.fillStyleType == FILLSTYLE.FOCAL_RADIAL_GRADIENT) { + } else if (value.fillStyleType == FILLSTYLE.FOCAL_RADIAL_GRADIENT) { writeFOCALGRADIENT((FOCALGRADIENT) value.gradient, shapeNum); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java index 0972138ab..02f1b1f4a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FILLSTYLE.java @@ -26,13 +26,14 @@ import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.decompiler.flash.types.annotations.SWFVersion; import java.io.Serializable; +import java.lang.reflect.Field; import java.util.Set; /** * * @author JPEXS */ -public class FILLSTYLE implements NeedsCharacters, Serializable { +public class FILLSTYLE implements NeedsCharacters, FieldChangeObserver, Serializable { @SWFType(BasicType.UI8) @EnumValue(value = SOLID, text = "Solid") @@ -120,4 +121,26 @@ public class FILLSTYLE implements NeedsCharacters, Serializable { } return false; } + + @Override + public void fieldChanged(Field field) { + if ((fillStyleType == FILLSTYLE.LINEAR_GRADIENT) + || (fillStyleType == FILLSTYLE.RADIAL_GRADIENT)) { + if (gradient instanceof FOCALGRADIENT) { + GRADIENT g = new GRADIENT(); + g.spreadMode = gradient.spreadMode; + g.interpolationMode = gradient.interpolationMode; + g.gradientRecords = gradient.gradientRecords; + gradient = g; + } + } else if (fillStyleType == FILLSTYLE.FOCAL_RADIAL_GRADIENT) { + if (!(gradient instanceof FOCALGRADIENT)) { + FOCALGRADIENT g = new FOCALGRADIENT(); + g.spreadMode = gradient.spreadMode; + g.interpolationMode = gradient.interpolationMode; + g.gradientRecords = gradient.gradientRecords; + gradient = g; + } + } + } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FieldChangeObserver.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FieldChangeObserver.java new file mode 100644 index 000000000..715b6ff54 --- /dev/null +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/FieldChangeObserver.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.types; + +import java.lang.reflect.Field; + +/** + * + * @author JPEXS + */ +public interface FieldChangeObserver { + + void fieldChanged(Field field); +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/parser/ConditionEvaluator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/parser/ConditionEvaluator.java index a38bac4bc..aed833be2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/parser/ConditionEvaluator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/annotations/parser/ConditionEvaluator.java @@ -17,6 +17,7 @@ package com.jpexs.decompiler.flash.types.annotations.parser; import com.jpexs.decompiler.flash.types.annotations.Conditional; +import com.jpexs.decompiler.flash.types.annotations.ConditionalType; import java.io.IOException; import java.io.StringReader; import java.util.EmptyStackException; @@ -31,10 +32,14 @@ import java.util.Stack; */ public class ConditionEvaluator { - private final Conditional cond; + private final String[] values; public ConditionEvaluator(Conditional cond) { - this.cond = cond; + values = cond.value(); + } + + public ConditionEvaluator(ConditionalType cond) { + values = cond.value(); } private void expressionRest(Map fields, Stack stack, ConditionLexer lex) throws IOException, AnnotationParseException { @@ -114,7 +119,7 @@ public class ConditionEvaluator { } private String prepareCond() { - String[] vals = cond.value(); + String[] vals = values; if (vals == null || vals.length == 0) { return ""; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/helpers/ReflectionTools.java b/libsrc/ffdec_lib/src/com/jpexs/helpers/ReflectionTools.java index 67c6398a1..f903dbb6c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/helpers/ReflectionTools.java +++ b/libsrc/ffdec_lib/src/com/jpexs/helpers/ReflectionTools.java @@ -16,6 +16,7 @@ */ package com.jpexs.helpers; +import com.jpexs.decompiler.flash.types.FieldChangeObserver; import com.jpexs.decompiler.flash.types.annotations.Internal; import com.jpexs.decompiler.flash.types.annotations.SWFField; import java.lang.reflect.Array; @@ -125,8 +126,15 @@ public class ReflectionTools { return 0; } + private static void notifyFieldChanged(Object obj, Field field) { + if (obj != null && obj instanceof FieldChangeObserver) { + ((FieldChangeObserver) obj).fieldChanged(field); + } + } + public static void setValue(Object obj, Field field, Object newValue) throws IllegalArgumentException, IllegalAccessException { field.set(obj, newValue); + notifyFieldChanged(obj, field); } @SuppressWarnings("unchecked") @@ -146,6 +154,7 @@ public class ReflectionTools { Array.set(value, index, newValue); } else { field.set(obj, newValue); + notifyFieldChanged(obj, field); } } @@ -303,6 +312,7 @@ public class ReflectionTools { } try { field.set(object, copy); + notifyFieldChanged(object, field); } catch (IllegalArgumentException | IllegalAccessException ex) { logger.log(Level.SEVERE, null, ex); return false; diff --git a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java index 7d6e3f643..1eb98113d 100644 --- a/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/GenericTagTreePanel.java @@ -701,7 +701,6 @@ public class GenericTagTreePanel extends GenericTagPanel { } } - // todo: check other condition filters if (condEnabled) { type = cond.type(); } @@ -790,8 +789,8 @@ public class GenericTagTreePanel extends GenericTagPanel { String parentPath = currentPath.indexOf('.') == -1 ? "" : currentPath.substring(0, currentPath.lastIndexOf('.')); try { for (String cname : ev.getFields()) { - String fullParh = parentPath + "." + cname; - if (fullParh.equals(dependence)) { + String fullPath = parentPath + "." + cname; + if (fullPath.equals(dependence)) { ret.add(fnode); break; } From f847e384d2b1ccf3ed951113796ea59b6b47fbca Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 14:51:08 +0200 Subject: [PATCH 035/114] Bitmap export of buggy gradient records fixed (now same as in flash) --- .../decompiler/flash/exporters/shape/BitmapExporter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java index 7af0c0510..5aad1744c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/BitmapExporter.java @@ -250,7 +250,11 @@ public class BitmapExporter extends ShapeExporterBase { linearGradientColorWarnignShown = true; } - fillPaint = null; + if (colorsArr.length == 1) { + fillPaint = colorsArr[0]; + } else { + fillPaint = null; + } } fillTransform = matrix.toTransform(); From 276ea972f2bbe6db06902e99888571a30cf0c4ec Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 15:25:51 +0200 Subject: [PATCH 036/114] svg import resize fix --- .../flash/importers/svg/SvgImporter.java | 6 ++ .../jpexs/decompiler/flash/types/SHAPE.java | 18 ++++++ .../flash/types/SHAPEWITHSTYLE.java | 18 ++++++ .../flash/types/shaperecords/SHAPERECORD.java | 57 +++++++++---------- 4 files changed, 69 insertions(+), 30 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index 44a33590b..26c1bc5f0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -185,6 +185,12 @@ public class SvgImporter { rect.Ymin = (int) Math.round(viewBox.y * SWF.unitDivisor); rect.Xmax = (int) Math.round((viewBox.x + viewBox.width) * SWF.unitDivisor); rect.Ymax = (int) Math.round((viewBox.y + viewBox.height) * SWF.unitDivisor); + } else if (viewBox != null) { + double width = viewBox.width * SWF.unitDivisor; + double height = viewBox.height * SWF.unitDivisor; + double radioX = rect.getWidth() / width; + double radioY = rect.getHeight() / height; + shapes = shapes.resize(radioX, radioY); } st.shapes = shapes; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java index 0430c0f55..30d404658 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPE.java @@ -99,6 +99,24 @@ public class SHAPE implements NeedsCharacters, Serializable { return area; } + public SHAPE resize(double multiplier) { + return resize(multiplier, multiplier); + } + + public SHAPE resize(double multiplierX, double multiplierY) { + SHAPE ret = new SHAPE(); + ret.numFillBits = numFillBits; + ret.numLineBits = numLineBits; + List recs = new ArrayList<>(); + for (SHAPERECORD r : shapeRecords) { + SHAPERECORD c = r.resize(multiplierX, multiplierY); + recs.add(c); + } + + ret.shapeRecords = recs; + return ret; + } + public static SHAPE createEmpty(int shapeNum) { SHAPE ret = new SHAPE(); ret.shapeRecords = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java index 8b521c511..51d3a173a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/SHAPEWITHSTYLE.java @@ -21,6 +21,7 @@ import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; import java.io.Serializable; import java.util.ArrayList; +import java.util.List; import java.util.Set; /** @@ -64,6 +65,23 @@ public class SHAPEWITHSTYLE extends SHAPE implements NeedsCharacters, Serializab return modified; } + @Override + public SHAPEWITHSTYLE resize(double multiplierX, double multiplierY) { + SHAPEWITHSTYLE ret = new SHAPEWITHSTYLE(); + ret.numFillBits = numFillBits; + ret.numLineBits = numLineBits; + List recs = new ArrayList<>(); + for (SHAPERECORD r : shapeRecords) { + SHAPERECORD c = r.resize(multiplierX, multiplierY); + recs.add(c); + } + + ret.shapeRecords = recs; + ret.fillStyles = fillStyles; // todo: clone? + ret.lineStyles = lineStyles; // todo: clone? + return ret; + } + public static SHAPEWITHSTYLE createEmpty(int shapeNum) { SHAPEWITHSTYLE ret = new SHAPEWITHSTYLE(); ret.shapeRecords = new ArrayList<>(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index 87c3d53cf..0ee82da4e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -428,37 +428,34 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters, Seriali return new Point2D.Double(x, y); } - public static SHAPE resizeSHAPE(SHAPE shp, double multiplier) { - SHAPE ret = new SHAPE(); - ret.numFillBits = shp.numFillBits; - ret.numLineBits = shp.numLineBits; - List recs = new ArrayList<>(); - for (SHAPERECORD r : shp.shapeRecords) { - SHAPERECORD c = r.clone(); - if (c instanceof StyleChangeRecord) { - StyleChangeRecord scr = (StyleChangeRecord) c; - scr.moveDeltaX = (int) (multiplier * scr.moveDeltaX); - scr.moveDeltaY = (int) (multiplier * scr.moveDeltaY); - scr.calculateBits(); - } - if (c instanceof CurvedEdgeRecord) { - CurvedEdgeRecord cer = (CurvedEdgeRecord) c; - cer.controlDeltaX = (int) (multiplier * cer.controlDeltaX); - cer.controlDeltaY = (int) (multiplier * cer.controlDeltaY); - cer.anchorDeltaX = (int) (multiplier * cer.anchorDeltaX); - cer.anchorDeltaY = (int) (multiplier * cer.anchorDeltaY); - cer.calculateBits(); - } - if (c instanceof StraightEdgeRecord) { - StraightEdgeRecord ser = (StraightEdgeRecord) c; - ser.deltaX = (int) (multiplier * ser.deltaX); - ser.deltaY = (int) (multiplier * ser.deltaY); - ser.calculateBits(); - } - recs.add(c); + public SHAPERECORD resize(double multiplier) { + return resize(multiplier, multiplier); + } + + public SHAPERECORD resize(double multiplierX, double multiplierY) { + SHAPERECORD c = clone(); + if (c instanceof StyleChangeRecord) { + StyleChangeRecord scr = (StyleChangeRecord) c; + scr.moveDeltaX = (int) (multiplierX * scr.moveDeltaX); + scr.moveDeltaY = (int) (multiplierY * scr.moveDeltaY); + scr.calculateBits(); } - ret.shapeRecords = recs; - return ret; + if (c instanceof CurvedEdgeRecord) { + CurvedEdgeRecord cer = (CurvedEdgeRecord) c; + cer.controlDeltaX = (int) (multiplierX * cer.controlDeltaX); + cer.controlDeltaY = (int) (multiplierY * cer.controlDeltaY); + cer.anchorDeltaX = (int) (multiplierX * cer.anchorDeltaX); + cer.anchorDeltaY = (int) (multiplierY * cer.anchorDeltaY); + cer.calculateBits(); + } + if (c instanceof StraightEdgeRecord) { + StraightEdgeRecord ser = (StraightEdgeRecord) c; + ser.deltaX = (int) (multiplierX * ser.deltaX); + ser.deltaY = (int) (multiplierY * ser.deltaY); + ser.calculateBits(); + } + + return c; } public static Shape moveShapeToStart(Shape s) { From d2504e5e711ba54a55e2a4fd051c9cd205af925a Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 17:25:49 +0200 Subject: [PATCH 037/114] SVG importer rounding problem fixed --- .../flash/exporters/commonshape/Matrix.java | 13 ++++ .../flash/importers/svg/SvgImporter.java | 69 ++++++++++--------- 2 files changed, 50 insertions(+), 32 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java index bef21beee..a14a53279 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/Matrix.java @@ -43,6 +43,12 @@ public final class Matrix implements Cloneable { return mat; } + public static Matrix getScaleInstance(double scaleX, double scaleY) { + Matrix mat = new Matrix(); + mat.scale(scaleX, scaleY); + return mat; + } + public static Matrix getTranslateInstance(double x, double y) { Matrix mat = new Matrix(); mat.translate(x, y); @@ -200,6 +206,13 @@ public final class Matrix implements Cloneable { rotateSkew1 *= factor; } + public void scale(double factorX, double factorY) { + scaleX *= factorX; + scaleY *= factorY; + rotateSkew0 *= factorX; + rotateSkew1 *= factorY; + } + public Matrix concatenate(Matrix m) { Matrix result = new Matrix(); result.scaleX = scaleX * m.scaleX + rotateSkew1 * m.rotateSkew0; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index 26c1bc5f0..5f6b5adbb 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -100,6 +100,14 @@ public class SvgImporter { shapes.lineStyles.lineStyles = new LINESTYLE[0]; int shapeNum = st.getShapeNum(); + RECT rect = st.getRect(); + int origXmin = rect.Xmin; + int origYmin = rect.Ymin; + rect.Xmin -= origXmin; + rect.Xmax -= origXmin; + rect.Ymin -= origYmin; + rect.Ymax -= origYmin; + shapes.shapeRecords = new ArrayList<>(); Rectangle2D.Double viewBox = null; @@ -165,6 +173,18 @@ public class SvgImporter { SvgStyle style = new SvgStyle(this, idMap, rootElement); Matrix transform = new Matrix(); + + if (!fill) { + rect.Xmin = (int) Math.round(viewBox.x * SWF.unitDivisor); + rect.Ymin = (int) Math.round(viewBox.y * SWF.unitDivisor); + rect.Xmax = (int) Math.round((viewBox.x + viewBox.width) * SWF.unitDivisor); + rect.Ymax = (int) Math.round((viewBox.y + viewBox.height) * SWF.unitDivisor); + } else { + double ratioX = rect.getWidth() / width / SWF.unitDivisor; + double ratioY = rect.getHeight() / height / SWF.unitDivisor; + transform = Matrix.getScaleInstance(ratioX, ratioY); + } + processSvgObject(idMap, shapeNum, shapes, rootElement, transform, style); } catch (SAXException | IOException | ParserConfigurationException ex) { Logger.getLogger(ShapeImporter.class.getName()).log(Level.SEVERE, null, ex); @@ -172,27 +192,6 @@ public class SvgImporter { shapes.shapeRecords.add(new EndShapeRecord()); - RECT rect = st.getRect(); - int origXmin = rect.Xmin; - int origYmin = rect.Ymin; - rect.Xmin -= origXmin; - rect.Xmax -= origXmin; - rect.Ymin -= origYmin; - rect.Ymax -= origYmin; - - if (!fill && viewBox != null) { - rect.Xmin = (int) Math.round(viewBox.x * SWF.unitDivisor); - rect.Ymin = (int) Math.round(viewBox.y * SWF.unitDivisor); - rect.Xmax = (int) Math.round((viewBox.x + viewBox.width) * SWF.unitDivisor); - rect.Ymax = (int) Math.round((viewBox.y + viewBox.height) * SWF.unitDivisor); - } else if (viewBox != null) { - double width = viewBox.width * SWF.unitDivisor; - double height = viewBox.height * SWF.unitDivisor; - double radioX = rect.getWidth() / width; - double radioY = rect.getHeight() / height; - shapes = shapes.resize(radioX, radioY); - } - st.shapes = shapes; st.setModified(true); @@ -279,7 +278,13 @@ public class SvgImporter { double x = x0; double y = y0; Point p; - char cmd = Character.toUpperCase(command.command); + + boolean isRelative = Character.isLowerCase(command.command); + if (isRelative) { + throw new Error("processCommands is called with relative command"); + } + + char cmd = command.command; switch (cmd) { case 'M': StyleChangeRecord scr = new StyleChangeRecord(); @@ -298,18 +303,18 @@ public class SvgImporter { p = transform2.transform(x, y); scr.moveDeltaX = (int) Math.round(p.x); scr.moveDeltaY = (int) Math.round(p.y); - prevPoint = p; + prevPoint = new Point(scr.moveDeltaX, scr.moveDeltaY); scr.stateMoveTo = true; newRecords.add(scr); - startPoint = p; + startPoint = prevPoint; break; case 'Z': StraightEdgeRecord serz = new StraightEdgeRecord(); p = startPoint; serz.deltaX = (int) Math.round(p.x - prevPoint.x); serz.deltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + serz.deltaX, prevPoint.y + serz.deltaY); serz.generalLineFlag = true; newRecords.add(serz); if (lineStyle2Obj != null) { @@ -324,7 +329,7 @@ public class SvgImporter { p = transform2.transform(x, y); serl.deltaX = (int) Math.round(p.x - prevPoint.x); serl.deltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + serl.deltaX, prevPoint.y + serl.deltaY); serl.generalLineFlag = true; serl.simplify(); newRecords.add(serl); @@ -335,7 +340,7 @@ public class SvgImporter { p = transform2.transform(x, y); serh.deltaX = (int) Math.round(p.x - prevPoint.x); - prevPoint = p; + prevPoint = new Point(prevPoint.x + serh.deltaX, prevPoint.y/* + serh.deltaY*/); newRecords.add(serh); break; case 'V': @@ -344,7 +349,7 @@ public class SvgImporter { p = transform2.transform(x, y); serv.deltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x/* + serv.deltaX*/, prevPoint.y + serv.deltaY); serv.vertLineFlag = true; newRecords.add(serv); break; @@ -356,7 +361,7 @@ public class SvgImporter { p = transform2.transform(x, y); cer.controlDeltaX = (int) Math.round(p.x - prevPoint.x); cer.controlDeltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + cer.controlDeltaX, prevPoint.y + cer.controlDeltaY); x = command.params[2]; y = command.params[3]; @@ -364,7 +369,7 @@ public class SvgImporter { p = transform2.transform(x, y); cer.anchorDeltaX = (int) Math.round(p.x - prevPoint.x); cer.anchorDeltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + cer.anchorDeltaX, prevPoint.y + cer.anchorDeltaY); newRecords.add(cer); break; case 'C': @@ -400,12 +405,12 @@ public class SvgImporter { p = new Point(quadCoordinates.get(i++), quadCoordinates.get(i++)); cerc.controlDeltaX = (int) Math.round(p.x - prevPoint.x); cerc.controlDeltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + cerc.controlDeltaX, prevPoint.y + cerc.controlDeltaY); p = new Point(quadCoordinates.get(i++), quadCoordinates.get(i++)); cerc.anchorDeltaX = (int) Math.round(p.x - prevPoint.x); cerc.anchorDeltaY = (int) Math.round(p.y - prevPoint.y); - prevPoint = p; + prevPoint = new Point(prevPoint.x + cerc.anchorDeltaX, prevPoint.y + cerc.anchorDeltaY); newRecords.add(cerc); } From 188ca27a2d77de1e3be88182e6269065e8319164 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 20:20:30 +0200 Subject: [PATCH 038/114] SVG import bound fix --- .../decompiler/flash/importers/svg/SvgImporter.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index 5f6b5adbb..74006cb9f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -103,10 +103,6 @@ public class SvgImporter { RECT rect = st.getRect(); int origXmin = rect.Xmin; int origYmin = rect.Ymin; - rect.Xmin -= origXmin; - rect.Xmax -= origXmin; - rect.Ymin -= origYmin; - rect.Ymax -= origYmin; shapes.shapeRecords = new ArrayList<>(); @@ -175,6 +171,10 @@ public class SvgImporter { Matrix transform = new Matrix(); if (!fill) { + rect.Xmin -= origXmin; + rect.Xmax -= origXmin; + rect.Ymin -= origYmin; + rect.Ymax -= origYmin; rect.Xmin = (int) Math.round(viewBox.x * SWF.unitDivisor); rect.Ymin = (int) Math.round(viewBox.y * SWF.unitDivisor); rect.Xmax = (int) Math.round((viewBox.x + viewBox.width) * SWF.unitDivisor); @@ -183,6 +183,7 @@ public class SvgImporter { double ratioX = rect.getWidth() / width / SWF.unitDivisor; double ratioY = rect.getHeight() / height / SWF.unitDivisor; transform = Matrix.getScaleInstance(ratioX, ratioY); + transform.translate(origXmin / SWF.unitDivisor, origYmin / SWF.unitDivisor); } processSvgObject(idMap, shapeNum, shapes, rootElement, transform, style); From 27a192570b46c875a9abe6f03fc01e7fa819d84b Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 1 Apr 2017 21:13:17 +0200 Subject: [PATCH 039/114] SVG import bound fix 2 --- .../com/jpexs/decompiler/flash/importers/svg/SvgImporter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java index 74006cb9f..714d5213b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/importers/svg/SvgImporter.java @@ -183,7 +183,7 @@ public class SvgImporter { double ratioX = rect.getWidth() / width / SWF.unitDivisor; double ratioY = rect.getHeight() / height / SWF.unitDivisor; transform = Matrix.getScaleInstance(ratioX, ratioY); - transform.translate(origXmin / SWF.unitDivisor, origYmin / SWF.unitDivisor); + transform.translate(origXmin / SWF.unitDivisor / ratioX, origYmin / SWF.unitDivisor / ratioY); } processSvgObject(idMap, shapeNum, shapes, rootElement, transform, style); From 64293e3813c7a638c59f4f51e9733131fbb0e776 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 8 Apr 2017 10:19:02 +0200 Subject: [PATCH 040/114] [#1365] Allow to configure all types of configuration settings from command line --- CHANGELOG.md | 1 + .../flash/configuration/Configuration.java | 21 +-- .../configuration/ConfigurationItem.java | 36 ++++ .../console/CommandLineArgumentParser.java | 176 +++++++++++++----- .../flash/gui/AdvancedSettingsDialog.java | 4 +- 5 files changed, 174 insertions(+), 64 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c3e93a48..8cef5b925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. - [#1240] AS search using multiple threads when parallel speedup is enabled - [#1308] Search by all P-code files in AS3 - [#1333] Exporting sprites as swf files +- [#1365] Allow to configure all types of configuration settings from command line ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java index dd6edc47c..234cebc19 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java @@ -33,8 +33,6 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; @@ -865,13 +863,7 @@ public final class Configuration { if (config.containsKey(name)) { value = config.get(name); - Class type; - Type type2 = ((ParameterizedType) (field.getGenericType())).getActualTypeArguments()[0]; - if (type2 instanceof Class) { - type = (Class) type2; - } else { - type = (Class) ((ParameterizedType) type2).getRawType(); - } + Class type = ConfigurationItem.getConfigurationFieldType(field); if (value != null && !type.isAssignableFrom(value.getClass())) { System.out.println("Configuration item has a wrong type: " + name + " expected: " + type.getSimpleName() + " actual: " + value.getClass().getSimpleName()); value = null; @@ -926,12 +918,19 @@ public final class Configuration { } public static Map getConfigurationFields() { + return getConfigurationFields(false); + } + + public static Map getConfigurationFields(boolean lowerCaseNames) { Field[] fields = Configuration.class.getDeclaredFields(); Map result = new HashMap<>(); for (Field field : fields) { if (ConfigurationItem.class.isAssignableFrom(field.getType())) { - ConfigurationName annotation = field.getAnnotation(ConfigurationName.class); - String name = annotation == null ? field.getName() : annotation.value(); + String name = ConfigurationItem.getName(field); + if (lowerCaseNames) { + name = name.toLowerCase(); + } + result.put(name, field); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java index 5764ed4d9..72854eed4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/ConfigurationItem.java @@ -16,8 +16,13 @@ */ package com.jpexs.decompiler.flash.configuration; +import java.lang.reflect.Field; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -94,6 +99,37 @@ public class ConfigurationItem { return modified; } + public static ConfigurationItem getItem(Field field) { + try { + field.setAccessible(true); + ConfigurationItem item = (ConfigurationItem) field.get(null); + return item; + } catch (IllegalArgumentException | IllegalAccessException ex) { + Logger.getLogger(ConfigurationItem.class.getName()).log(Level.SEVERE, null, ex); + throw new Error(ex); + } + } + + public static Class getConfigurationFieldType(Field field) { + Type type = ((ParameterizedType) (field.getGenericType())).getActualTypeArguments()[0]; + if (type instanceof Class) { + return (Class) type; + } else { + return (Class) ((ParameterizedType) type).getRawType(); + } + } + + public static String getName(Field field) { + ConfigurationName annotation = field.getAnnotation(ConfigurationName.class); + String name = annotation == null ? field.getName() : annotation.value(); + return name; + } + + public static boolean isInternal(Field field) { + ConfigurationInternal cint = field.getAnnotation(ConfigurationInternal.class); + return cint != null; + } + @Override public String toString() { return name; diff --git a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java index 547adff73..96632ed41 100644 --- a/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java +++ b/src/com/jpexs/decompiler/flash/console/CommandLineArgumentParser.java @@ -184,9 +184,15 @@ import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringReader; import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; +import java.util.Date; +import java.util.GregorianCalendar; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -221,34 +227,74 @@ public class CommandLineArgumentParser { private static final String METADATA_FORMAT_RAW = "raw"; - @SuppressWarnings("unchecked") - private static final ConfigurationItem[] commandlineConfigBoolean = new ConfigurationItem[]{ - Configuration.decompile, - Configuration.parallelSpeedUp, - Configuration.internalFlashViewer, - Configuration.autoDeobfuscate, - Configuration.cacheOnDisk, - Configuration.cacheImages, - Configuration.overwriteExistingFiles, - Configuration.autoRenameIdentifiers, - Configuration.decimalAddress, - Configuration.showAllAddresses, - Configuration.smartNumberFormatting, - Configuration.enableScriptInitializerDisplay, - Configuration.resolveConstants, - Configuration.textExportSingleFile, - Configuration.scriptExportSingleFile, - Configuration.packJavaScripts, - Configuration.showMethodBodyId, - Configuration.getLocalNamesFromDebugInfo, - Configuration.ignoreCLikePackages, - Configuration.shapeImportUseNonSmoothedFill - }; - public static boolean isCommandLineMode() { return commandLineMode; } + public static void printConfigurationSettings() { + Map fields = Configuration.getConfigurationFields(); + String[] keys = new String[fields.size()]; + keys = fields.keySet().toArray(keys); + Arrays.sort(keys); + + System.out.println("Available keys[current setting]-type:"); + for (String name : keys) { + Field field = fields.get(name); + if (ConfigurationItem.isInternal(field)) { + continue; + } + + ConfigurationItem item = ConfigurationItem.getItem(field); + Object value = item.get(); + Class type = ConfigurationItem.getConfigurationFieldType(field); + String valueString = objectToString(value, type); + String typeString = objectTypeToString(type); + + if (typeString != null) { + System.out.println(name + "[" + valueString + "]-" + typeString); + } + } + } + + private static String objectTypeToString(Class type) { + if (type == String.class) { + return "string"; + } else if (type == Calendar.class) { + return "date"; + } else if ((type == Integer.class) || (type == Long.class)) { + return "integer"; + } else if ((type == Double.class) || (type == Float.class)) { + return "float"; + } else if (type == Boolean.class) { + return "bool"; + } else if (type.isEnum()) { + return "enum"; + } + + return null; + } + + private static String objectToString(Object obj, Class type) { + if (obj == null) { + return "null"; + } + + if (type == String.class) { + //return '"' + obj.toString() + '"'; + return obj.toString(); + } else if (type == Calendar.class) { + return new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(((Calendar) obj).getTime()); + } else if ((type == Integer.class) || (type == Long.class) || (type == Double.class) || (type == Float.class)) { + return obj.toString(); + } else if (type == Boolean.class) { + return ((boolean) (Boolean) obj) ? "true" : "false"; + } else if (type.isEnum()) { + return obj.toString(); + } + + return null; + } + public static void printCmdLineUsage(String filter, boolean webHelp) { printCmdLineUsage(System.out, webHelp, filter); } @@ -426,14 +472,7 @@ public class CommandLineArgumentParser { if (filter == null || filter.equals("config")) { out.println(" " + (cnt++) + ") -config key=value[,key2=value2][,key3=value3...] [other parameters]"); - out.print(" ...Sets configuration values. "); - if (!webHelp) { - out.print("Available keys[current setting]:"); - for (ConfigurationItem item : commandlineConfigBoolean) { - out.print(" " + item + "[" + item.get() + "]"); - } - } - + out.print(" ...Sets configuration values. Use -listconfigs command to list the available configuration settings."); out.println(); out.println(" Values are boolean, you can use 0/1, true/false, on/off or yes/no."); out.println(" If no other parameters passed, configuration is saved. Otherwise it is used only once."); @@ -904,6 +943,10 @@ public class CommandLineArgumentParser { parseCompareResources(args); } else if (nextParam.equals("--resourcedates")) { parseResourceDates(args); + } else if (nextParam.equals("-listconfigs")) { + printHeader(); + printConfigurationSettings(); + System.exit(0); } else if (nextParam.equals("-help") || nextParam.equals("--help") || nextParam.equals("/?") || nextParam.equals("\\_") /* /? translates as this on windows */) { printHeader(); printCmdLineUsage(null, false); @@ -966,6 +1009,7 @@ public class CommandLineArgumentParser { System.exit(1); } + @SuppressWarnings("unchecked") private static void setConfigurations(String cfgStr) { String[] cfgs; if (cfgStr.contains(",")) { @@ -974,27 +1018,56 @@ public class CommandLineArgumentParser { cfgs = new String[]{cfgStr}; } + Map fields = Configuration.getConfigurationFields(true); for (String c : cfgs) { - String[] cp; - if (c.contains("=")) { - cp = c.split("="); - } else { - cp = new String[]{c, "1"}; + String[] cp = c.split("="); + if (cp.length == 1) { + cp = new String[]{cp[0], "1"}; } - String key = cp[0]; - String value = cp[1]; - for (ConfigurationItem item : commandlineConfigBoolean) { - if (key.toLowerCase().equals(item.getName().toLowerCase())) { - if (value != null) { - Boolean bValue = parseBooleanConfigValue(value); - if (bValue != null) { - System.out.println("Config " + item.getName() + " set to " + bValue); - item.set(bValue); - } else { - System.out.println("Invalid config value for " + item.getName() + ": " + value); - } - } + + Field field = fields.get(cp[0].toLowerCase()); + ConfigurationItem item = ConfigurationItem.getItem(field); + String stringValue = cp[1]; + Class type = ConfigurationItem.getConfigurationFieldType(field); + + if (type == String.class) { + System.out.println("Config " + item.getName() + " set to " + stringValue); + ((ConfigurationItem) item).set(stringValue); + } else if (type == Calendar.class) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + Date dateValue; + try { + dateValue = dateFormat.parse(stringValue); + GregorianCalendar calendarValue = new GregorianCalendar(); + calendarValue.setTime(dateValue); + ((ConfigurationItem) item).set(calendarValue); + } catch (ParseException ex) { + Logger.getLogger(CommandLineArgumentParser.class.getName()).log(Level.SEVERE, null, ex); } + } else if (type == Integer.class) { + int intValue = Integer.parseInt(stringValue); + ((ConfigurationItem) item).set(intValue); + } else if ((type == Integer.class) || (type == Long.class)) { + long longValue = Long.parseLong(stringValue); + ((ConfigurationItem) item).set(longValue); + } else if (type == Double.class) { + double doubleValue = Double.parseDouble(stringValue); + ((ConfigurationItem) item).set(doubleValue); + } else if (type == Float.class) { + float floatValue = Float.parseFloat(stringValue); + ((ConfigurationItem) item).set(floatValue); + } else if (type == Boolean.class) { + Boolean boolValue = parseBooleanConfigValue(stringValue); + if (boolValue != null) { + System.out.println("Config " + item.getName() + " set to " + boolValue); + ((ConfigurationItem) item).set(boolValue); + } else { + System.out.println("Invalid config value for " + item.getName() + ": " + stringValue); + } + } else if (type.isEnum()) { + Enum enumValue = Enum.valueOf((Class) type, stringValue); + ConfigurationItem uncheckedItem = (ConfigurationItem) item; + uncheckedItem.set(enumValue); } } } @@ -1009,9 +1082,11 @@ public class CommandLineArgumentParser { if (value.equals("0") || value.equals("false") || value.equals("no") || value.equals("off")) { bValue = false; } + if (value.equals("1") || value.equals("true") || value.equals("yes") || value.equals("on")) { bValue = true; } + return bValue; } @@ -1020,6 +1095,7 @@ public class CommandLineArgumentParser { System.err.println("Config values expected"); badArguments("config"); } + setConfigurations(args.pop()); } diff --git a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java index ab24978c6..1541f6249 100644 --- a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java @@ -20,7 +20,6 @@ import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.configuration.ConfigurationCategory; import com.jpexs.decompiler.flash.configuration.ConfigurationDirectory; import com.jpexs.decompiler.flash.configuration.ConfigurationFile; -import com.jpexs.decompiler.flash.configuration.ConfigurationInternal; import com.jpexs.decompiler.flash.configuration.ConfigurationItem; import com.jpexs.decompiler.flash.gui.helpers.SpringUtilities; import com.jpexs.helpers.Helper; @@ -337,8 +336,7 @@ public class AdvancedSettingsDialog extends AppDialog { locName = resourceBundle.getString("config.name." + name); } else { //if it is undocumented, then it must have ConfigurationInternal annotation Field f = fields.get(name); - ConfigurationInternal cint = f.getAnnotation(ConfigurationInternal.class); - if (cint == null) { + if (ConfigurationItem.isInternal(f)) { throw new RuntimeException("Missing configuration name: " + name); } From 3de2dab9913f1ff3ea0a2eea533c5a6bcdaa49e9 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Sat, 8 Apr 2017 10:42:58 +0200 Subject: [PATCH 041/114] fix --- src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java index 1541f6249..18da6c8c3 100644 --- a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java @@ -336,7 +336,7 @@ public class AdvancedSettingsDialog extends AppDialog { locName = resourceBundle.getString("config.name." + name); } else { //if it is undocumented, then it must have ConfigurationInternal annotation Field f = fields.get(name); - if (ConfigurationItem.isInternal(f)) { + if (!ConfigurationItem.isInternal(f)) { throw new RuntimeException("Missing configuration name: " + name); } From 79495fd0f919a27b2f66d22417549de9bf188b45 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Fri, 14 Apr 2017 13:59:30 +0200 Subject: [PATCH 042/114] [#1369] Allow zoom in sprite (and button) export --- CHANGELOG.md | 4567 +++++++++-------- .../decompiler/flash/gui/ExportDialog.java | 770 +-- 2 files changed, 2670 insertions(+), 2667 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cef5b925..04351b801 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2284 +1,2285 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [Unreleased] -### Added -- [#1240] AS search using multiple threads when parallel speedup is enabled -- [#1308] Search by all P-code files in AS3 -- [#1333] Exporting sprites as swf files -- [#1365] Allow to configure all types of configuration settings from command line - -### Fixed -- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter -- [#1343] AS 1/2 direct editation critical bug -- [#1348] Cannot properly export frame with cyrillic symbols to SVG -- [#1354] Various FLA export problem fixes -- [#1367] Raw edit conditional type fix. - -## [10.0.0] - 2016-12-24 -### Added -- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only -- optional AS3 direct editation with Flex SDK -- AS3 p-code editing - metadata read/write support -- AS3 p-code editing - end of the block command like in RABCDasm -- AS3 p-code editing - popup docs for more than instructions -- Debugger - New columns for variable details - scope, flags, trait -- Debugger - Add watch feature -- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases -- Deobfuscation Tool - Fix colliding trait/classes via toolbar command -- Auto rename identifiers option now fixes colliding trait/classes aswell -- [#1254] FLA export - detecting scripts on AS3 timeline -- [#907] FFDec Library JAR file has version inside it. -- [#1311], [#1313] actionScript source font size -- Display warning when library version and GUI version mismatch -- Changelog file -- [#1308] Search by all P-code files (AS 1/2 only) - -### Changed -- [#1189] AS3 - sort imports to have same order always -- GUI: AS3 P-code header show actual trait type and method type -- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" -- Set advance values button has confirm dialog with information -- [#1274] Linux package no longer requires Oracle Java only -- Library now packaged inside ZIP file - -### Fixed -- P-code docs formatting fix -- Export dialog - handling sprite and SWF frames correctly -- [#1275] debugger - show local variables fixes -- AS3 p-code editing - popup docs correctly displayed when label on line start -- [#1278] replacing DefineBits error -- [#1281] DefineFont 2/3 getting character advance value when replacing fix -- Set advance values button - Do not set advance if the char cannot be displayed in source font -- AS3 Goto declaration for single character names -- Identifier renaming for top level classes -- AS3 direct editation not correctly saving local register names -- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir -- Mac OS X installer fix (.pkg) -- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers -- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix -- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes -- [#1302] Callpropvoid instruction docblock not correct -- [#1309] recent files not getting updates -- [#1312] faster colliding usages finder -- [#1303] garbled text when exporting frame with text -- [#1314] user interface: button order -- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) -- [#1323] Audio playback fails - -## [9.0.0] - 2016-08-12 -### Added -- Instance metadata (AMF3) editing in PlaceObject4 -- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) -- [#1171] Export stroke scale to FLA -- FLA export - check invalid unicode characters -- [#1170] Extract from memory in commandline -- Reload one vs Reload all buttons -- ABC: Float and Float4 support -- AS3 p-code instruction documentation in GUI -- [#1241] Settings to show original bytes in hex view -- Search in dump view -- Jump to resources view from hex view -- Show warning on 32bit JRE - -### Changed -- [#1162] improved opening loaded SWF files -- Flash Viewer - skip frames when not on time -- [#1199] Automatically import alpha channel to JPEG3/4 from PNG - -### Fixed -- [#1151] Filters on texts fixed -- [#1128] Adding characters to font fixed (FontAlignZones not removed) -- [#1163] Clicking open->file makes program buggy -- Refresh tree after raw edit -- [#1172] Text double escape fix -- [#1174] Change language fix -- some AS2 deobfuscation fixes -- [#1183] Index out of bounds fix -- Implicit coersion on binary/unary opfix -- debugger: corect display variable values through getters -- Multiple XLF export fix -- [#1193] FLA export - text tag advance fix, one layer shape fix -- [#1193] FLA export - smoothed image detection, export raw JPEG data -- [#1193] Export space character to TTF correctly -- [#1200] Previous search text selected when quick find -- Flash viewer: aspect ratio on startup fix -- [#1198] Saving trait slot const value -- Zoom parameter commandline fixed -- [#1205] clipping fixed -- [#1194] Wrong sound effects in FLA -- [#1210] Frame Export fix -- Improved/fixed go to declaration in AS3 -- [#1217] PCode window not in same position as AS -- Hide memor search on non windows platform -- [#1244] Incorrect showing of NOP instructions -- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back -- [#1241] File content is different from hex view -- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont -- [#1236] won't open fixed -- [#1251] SWF not same after export XML and import back -- [#1265] Error during export -- [#1268] Font export - Using second glyph when two glyphs for one character found -- [#1268] GFX compacted font - fixed advance values on export - -## [8.0.1] - 2016-02-20 -### Changed -- FFDec debug tab in advanced settings moved to other tabs - -### Fixed -- [#1161] AS1/2 deobfuscation broken -- AS1/2 Simplify expressions fix - -## [8.0.0] - 2016-02-18 -### Added -- Debugger - AS1/2 Show registers -- Debugger - display variables in the tree structure -- Debugger - set value of variable -- Debugger - AS1/2 View constantpool -- Debugger - P-code level debugging for both AS1/2 and AS3 -- Basic SVG import for shapes -- Simplify expression setting -- [#1118] Loading characters through ImportAssets - show as readonly -- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 -- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) -- [#1121] Ability to save binary data by its name -- [#1052] Add object to existing frame -- Allow adding tag to main timeline -- AS1/2: Ctrl+click to declaration of variables, registers -- Allow trait specification in pcode import -- Icons for tag types in Dump view -- Show error message when a text tag is invalid (glyph index problem) -- AS3 direct editation - store local register names in debug info = allow to rename them - -### Changed -- New application icon and splash screen -- [#1145] AS3 better declaration type detection, better convert_x instruction handling -- Binary export - use .swf extension for swf files -- Better tree labels in generic tag editor (Raw edit) -- [#758] Allow zooming more than preview area in internal viewer - -### Fixed -- [#1096] FLA export - pretty print -- [#1104] AS1/2/3 Script Importat not working -- [#1107] Text Offset Incorrect fixed -- [#1106] New Shapes replace function fix -- [#1113] It takes too long to switch between rendered sprite -- [#1075] Lenght of DefineText in some cases -- [#1127] autoRenameIdentifiers is not supported in CLI mode -- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed -- [#1103] Foreach variables fixes -- AS3 Switch fixes -- Default clause position in switch -- [#1133] Incorrect frame order for nested sprite -- [#1135] Handle try "to" in p-code correctly -- Font wideOffsets,wideCodes fixed in DefineFont2/3 -- AS3: super method call -- [#1138] All exported videos are the same file which may be broken -- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages -- [#1137] running flashplayer(debugger) executable in Linux/MacOs -- [#1144] Command line argument renameInvalidIdentifiers -- [#1145] double not (!!) not removed -- [#1147] Sprite is exported incorrectly -- [#1148] handing end of stream exception in abc reader, loc exception -- [#1152] Font info tag modified tag was not set => saved swf was corrupt -- [#1154] Some 32bit JRE problems - program won't start -- [#1145] Correct precedence handling on binary operators -- [#116] not resolving unusual tags in DefineSprite - -## [7.1.2] - 2015-12-03 -### Fixed -- AS3 debugger start halt fix -- AS1/2 debugger fix on nondebug enabled SWFs -- AS1/2 debugger fix for functions -- Debug menu item enabled fix -- AS3 local reg index fix -- Advanced settings calendar -- AVM2 instructions in hex view -- [#1070] Incorrect switch decompilation -- [#1098] Import XML fix - -## [7.1.1] - 2015-11-23 -### Fixed -- Critical debugger fix - widelines - -## [7.1.0] - 2015-11-23 -### Added -- AS1/2 debugger -- Breakpoint/IP marker on line beginning - -### Changed -- Starting debugger on demand -- Installer message about playerglobal is only warning now - -### Fixed -- [#1033], [#1083] AS3 deobfuscation issues -- [#1091] AS 1/2 direct editation saving - -## [7.0.1] - 2015-11-18 -### Fixed -- Debugger: Adding breakpoint if script initializer not displayed - -## [7.0.0] - 2015-11-18 -### Added -- AS3 Debugger - breakpoints, stepping, show variables -- Faster AS3 direct editation - -### Changed -- Better Configuration of flashplayer paths - -### Removed -- Removed old "debugger" buttons -- Removed search from browsers cache - inactual code - -### Fixed -- Many AS3 direct editation related bugs -- [#1076] export fix - -## [6.1.1] - 2015-10-30 -### Fixed -- Deobfuscate AS3 metadata -- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix -- [#1063] AS3 direct edit - script initializer fix, generating method names -- XML export/import fixes -- [#1019] Namespace imports fix -- AVM2 code execution fix -- [#1016] AS3 direct editation fixes -- [#1010] AS2 direct editation - internal and override is not a reserved word -- [#1008] pushshort instruction diassembly -- [#1004] this/super can be AS1/2 variable -- [#933] AS3 allow numbers as object literal keys - -## [6.1.0] - 2015-10-26 -### Added -- Open other loaded SWFs during playback (useful for loaders) -- Export uncompressed data from dump tree -- Print performance statistics from commandline -- [#1062] Editing/displaying script initializers -- Enable debugging on SWF file (commandline) - -### Changed -- Faster syntax highlighting -- Better AS1/2 deobfuscator -- [#418] AS3 deobfuscator improved - -### Fixed -- AS call method fix (first parameter is "this") -- [#1047] open all scripts folders -- [#812] decompile fail -- [#1056] deltaY missing when adding a new StraightEdgeRecord -- [#1057] Editing as in editor results in package name moving -- [#991] GUI export -- [#689] Ignore Case not correctly toggled -- [#1060] reversed and/or detection in some cases -- [#1037] isXML call - -## [6.0.2] - 2015-09-12 -### Added -- AS3: Display and direct edit trait Metadata -- Allow to specify tag type on image or shape import -- Convert image tags from commandline -- [#489] Hex decode very large integers -- Add new tags without show empty folders -- Dependent characters in basic tag info -- [#1007] replace bytearray in raw editing -- Italian translation - -### Changed -- AS2 parser - add string to constant pool if there is not enough space -- [#1044] AS2 - order scripts by physical location, name by offset - -### Removed -- Deprecated commandline parameters removed - -### Fixed -- JNA problems on some JDKs -- [#947] Marklevels errors ignored 17a94b7 -- [#953] Mac application permission fix (maybe) -- [#954] IndexOutOfBounds fix -- [#950] AddTrait setting modified fix -- [#945] AS1/2 directeditation fix - member named as global function -- [#957] AS1/2 IndexOutOfBounds fix -- [#956] Invalid jump offsets warning -- [#968] Sprites export with wrong coloring -- [#978] case sensitivity of filenames -- [#955] AS2 decompilation problem -- Image alpha fixes -- [#966] Go to document class -- [#991] scripts exporting -- [#999] save as fla -- [#1000] image export for malformed JPEG3 tags -- [#1017] store alchemy opcodes with wrong order -- [#1030] stack overflow fix - -## [6.0.1] - 2015-07-06 -### Added -- Special §§ instructions marked as red -- [#949] Replace alpha channel from commandline -- AS3 deobfuscation from commandline -- Option to ignore FlashCC/Alchemy packages - -### Changed -- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements - -### Fixed -- AS1/2 deobfuscation fixed -- [#952] Not loading SWF without extension - -## [6.0.0] - 2015-07-04 -### Added -- New AS3 deobfuscation method -- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... -- Allow reload FFDec when no SWF is opened -- [#858] Allow to set compression type in header -- [#905] Show codec details for sound items -- Better alchemy/DomainMemory instruction handling -- Better obfuscated names handling -- [#920] Export instance name to SVG -- [#921] Export html DefineEditText to SVG -- Open multiple files with drag and drop -- Better "multi packs" handling (Alchemy) -- SWF version 29 to flash player 18 mapping -- ImportAssets2 sha1 field -- [#924] Sprites to image from commandline -- AS1/2 direct editation big numbers fix -- Allow to add FILTERs and SHAPERECORDs in generic tag editor -- Enable close all menu when no swf is selected -- Restore modified state even when something goes wrong -- Some old tags added - -### Changed -- AS decompilation highly improved -- Better &&, || handling -- DoABCDefine renamed to DoABC2 -- Separated Sprite export settings - -### Deprecated -- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) - -### Fixed -- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. -- Few menu issues -- [#895] Correct handling CMYK JPEG -- [#884] AS direct edit assignment -- [#899] Show script after AS3 direct editation -- Some AS1/2 parser problems -- [#903] FLA export - fix for missing fontname, lastframe -- [#855] AS3 direct edit - for..in variable declaration fix -- [#850] Constant initialization for same multinames -- [#832] AS3 direct edit - other ABCs resolving fix -- [#904] Cannot export images -- [#910] Missing instructions -- Opening not existent files on restoring last session -- [#922] Edit text leading -- Put image before shape on shape replace -- [#916] Replacing Shape corrupts SWF -- JRE setup parameters fixed -- [#938] Parallel speedup limit fix - -## [5.3.0] - 2015-05-25 -### Added -- Generic tag editor: improved table editing (import/export assets tags, etc.) - -### Changed -- Classic (nonribbon) UI improved - has same items as Ribbon UI -- Icons improvements -- Disabling menu items when work in progress - -### Fixed -- [#897] Classic UI fix - -## [5.2.0] - 2015-05-22 -### Added -- UI8 editbox for swf version in header panel -- Basic tag information panel - -### Changed -- AS1/2: Shown only the constant pool(s) in pcode editor -- Do not allow to chage tag tree selection, when current tag is under editing -- Faster bitmap export -- Using less memory when playing sounds -- Error message changed when the opened file is not swf - -### Fixed -- [#470] panels size after resizing from/to full screen -- [#877] A small glitch after search in AS -- [#878] small glitch after saving P-code or swf file -- [#470] glitch -- [#845] If frame consist 2 DoAction then it imports only first one -- pdf export (when no frame exists) -- text rendering (alpha channel was ignored), -- bmp export (paddings when width%2==1) -- [#883] -dumpSWF option does not work anymore -- [#882] Canvas export border size -- [#760] Internal viewer line linear gradient fill is not working -- [#887] error on export a special swf's P-CODE -- Extensions of exported images fixed - -## [5.1.0] - 2015-05-04 -### Added -- Allow to copy/move multiple tags, and dependencies -- [#842] For reconstruction if debug line info present -- [#841] Loop control for sound preview -- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button -- Scrollbar added to fontpanel -- SWF header editor -- Configure what object types to export in exportdialog - -### Changed -- Better gif exporter -- [#772]: closing loading dialog now cancels the loading of the swf -- [#762] export pcode with different extension - -### Fixed -- CRITICAL: Update System Bug causing updates not working -- [#862] AS3 asm: do not read beyond return/throw instructions -- [#865], [#613]: ribbon prefered width fix -- [#868] export path fix, allow to export buttons -- [#865] TagTree font size problem on high resolution screens -- [#713],[#807] Installer for 4.0+ fails to access Adobe Website -- [#728] Large fonts, [#857] add scroll on DefineFont3 - -## [5.0.2] - 2015-04-18 -### Added -- Reopen last session - -### Fixed -- ffdec.sh file line endings fixed - -## [5.0.1] - 2015-04-18 -### Fixed -- [#860]: Opening bundle (zip, swc, any binary file) files fixed - -## [5.0.0] - 2015-04-18 -### Added -- Color skins -- [#824] Mac OS X package -- [#809] Move left,right buttons for DefineTexts using translatex parameter -- [#805] Editor mode for DefineTexts -- [#825] Hotkeys for next/previous DefineText -- Export/Import symbol classes/export asset tags -- Frame export progress -- [#737] Single file script export -- Displaying changed AS3 scripts in GUI as bold -- Additional character info tags placed under character node -- New icons for other tags (metadata,fileattributes,setbackground,place/remove) -- Metadata tag editor - -### Changed -- Default color skin altered -- [#350] Allow only one running instance (Windows only, can be turned off) -- SWFs in zip based bundles (SWC for example) can be modified & saved -- Performace improvements -- More compact SWF-XML format -- Marking changed parentnodes as bold too - -### Fixed -- [#814] Exporting with scale problem -- [#816] P-code not shown after class initializer trait selection -- [#835] Static initializer improvements -- AS3 direct editing - local register decrement fix -- AS3 direct editing - maintain register order/names -- [#836] AS1/2/3 Correct expression precedence handling -- AS3 preincrement -- [#848] Correct toggling text switches -- [#817] AS1/2 for..in variable declaration -- [#849] Attribute member -- [#852] Ignore case for russian characters -- [#837] AS3 try..finally without catch - -## [4.1.1] - 2015-02-21 -### Added -- Export/Import XML added to ribbon menu -- Few GUI enhancements -- Undo tag changes context menu - -### Changed -- Java 8 now required - -### Removed -- Removed support for Java below 8 - -### Fixed -- [#811] export ActionScript - -## [4.1.0] - 2015-02-18 -### Added -- XML export/import -- confirmation dialogs added -- Add support for non-standard ABC-compressed SWF file -- [#745] Copy tag to another SWF -- [#803] Align text in DefineText - -### Changed -- performance improvements -- [#758] Zoom to fit is dynamic - -### Fixed -- [#738] Frame export -- [#742] Can't edit frames -- [#747] Move tag to adds extra frame -- [#749] Internal viewer Sprite fill color -- [#752] Sound is not stopped -- [#753] Reload swf -- [#759] Decompilation § symbol -- [#766] Can't extract all resources -- [#768] Super calls not being correctly recognized -- [#773] Scripts associated with ClipActions are not shown -- [#776] Stop working after setting "number of threads" to 0 -- [#783] No OK box when edited script or text was saved -- [#785] Text search. Remember last choise, Unicode case insensitive search -- [#787] Search in AS bug (when navigating to searched results) -- [#788] Add DefineCompactedFont Tag to gfx file -- [#790] Impossible to change letters under a font -- [#794] Font extraction fails sometimes -- [#798] Close file streams after export, exporting progress -- [#800] Unexpected deleted carrier return in DefineEditText -- Build fix on Linux -- Fis Startup Script for OpenJDK -- Other minor fixes - -## [4.0.5] - 2014-12-01 -### Added -- Escape control characters in strings, identifier names -- [#676] import text error messages / logging enhancement -- [#734] \xAB escapes, \uABCD escapes -- [#687] AS3 - allowing p-code comments on separate line -- [#709] Text Export to Single File with custom filename - -### Fixed -- [#732] Random freezing - JavactiveX library updated. -- [#730] Not working without ActiveX fix on Windows -- [#735] Automatic deobfuscation not correctly switched (required restart) - -## [4.0.4] - 2014-11-23 -### Changed -- better file cache, removing unneccessary temp files - -### Fixed -- obfuscated identifiers - -## [4.0.3] - 2014-11-23 -### Added -- [#722] Go to next/previous frame -- BMP file format export (images,frames,shapes) and import(images) - -### Fixed -- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type -- [#715] namespace resolving fix -- [#635],[#726] placing cursor inside Unicode characters - -## [4.0.2] - 2014-11-22 -### Added -- show frame number during play -- flashplayer - show controls for DefineSprite -- goto frame -- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design - -### Changed -- [#720]: edited shape tag is not marked as modified after replacing -- reorganized about dialog - -### Fixed -- [#719] null swf name in Proxy after cancelling rename dialog -- flashplayer - font display -- [#723]: saving swf with invalid referenced characters -- DefineCompactedFont paging -- [#288] Less memory usage during FLA export -- Corrected syntax hilighting for AS3 P-code - -## [4.0.1] - 2014-11-12 -### Fixed -- [#713] Installer can continue when no file can be downloaded -- Fixed shapes -- Checking for updates moved to separate thread - -## [4.0.0] - 2014-11-11 -### Added -- [#677] Zoom level in export settings -- internal viewer: linear/srgb gradients -- zooming buttons for flashplayer/internal viewer -- stroke scaling modes for canvas export -- create snapshot button -- [#389] Selecting font face on import -- [#701] Importing font from TTF file -- Reorganized font panel -- [#707] Debugger for logging messages -- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets -- [#685] Getting local register names from debug info can be disabled -- Adding new tags -- [#698] Allowing unicode letters in identifiers -- [#710] Information about deobfuscation in error comments -- One EXE for 32/64 bit, uses percentage memory. -- EXE SplashScreen -- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc -- Config setting to load inner SWFs automatically -- Replace shape with image - -### Changed -- better FlashPlayer integration using JavactiveX library -- Faster building tag tree -- Faster timeline construction -- [#711] Improved folder view - faster and with correct context menu - -### Fixed -- AS2 deobfuscation fixes -- AS2 loops fix -- [#681] Linux script fixes -- AS2 constructor name fix -- [#688] AS3 direct edit fixes -- [#691] AS3 p-code reading/saving fix -- AS3 direct edit -submethod name resolve fix -- frames to html canvas fix -- [#524] Mask layer not applied when nonempty script layer -- [#663] AS3 imports fixes -- Font export of dot character -- Font panel Yes button fixed -- [#702] GFX font reading fix -- Better obfuscated names handling -- [#539] for(each) in declaration fixes - -## [3.0.0] - 2014-09-20 -### Added -- Separated GUI (GPL) and library (now LGPL) -- Editing obfuscated identifiers via new paragraph(§) syntax -- Timeline View with preview and object hilighting -- Show GFX data in dump view -- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline -- Dump view - selecting node -- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption - -### Removed -- Removed deprecated commandline export formats (see --help) - -### Fixed -- FileAttributes tag reading fix -- [#649] GFX reading fixed -- [#656] Search in memory - 64 bit processes fix -- [#661] scripts not showing -- [#664] expanding fillStyles in raw edit -- [#668] add missing character fix, text tags fix -- [#674] texts hilighting initialization fix -- [#675] AS1/2 and/or operator compilation -- [#632] Locking file after opening (cannot save, etc.) -- [#651] Unnecessary removing expression killed in unreachable part -- [#678] Windows batch file paths fixed -- [#672] Disabling transparency slider on RGB only selection -- [#684] Sound streams inside DefineSprites, soundstream handling - -## [2.1.4] - 2014-08-23 -### Added -- AS1/2: New method for deobfuscation (can be switched off in settings) -- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters - -### Fixed -- [#647] Skipping FileAttributesTag with Parallel speedup on -- [#648] Export from embedded SWF - -## [2.1.3] - 2014-08-18 -### Added -- Show "save" and "saveas" in application menu -- Saving data range in dump view -- Show actions, abcdata in dumpview (context menu on the tree node) -- [#612] show color in hex format - -### Changed -- Faster dump info collecting (less memory) -- Allow selecting multiple files in open file dialog - -### Fixed -- [#623] ffdec.sh UNIX file endings, executable -- [#624] search in embedded swf files -- [#632] AS1/2 Unnecessary GetVariable before NewObject -- [#627] filter swf not working -- LZMA saving -- Export pcode&hex from commandline -- [#640] text import fixed, ignore BOM - -## [2.1.2] - 2014-07-20 -### Added -- Dump view -- Context menu: Jump to character, raw edit all tags -- Catalan translation -- SWF header display - -### Fixed -- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes -- [#592] AS3 Multiname resolving in P-code causing different bytecode -- [#585] AS3 moving popped values to output -- [#578] Always on top fixed on search results -- [#501] GotoFrame2 fix -- [#616] Frames to PNG export -- Export context menu -- [#559] Bitmap export opacity -- [#401] Placeobject 3/4 fix -- [#593] Return object newline -- [#594] Setting for curly brace - -## [2.1.1] - 2014-06-05 -### Added -- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers -- AS1/2 direct edit - global functions improvements -- AS1/2 negate operator, unary minus operator -- Opening SWFs in BinaryData tags -- AS1: Old string operators support, and/or, <> operator (editation) -- Statusbar loading animation improved -- [#579] AS3 direct editation - removing old class/methods from ABC -- remove character without the dependencies (remove only the place/remove tags) -- Running on system with no home directory -- [#428] PDF export (as images only) -- Commandline FlashPaper to PDF export -- Select frames / Characters commandline options - -### Changed -- [#337] quickfind visibility improved -- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) - -### Fixed -- [#576] AS1/2 direct editation: DefineFunction2 fix -- AS1/2 property fix -- AS1/2 typeof operator fix -- [#250] line spacing fix -- PlaceObject 3-4 className -- [#579] AS3 direct editation bugfixes - property resolving, integer values -- Morphshape canvas export fix -- Canvas export fix - closing path -- [#580] Rename invalid identifiers commandline fix -- [#510] JSyntaxPane find and replace dialog wrap around fix -- No more frame caching during export => memory saving (like [#583]) -- [#586] DropShadow filter fix -- Canvas export colortransform fix - -## [2.1.0 update 2] - 2014-05-08 -### Added -- AS3 decompilation/editation: Vector initializers -- AS3 direct editation: more classes in one file - -### Fixed -- [#574] DefineSprite editing fix -- Various AS3 direct editation fixes - -## [2.1.0 update 1] - 2014-05-05 -### Added -- Portugese-brasilian translation - -### Changed -- HTML Canvas export improvements - -### Fixed -- Various AS3 direct editation bugs, like [#570] - -## [2.1.0] - 2014-05-01 -### Added -- AS3 direct editation (Experimental!) -- Frames SVG Export -- Shape/MorphShape/Frames HTML 5 Canvas Export -- [#559] morphshapes as animated SVG -- [#563] Single file text export/import -- Font WOFF export -- Advanced settings dialog with tabs, config names, descriptions - -### Fixed -- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments -- Internal viewer: Filters fix - -## [2.0.1 update 2] - 2014-04-05 -### Fixed -- [#557] AS3 null namespace fix - p-code not working - -## [2.0.1 update 1] - 2014-04-04 -### Fixed -- [#556] Goto main class on startup fix -- [#557] Nullpointer fix (private namespaces) - -## [2.0.1] - 2014-04-03 -### Added -- Thumbnail view -- Font TTF export -- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) -- Expand all context menu -- Internal viewer: Button mouse move and click handling -- Playing sounds without flash player -- Internal viewer: Sounds on stage -- All sounds to WAV export -- Internal viewer: Showing texts, dynamic text border/fill -- [#504]: Unicode characters in JSyntaxPane -- Internal viewer: showing object under cursor -- Folder icons -- Sound/Image format on command line. -- Removing placeobject tags -- Removing frames -- AS: "elseif" statements -- Code formatting: space before parenthesis - -### Changed -- Single frames animated. - -### Fixed -- [#529] limit the number of displayed binaryData bytes -- [#538] Interface are sometimes dynamic -- [#537] super is sometime preceded by a dot -- [#540] Saving SWF changes very large static uint values -- [#387] Frames preview bugged -- AS:loop mismatch fix on parallel speedup -- [#552] Some timeout exceptions -- [#494] Fixed nightly builds updates - -## [2.0.0] - 2014-03-02 -### Added -- Generic tag tree editor -- Timeline view (stub only) -- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) -- [#513]: command line option to extract swf from binary file -- Configurable code formatting (Indentation + brace position) -- [#262] Export FLA: Font character ranges export -- Configurable checking for updates - -### Changed -- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes -- Improved commandline usage -- Automatic deobfuscation default value set to False (See News on webpages) -- Check for updates can be configured to inform about Nightly builds aswell - -### Deprecated -- Some commandline options are now deprecated, see --help - -### Fixed -- [#499] Cannot save via Proxy fixed -- [#504] font name reading fixed -- [#508] Support for OS without GUI -- [#305] Export FLA: empty sound layers -- [#312] Export FLA: Improved Shape/MorphShape fix -- [#503] Export FLA: Smoothing invalid shapes -- [#401] Invalid GFX tags in non GFX files -- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues -- [#361] FFDec icon is not visible on application start -- [#392] Video stream data fix -- [#516] AS3 P-code editor - Null name namespace handling - -## [1.8.1 update 1] - 2014-02-02 -### Fixed -- [#495] font embedding fix -- [#496] date format in new version dialog -- cosmetic changes - -## [1.8.1] - 2014-01-30 -### Added -- [#299] replace DefineBits images -- [#303] open folder with exported FLA -- [#324],[#346] SWC/zip/other binary file support -- [#371] detailed logging -- [#426] command line switch to rename identifiers -- [#457] clear recent opened files list -- [#458] save selected system font for swf fonts -- [#460] text editor: do not scroll to the end automatically -- [#462] font embedding dialog: show more sample characters -- [#463] global search in texts -- [#465] make font properties editable -- [#466] font preview - -### Changed -- [#369] new SVG and preview image rendering -- [#390] refresh font list without reloading the application -- [#453] update texts aftert adding new character to a font tag -- [#459] remember text panel splitter position -- [#461] font panel gui redesigned - -### Fixed -- [#451] dialog windows are not on the center of the screen -- [#454] Text syntax highlighting -- [#455],[#465] classic interface issues -- [#474] changeing language only available one time -- [#477] log window localization -- [#481] SVG export fix -- [#484] Oversized advance value after editing DefineText with DefineFont2 font -- [#493] missing search results - -## [1.8.0 update 1] - 2013-12-27 -### Added -- [#453] refresh (edit+save action) all texts button - -### Fixed -- Flash panel and font panel fixed - -## [1.8.0] - 2013-12-27 -### Added -- [#350] Allow to open multiple SWFs -- [#365] Filter fake SWFs during memory search -- [#366] Allow to sort the result list in memory search window -- [#429] Auto rename invalid identifiers setting -- [#447] Non-ribbon interface - -### Fixed -- [#354] Infinite decompilation fixed -- [#438] Case sensitive Command line arguments fixed -- [#436] Saving actionscript fixed -- [#446] Precedence issue fixed -- [#451] Dialogue window positions on a multi-monitor configuration fixed - -## [1.7.4 update 1] - 2013-12-05 -### Added -- [#426] Command line parameter for renaming invalid identifiers - -### Fixed -- [#427] Exception on linux fixed -- [#405], [#420], [#421] Some decompilation issues fixed -- [#430] Configuration default value problem fixed -- [#397], [#431] Deobfuscation stucked sometimes problem fixed - -## [1.7.4] - 2013-11-10 -### Added -- [#169] hexedit method body bytes -- [#335] last opened files -- [#404] Exporting P-code and Hex + console parameters -- [#407] register name is configurable -- Advanced settings -- Cancellable decompiling, exporting and searching - -### Fixed -- [#399], [#400] performance optimizations - -## [1.7.3 update 2] - 2013-09-29 -### Fixed -- [#398] AS3 p-code values with index 0 (null) - -## [1.7.3 update 1] - 2013-09-28 -### Added -- [#382] AS3: Adding new method - -## [1.7.3] - 2013-09-27 -### Added -- AS3: Multiname and namespace editing. -- [#382],[#396] AS3: Adding new trait (method/slot/const) -- AS3: Highlighting pair parenthesis/bracket -- AS3: Editing various new P-code parameters -- AS3: Highligting of trait names/types/parameters -- AS3: Global rename identifier for traits -- [#357] Playback controls for DefineSound -- [#391] AS3: Native methods mark -- [#395] Support for GFx ScaleForm SWFs (with fonts editing) -- Displaying fonts in internal viewer -- [#334], [#395] New Embed font dialog - selecting character ranges with preview -- Replacing characters in font (Yes/No to all dialog) - -### Changed -- AS3: New p-code syntax inspired by RABCDasm -- AS3: Editing whole trait in one textarea -- AS3: Removed messages about adding new constants -- AS3: Modified colors in editor -- [#301] Clearing error log causes icon to reset - -## [1.7.2 update 2] - 2013-09-13 -### Changed -- Updated translations - -### Fixed -- [#383] Firefox browser cache handling -- [#386] SWF resizing - -## [1.7.2 update 1] - 2013-09-11 -### Changed -- updated translations - -### Fixed -- [#383] Fixed cache loading when Firefox not used - -## [1.7.2] - 2013-09-11 -### Added -- [#357] Sounds Preview (Windows only) -- Movies preview (Windows only) -- Whole SWF display -- Preview controls (Play,Pause,Stop) -- Search SWFs in browsers cache (Firefox, Chrome) -- [#367] Memory search: Save selected files to disk -- Portugese translation - -### Changed -- [#380] Faster displaying DefineBitsLossless(2) images - -### Fixed -- [#292] Background color for Fonts preview fixed -- [#375] Replacing DefineBitsLossless image tag -- [#378] Refreshing language of JSyntaxPane -- MORPHGRADIENT reading fix - -## [1.7.1] - 2013-08-25 -### Added -- Loading SWFs from other processes memory (Windows only, sorry) -- [#325] Spanish translation -- [#210] Ukrainian and Dutch translation -- [#355] Chinese translation -- [#292] Change background color in SWF preview -- [#301] Clear errors log button -- [#313] Command line parameter for ignore all errors -- [#330] Protection agains adding same characters -- [#332] AS1/2 Showing elapsed times during commandline export -- [#344] Reload opened SWF -- Decompilation timeouts - -### Fixed -- [#295] Export FLA: wrong font -- [#297] Too bright titlebar button colors -- [#307] Export FLA: fixed empty textfields -- [#309] Export FLA: static text letter spacing detection -- [#310] Export FLA: Strokes -- [#311] Export FLA: BitmapFill -- [#327] AS1/2 Disassembly error stop application -- [#328] Fixed replacing images in DefineBitsJPEGX -- [#333] AS1/2 action reading -- [#336] Graph window is too small -- [#337] Quick search panel barely visible in same cases -- [#338] Expand/collapse icon in errorlog - -## [1.7.0 update 1] - 2013-08-11 -### Added -- [#315] German translation (partial) - -### Fixed -- [#123] Better context menu integration -- [#243],[#326] Better deobfuscation -- [#287] Typo in parallelSpeedUp parameter -- [#290],[#291] improved select language dialog -- [#294] minor GUI fixes -- [#298] Progressbar positition issues -- [#296] better export directory remembering -- [#314] Better deobfuscating filenames -- [#316] Readonly editor panes accepted Ctrl+Z/Y -- [#318] Export FLA: Shapes export fix -- [#319] AS3: Improved try..catch..finally decompilation -- [#323] AS3: Fixed default switch part - -## [1.7.0] - 2013-08-03 -### Added -- Listing contributors on about page -- [#223] AS2: Detecting uninitialized class fields -- [#250] Export FLA: Detecting static fields margin and spacing -- [#261] Export FLA: AS1/2 Frame scripts on first layer -- [#269] Commandline parameters for switching configuration -- [#274] AS3 Displaying elapsed time during commandline export -- [#275] AS3 Removing returnvoid as last statement - -### Changed -- New GUI based on Substance look and feel -- Menu changed to ribbon panel -- New round icon -- [#258] AS1/2: Improved chained assignments -- [#267] Starting program without choosing a file -- [#286] Saving to temp file first - -### Fixed -- [#123] Improved context menu integration on Windows -- [#233] Globally rename identifier deselects item in the tree -- [#235] Export FLA: Dynamic text fields coordinates -- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation -- [#251] Export FLA: Fixed filter strength rounding -- [#257] Export FLA: Text field color and size issues -- [#259] Fixed images alpha -- [#260] Export FLA: Labels position -- [#268] AS1/2 Function parameter shown as register instead loc -- [#272] AS3 Class initializer editation fix -- [#276] Fixed anonymous/inline functions handling -- [#220] Improved editing fonts / texts -- [#284],... other small fixes - -## [1.6.7] - 2013-07-20 -### Added -- [#220] Selection of font to import characters from -- [#232] Automatically add .swf extension in saveas dialog -- [#253] Abort/Retry/Ignore dialog on errors with file saving - -### Changed -- Improved translations - -### Fixed -- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation -- [#203] AS1/2 improved direct editing -- [#220] Adding characters to font fix -- [#225] AS1/2 object literal without name quotes -- [#236] AS1/2 Rename invalid identifiers issues -- [#245] AS3 Double space around "as" keyword -- [#247] AS3 Scrolling to main class at startup -- [#248] Memory issues (slowdown) -- [#254] Expressions as commands -- [#255] Windows 7 loading issues -- [#256] AS3 Object literal in return clause -- SWF text parsing (new lines) -- Labels size by locales - -## [1.6.6 update 2] - 2013-07-16 -### Fixed -- [#241] Program could not be started - -## [1.6.6 update 1] - 2013-07-16 -### Changed -- Better localization support - -### Fixed -- [#238],[#239],[#240] Fixed deobfuscation related problems -- [#237] Parentheses in AS1/2 add,subtract - -## [1.6.6] - 2013-07-16 -### Added -- [#217] Russian translation (focus) -- [#219] Hungarian translation (honfika) -- [#224] Swedish translation (Capasha) -- [#220] Adding characters to Fonts, displaying font info -- [#121] Search progress indication -- Error log - -### Changed -- [#203] Improved direct editing of AS1/2 -- [#207] Update SWF preview after switching external/internal flash player - -### Fixed -- [#151] Memory caching -- [#171] Skipping invalid AS3 code - newobject, newarray -- [#206] AS3 switch problem -- [#208] Renaming anonymous functions -- [#209],[#229] FLA export texts positions -- [#213],[#221] other decompilation issues -- [#225] AS object literal broken with ternar operator -- [#226] onClip indentation in FLA export -- [#227] gotoAndStop wrong frame index -- [#230] FLA export missing strokes -- Shapes viewer - missing strokes - -## [1.6.5 update 1] - 2013-07-09 -### Fixed -- [#151] Fixed caching in memory -- [#172] AS1/2 constant detection fix -- [#174] Renaming SymbolClass fix -- [#175],[#212] Fixed create directory issues on export -- [#185],[#186] on-clip actions indentation -- [#197] AS1/2 Missing storeregister before switch -- [#216] AS2 Fixed field order -- [#213] AS2 Fixed var fields quotes, switch nullpointer - -## [1.6.5] - 2013-07-08 -### Added -- Multilanguage support (currently English and Czech) -- [#151] Option for caching in memory instead of files -- [#168] Export selection in tree context menu -- [#176] option to show main class on startup -- [#177] saving window maximized state -- [#202] Removing tags other than DefineSprite - -### Changed -- [#173],[#190] Better renaming -- [#129], [#153] Better deobfuscation -- [#180] better error handling -- [#185],[#186] better displaying and exporting onclip actions - -### Fixed -- [#123] Better context menu integration -- [#136] FLA export - text sizes -- [#137],[#179] foreach issues (hasNext) -- [#144] Plain text export - empty line fix -- [#144] Not displaying texts -- [#164] DefineMorphShape issues -- [#167] Sprite tag appearing twice in export filename -- [#170] AS3 Try in loop -- [#172] loop detection fix -- [#175] use empty namespace -- [#178] AS subtract with negate -- [#181] AS3 missing quotes in object field -- [#182] missing namespace imports -- [#183] wrong stage size -- [#184] wrong video link -- [#189] Fixed three dots in tree -- [#191] Focalgradient fill fix -- [#195] AS2 issues -- [#196],[#197] switch issues -- [#198] DefineFont2 empty check -- [#200] DefineBitsLossLess fix -- [#201] Nonworking main window in Linux/MacOS (due toAssociation) - -## [1.6.4 update 1] - 2013-06-30 -### Fixed -- [#166] For loops detection -- [#165] AS3:direct lookupswitch support - -## [1.6.4] - 2013-06-30 -### Added -- [#63] Globally rename identifier -- [#67] Deobfuscation - rename identifiers according to type -- [#117] Drag & Drop SWF file to main window opens it -- [#123] Context menu integration on Windows -- [#127] Drag & Drop items from tree outside of application -- [#134] AS3: Find document class -- [#144] New lines in plain text export -- [#155] Remembering window size + splitbar positions between runs - -### Changed -- [#142] Using exportassets tag for tag names -- [#146] Display AS2 classes as tree of packages -- Better loop detection - -### Fixed -- [#129] AS1/2: not refreshing decompiled after rename -- [#130] Renaming SymbolClass identifiers too -- [#132] Renaming identifiers renamed strings -- [#136] Invalid text positions in FLA export -- [#145] Unicode support -- [#147] Escape filenames during obfuscated AS3 export -- [#148] Better package vs classname handling -- [#152] Empty if branches not inverted -- [#156] Better search handling (not freezing) -- [#157] AS3: Try statements in loops -- [#158] Graph repaint problem -- [#159] AS3: Improper rest parameter handling -- [#160] Commandline binaryData export -- [#162] DefineBitsJPEG2 image replacing -- [#163] Closing SWF file after loading -- other minor fixes - -## [1.6.3 update 2] - 2013-06-21 -### Changed -- [#149] Ifs with empty onTrue branches now inverted - -### Fixed -- [#150] Long line restriction removed - -## [1.6.3 update 1] - 2013-06-21 -### Fixed -- Memory limit decreased - FFDec was not working on 32 bit JVM. - -## [1.6.3] - 2013-06-20 -### Changed -- Parallel SpeedUp can be disabled in menu -- Better loop detection - -### Fixed -- [#119] Replacements file not found issue -- [#101] AS1/2 postincrement fix -- [#114],[#116],[#135],[#141] Fixed loop detection -- [#102] Fixed loop highlighting in export -- [#124] Flash player file path detection -- [#128] Improved imports -- [#135] CommentItem fix -- [#129],[#131] Better deobfuscation -- [#104] AS3 inc/dec local deobfuscation fix -- [#113],[#133],[#140] Memory limit increased - -## [1.6.2] - 2013-06-09 -### Added -- New loop detection algorithm - -### Changed -- [#108] - Faster loading and decompiling (Parallelism) -- Improved Internal flash viewer - shapes and morphshapes - -### Fixed -- Ternar operator fix -- [#102] Fixed Shapes to FLA export -- AS1/2 class detection fix -- [#105],[#104],[#101] fixed via new loop detection - -## [1.6.1] - 2013-06-03 -### Added -- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) -- [#109], [#106], [#107] some code improvements - -### Changed -- Application needs Java 1.7 to run - -### Removed -- Support for Java before 1.7 - -### Fixed -- [#102], [#110] AS3: Class highlight fix -- [#103] AS3:Fixed setslot handling -- [#104] AS3:Inc/Declocal nullpointer fix -- [#104] Multiple conditions in loop fix -- [#111] AS3:Object literal truncates line -- [#105] Better do while..break handling -- loop fixes - -## [1.6.0 update 1] - 2013-05-25 -### Added -- better FLA export - -### Fixed -- Many FLA export related bugs (like [#96]) -- [#98] Empty initializers do not cause empty lines now -- [#99] small logging issues -- [#100] large obfuscated code support - -## [1.6.0] - 2013-05-20 -### Added -- Export to FLA (Experimental BETA!) -- [#85] Search text in all ActionScripts -- SWF 11 support - -### Fixed -- [#79] ActionStartDrag constraint fix -- [#92] Inversed GreaterThan/LessThan -- [#93] AS1/2 fixed switch detection -- [#94] AS1/2 ActionTry - register cast fix -- [#95] Better script end handling - -## [1.5.2] - 2013-05-05 -### Added -- Improved automatic update system (changes log). -- Handling script traits as separate objects. -- [#86] open/save file dialog now accepts absolute paths in quotes - -### Fixed -- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 -- [#88] Fixed graph building -- [#89] AS3: bracket in property name lead to missing dot -- [#82] printgraph issue - -## [1.5.1 update 1] - 2013-05-04 -### Added -- Exporting texts via commandline -- Exporting all via commandline - -### Fixed -- DefineText2 color parameter -- AS3 GetSlot,SetSlot -- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... -- [#83] Fixed images transparency (zlib fix) -- Fixed graphparts with only jump in it (obfuscators) -- MORPHGRADIENT FIX -- Trasparency in DefineBitsJPEG3 and 4 -- Displaying shapes,morphshapes and sprites with bitmaps - -## [1.5.1] - 2013-05-01 -### Added -- Support for larger switches (10+cases) -- Editing text tags -- [#65] Exporting text tags -- Removing sprites -- Replacing images - -### Fixed -- DefineMorphShape2 fix -- [#79] - AS1/2 class detection fix, wrong printgraph fix -- [#78] - script trait slots fix - -## [1.5.0 update 1] - 2013-04-21 -### Fixed -- Automatic deobfuscation config defaulted to Off for AS1/2. - -## [1.5.0] - 2013-04-20 -### Added -- Direct editing of ActionScript 1/2 code (Beta) -- AS1/2: ifFrameLoaded support -- Automatic deobfuscation can be disabled in the menu -- [#48] - Decompile only specified class (commandline option) -- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices -- [#66] - Decompressing LZMA via commandline -- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) -- [#69] - DoABC vs DoABCDefine tags decompilation -- [#75] - Comma separator in while/do..while conditions, better if..return handling -- AS1/2: parsing NaN,Infinity value (Fix for [#73]) - -### Changed -- New icons (edit/save/cancel and main menu) - -### Fixed -- [#62] - Errors on not defined character tags (import tag) -- [#72] - First ternary operator expression was always true -- Fixed many deobfuscation related bugs - -## [1.4.3 update 2] - 2013-04-10 -### Fixed -- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) -- Try to fix lib/FlashPlayer.exe issue - -## [1.4.3 update 1] - 2013-04-06 -### Fixed -- [#38] - Indentation in const/var initializers, missing semicolon -- [#56] - Test output left in last release -- [#57] - Unknown instructions now do not log an exception (obfuscators do this) -- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. -- AS3 loops fix -- While true fix - -## [1.4.3] - 2013-04-04 -### Added -- AS1/2 Better deobfuscation - -### Fixed -- [#45] - Unicode characters fix -- [#50] - AS1/2 Function body deobfuscation fix -- [#51] - Displaying java class names instead of expressions -- [#52] - AS1/2 Better constantpool detection (deobfuscation) -- [#38] - AS3 indentation in initialized const/var value for newobject -- Fixed ImportAssets2 tag id - -## [1.4.2 update 1] - 2013-03-25 -### Fixed -- [#47] - wrong AS3 deobfuscation -- AS3 deobfuscation issues -- AS3 switch - -## [1.4.2] - 2013-03-24 -### Added -- [#42] - Displaying code as hex -- AS1/2: Renaming identifiers (deobfuscation) -- AS1/2,AS3: Better deobfuscation -- Storing configuration to user home -- Installer for Windows systems - -### Changed -- Graph button changed to icon. - -### Fixed -- [#39] - AS1/2 NewMethod..Pop fix -- [#40] - No logging + For..in..return decompilation -- [#44] - DefineFont2 fix -- [#36] - Multiname with invalid index -- [#43] - Ternary operator and more -- [#46] - Ifs with empty branches got ignored -- [#3] - Ignoring unknown opcodes -- Logging exceptions during export - -## [1.4.1] - 2013-03-10 -### Added -- Exporting sounds -- Better AS1/2 deobfuscation (disassembly & decompilation) - -### Fixed -- Exporting only first 1000 frames of the movie -- Decompiled code was not refreshed on AS1/2 changes -- Application no longer creates empty directories on export - -## [1.4.0 update 1] - 2013-03-04 -### Fixed -- [#37] - AS3: Reversed loop conditions - -## [1.4.0] - 2013-03-03 -### Added -- AS3: ignoring return void at the end of methods -- New icons - Silk icons -- AS3: Traits list sort button -- Better Graph display -- Frames view -- Exporting of movies (No audio) -- Some AS3 related Tests -- Homepage & Donate link in the menu - -### Changed -- Tree view instead of tabs -- AS1/2 and AS3 now share same decompiling method. - -### Fixed -- [#34] - Reversed loop conditions -- [#35] - Fixed unicode strings (Japanese) - -## [1.3.1] - 2013-02-23 -### Changed -- Flash player no longer uses SWT library - -### Fixed -- [#32] - AS2: Action255 bug -- [#31] - Erorrneous tags are now ignored -- DefineBitsLossLess 1&2 on 8bit colormapped images - -## [1.3.0] - 2013-02-17 -### Added -- Decompilation is more resistant to obfuscation -- Shapes SVG export -- AS2: Decompiling classes & interfaces -- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) -- AS3: Deobfuscation menu -- Graph button for displaying code flow Graph - -### Changed -- Complete new decompiling method in both AS1/2 and AS3 -- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". -- To edit source, Edit button must be pressed first (Due to click&go feature) - -### Fixed -- AS3: Method info editor fixed -- Edittext & Button displaying - -## [1.2.0] - 2013-01-19 -### Added -- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). -- Images display and export -- AS2: Exporting selection -- Progressbar during loading - -### Changed -- One merged window for AS1/2 and 3. -- Updated icons - -### Fixed -- AS3: xml attrib, switch in anonymous function (in AS2 too) - -## [1.1.0] - 2013-01-02 -### Added -- Checking for updates -- AS2: Exporting -- AS3: Decompiling whole scripts instead of just classes -- AS3: Exporting selected scripts -- AS3: Script search bar -- AS3: List of DoABCTags now has default "- all -" item -- AS3: Better imports, use namespaces -- AS3: XML related instructions -- AS3: Anonymous functions with names -- AS3: Better initialization of const values -- Logging exceptions to log.txt file - -### Fixed -- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops - -## [1.0.1] - 2012-12-26 -### Added -- AS3: Runtime namespace resolving -- AS3: Arguments variable -- AS3: Better recognizing Pre/Post Increments/Decrements -- AS3: Better declarations - -### Fixed -- AS3: Fixed static variables - -## [1.0.0] - 2012-12-24 -### Added -- Support for LZMA compressed files -- AS3: Detecting local register types for declaration. -- AS3: Displaying inline functions -- AS3: Last save/open dir is remembered -- AS3: Better usage detection for multinames -- AS3: Commandline arguments for exporting -- AS3: Better chained assignments -- AS2: FSCommand2 instruction support -- Proxy: Mimetype application/octet-stream added -- Added executable for Windows users. - -### Changed -- AS3: GUI - Constants tab moved to the top -- AS3: Deobfuscation is now optional, can be accessed via menu - -### Fixed -- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) -- Other minor fixes - -## [beta 1] - 2011-07-30 -### Added -- AS3: Automatic computing method body parameters (EXPERIMENTAL) -- AS3: Editing return type of methods -- AS3: Editing type and default value for variables/constants (Slot/Const traits) -- AS1/2: Few enhancements -- About dialog - -### Changed -- Gui: Updated Icons - -### Fixed -- AS 1/2: Fixed large bug causing Ifs to not decompile properly -- Proxy: Some minor fixes - -## [alpha 10] - 2011-07-13 -### Added -- AS3:Highlighting actual line -- AS3:Completing instruction names via Ctrl+Space -- AS3:Editing method parameters, method body parameters via tab panel -- AS3:ByteCode minor_version 17 supported - decimal datatypes -- AS3:Local variables and method parameters take name from debug information if present -- AS3:Automatic renaming of classes/methods when obfuscated names -- AS3:Better error messages (When cannot decompile obfuscated code) - -### Fixed -- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) -- AS3:Hilighting fixes -- AS3:Fixed decrement/increment statements decompilation -- AS3:Decompiler now adds variable declarations on the beginning of decompiled method -- AS3:Try/catch statements fixed when debug information present -- AS3:Fixed for each statements -- AS3:Other minor fixes - -## [alpha 9] - 2011-07-02 -### Added -- AS3: Added disassembling of some new types of instructions -- AS3: Exporting source as PCode - -### Fixed -- AS3: Many other bugfixes... - -## [alpha 8] - 2010-09-19 -### Added -- AS3: Editing exceptions -- AS3: Finding usage of multinames from constant table - -### Changed -- AS1/2: Better GUI -- AS1/2: Better decompiling of Ifs, For..in - -## [alpha 7] - 2010-09-04 -### Added -- Initial public release - -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev -[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 -[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 -[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 -[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 -[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 -[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 -[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 -[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 -[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 -[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 -[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 -[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 -[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 -[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 -[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 -[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 -[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 -[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 -[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 -[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 -[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 -[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 -[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 -[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 -[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 -[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 -[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 -[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 -[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 -[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 -[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 -[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 -[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 -[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 -[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 -[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 -[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 -[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 -[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 -[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 -[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 -[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 -[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 -[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 -[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 -[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 -[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 -[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 -[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 -[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 -[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 -[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 -[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 -[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 -[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 -[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 -[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 -[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 -[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 -[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 -[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 -[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 -[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 -[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 -[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 -[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 -[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 -[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 -[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 -[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 -[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 -[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 -[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 -[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 -[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 -[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 -[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 -[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 -[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 -[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 -[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 -[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 -[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 -[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 -[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 -[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 -[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 -[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 -[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 -[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 -[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 -[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 -[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 -[#1156]: https://www.free-decompiler.com/flash/issues/1156 -[#1171]: https://www.free-decompiler.com/flash/issues/1171 -[#1170]: https://www.free-decompiler.com/flash/issues/1170 -[#1241]: https://www.free-decompiler.com/flash/issues/1241 -[#1162]: https://www.free-decompiler.com/flash/issues/1162 -[#1199]: https://www.free-decompiler.com/flash/issues/1199 -[#1151]: https://www.free-decompiler.com/flash/issues/1151 -[#1128]: https://www.free-decompiler.com/flash/issues/1128 -[#1163]: https://www.free-decompiler.com/flash/issues/1163 -[#1172]: https://www.free-decompiler.com/flash/issues/1172 -[#1174]: https://www.free-decompiler.com/flash/issues/1174 -[#1183]: https://www.free-decompiler.com/flash/issues/1183 -[#1193]: https://www.free-decompiler.com/flash/issues/1193 -[#1200]: https://www.free-decompiler.com/flash/issues/1200 -[#1198]: https://www.free-decompiler.com/flash/issues/1198 -[#1205]: https://www.free-decompiler.com/flash/issues/1205 -[#1194]: https://www.free-decompiler.com/flash/issues/1194 -[#1210]: https://www.free-decompiler.com/flash/issues/1210 -[#1217]: https://www.free-decompiler.com/flash/issues/1217 -[#1244]: https://www.free-decompiler.com/flash/issues/1244 -[#1247]: https://www.free-decompiler.com/flash/issues/1247 -[#1236]: https://www.free-decompiler.com/flash/issues/1236 -[#1251]: https://www.free-decompiler.com/flash/issues/1251 -[#1265]: https://www.free-decompiler.com/flash/issues/1265 -[#1268]: https://www.free-decompiler.com/flash/issues/1268 -[#1161]: https://www.free-decompiler.com/flash/issues/1161 -[#1118]: https://www.free-decompiler.com/flash/issues/1118 -[#409]: https://www.free-decompiler.com/flash/issues/409 -[#1132]: https://www.free-decompiler.com/flash/issues/1132 -[#1134]: https://www.free-decompiler.com/flash/issues/1134 -[#1121]: https://www.free-decompiler.com/flash/issues/1121 -[#1052]: https://www.free-decompiler.com/flash/issues/1052 -[#1145]: https://www.free-decompiler.com/flash/issues/1145 -[#758]: https://www.free-decompiler.com/flash/issues/758 -[#1096]: https://www.free-decompiler.com/flash/issues/1096 -[#1104]: https://www.free-decompiler.com/flash/issues/1104 -[#1107]: https://www.free-decompiler.com/flash/issues/1107 -[#1106]: https://www.free-decompiler.com/flash/issues/1106 -[#1113]: https://www.free-decompiler.com/flash/issues/1113 -[#1075]: https://www.free-decompiler.com/flash/issues/1075 -[#1127]: https://www.free-decompiler.com/flash/issues/1127 -[#1103]: https://www.free-decompiler.com/flash/issues/1103 -[#1133]: https://www.free-decompiler.com/flash/issues/1133 -[#1135]: https://www.free-decompiler.com/flash/issues/1135 -[#1138]: https://www.free-decompiler.com/flash/issues/1138 -[#1139]: https://www.free-decompiler.com/flash/issues/1139 -[#930]: https://www.free-decompiler.com/flash/issues/930 -[#1137]: https://www.free-decompiler.com/flash/issues/1137 -[#1144]: https://www.free-decompiler.com/flash/issues/1144 -[#1147]: https://www.free-decompiler.com/flash/issues/1147 -[#1148]: https://www.free-decompiler.com/flash/issues/1148 -[#1152]: https://www.free-decompiler.com/flash/issues/1152 -[#1154]: https://www.free-decompiler.com/flash/issues/1154 -[#116]: https://www.free-decompiler.com/flash/issues/116 -[#1070]: https://www.free-decompiler.com/flash/issues/1070 -[#1098]: https://www.free-decompiler.com/flash/issues/1098 -[#1033]: https://www.free-decompiler.com/flash/issues/1033 -[#1083]: https://www.free-decompiler.com/flash/issues/1083 -[#1091]: https://www.free-decompiler.com/flash/issues/1091 -[#1076]: https://www.free-decompiler.com/flash/issues/1076 -[#1068]: https://www.free-decompiler.com/flash/issues/1068 -[#1063]: https://www.free-decompiler.com/flash/issues/1063 -[#1019]: https://www.free-decompiler.com/flash/issues/1019 -[#1016]: https://www.free-decompiler.com/flash/issues/1016 -[#1010]: https://www.free-decompiler.com/flash/issues/1010 -[#1008]: https://www.free-decompiler.com/flash/issues/1008 -[#1004]: https://www.free-decompiler.com/flash/issues/1004 -[#933]: https://www.free-decompiler.com/flash/issues/933 -[#1062]: https://www.free-decompiler.com/flash/issues/1062 -[#418]: https://www.free-decompiler.com/flash/issues/418 -[#1047]: https://www.free-decompiler.com/flash/issues/1047 -[#812]: https://www.free-decompiler.com/flash/issues/812 -[#1056]: https://www.free-decompiler.com/flash/issues/1056 -[#1057]: https://www.free-decompiler.com/flash/issues/1057 -[#991]: https://www.free-decompiler.com/flash/issues/991 -[#689]: https://www.free-decompiler.com/flash/issues/689 -[#1060]: https://www.free-decompiler.com/flash/issues/1060 -[#1037]: https://www.free-decompiler.com/flash/issues/1037 -[#489]: https://www.free-decompiler.com/flash/issues/489 -[#1007]: https://www.free-decompiler.com/flash/issues/1007 -[#1044]: https://www.free-decompiler.com/flash/issues/1044 -[#947]: https://www.free-decompiler.com/flash/issues/947 -[#953]: https://www.free-decompiler.com/flash/issues/953 -[#954]: https://www.free-decompiler.com/flash/issues/954 -[#950]: https://www.free-decompiler.com/flash/issues/950 -[#945]: https://www.free-decompiler.com/flash/issues/945 -[#957]: https://www.free-decompiler.com/flash/issues/957 -[#956]: https://www.free-decompiler.com/flash/issues/956 -[#968]: https://www.free-decompiler.com/flash/issues/968 -[#978]: https://www.free-decompiler.com/flash/issues/978 -[#955]: https://www.free-decompiler.com/flash/issues/955 -[#966]: https://www.free-decompiler.com/flash/issues/966 -[#999]: https://www.free-decompiler.com/flash/issues/999 -[#1000]: https://www.free-decompiler.com/flash/issues/1000 -[#1017]: https://www.free-decompiler.com/flash/issues/1017 -[#1030]: https://www.free-decompiler.com/flash/issues/1030 -[#949]: https://www.free-decompiler.com/flash/issues/949 -[#944]: https://www.free-decompiler.com/flash/issues/944 -[#939]: https://www.free-decompiler.com/flash/issues/939 -[#942]: https://www.free-decompiler.com/flash/issues/942 -[#952]: https://www.free-decompiler.com/flash/issues/952 -[#858]: https://www.free-decompiler.com/flash/issues/858 -[#905]: https://www.free-decompiler.com/flash/issues/905 -[#920]: https://www.free-decompiler.com/flash/issues/920 -[#921]: https://www.free-decompiler.com/flash/issues/921 -[#924]: https://www.free-decompiler.com/flash/issues/924 -[#895]: https://www.free-decompiler.com/flash/issues/895 -[#884]: https://www.free-decompiler.com/flash/issues/884 -[#899]: https://www.free-decompiler.com/flash/issues/899 -[#903]: https://www.free-decompiler.com/flash/issues/903 -[#855]: https://www.free-decompiler.com/flash/issues/855 -[#850]: https://www.free-decompiler.com/flash/issues/850 -[#832]: https://www.free-decompiler.com/flash/issues/832 -[#904]: https://www.free-decompiler.com/flash/issues/904 -[#910]: https://www.free-decompiler.com/flash/issues/910 -[#922]: https://www.free-decompiler.com/flash/issues/922 -[#916]: https://www.free-decompiler.com/flash/issues/916 -[#938]: https://www.free-decompiler.com/flash/issues/938 -[#897]: https://www.free-decompiler.com/flash/issues/897 -[#470]: https://www.free-decompiler.com/flash/issues/470 -[#877]: https://www.free-decompiler.com/flash/issues/877 -[#878]: https://www.free-decompiler.com/flash/issues/878 -[#845]: https://www.free-decompiler.com/flash/issues/845 -[#883]: https://www.free-decompiler.com/flash/issues/883 -[#882]: https://www.free-decompiler.com/flash/issues/882 -[#760]: https://www.free-decompiler.com/flash/issues/760 -[#887]: https://www.free-decompiler.com/flash/issues/887 -[#842]: https://www.free-decompiler.com/flash/issues/842 -[#841]: https://www.free-decompiler.com/flash/issues/841 -[#772]: https://www.free-decompiler.com/flash/issues/772 -[#762]: https://www.free-decompiler.com/flash/issues/762 -[#862]: https://www.free-decompiler.com/flash/issues/862 -[#865]: https://www.free-decompiler.com/flash/issues/865 -[#613]: https://www.free-decompiler.com/flash/issues/613 -[#868]: https://www.free-decompiler.com/flash/issues/868 -[#713]: https://www.free-decompiler.com/flash/issues/713 -[#807]: https://www.free-decompiler.com/flash/issues/807 -[#728]: https://www.free-decompiler.com/flash/issues/728 -[#857]: https://www.free-decompiler.com/flash/issues/857 -[#860]: https://www.free-decompiler.com/flash/issues/860 -[#824]: https://www.free-decompiler.com/flash/issues/824 -[#809]: https://www.free-decompiler.com/flash/issues/809 -[#805]: https://www.free-decompiler.com/flash/issues/805 -[#825]: https://www.free-decompiler.com/flash/issues/825 -[#737]: https://www.free-decompiler.com/flash/issues/737 -[#350]: https://www.free-decompiler.com/flash/issues/350 -[#814]: https://www.free-decompiler.com/flash/issues/814 -[#816]: https://www.free-decompiler.com/flash/issues/816 -[#835]: https://www.free-decompiler.com/flash/issues/835 -[#836]: https://www.free-decompiler.com/flash/issues/836 -[#848]: https://www.free-decompiler.com/flash/issues/848 -[#817]: https://www.free-decompiler.com/flash/issues/817 -[#849]: https://www.free-decompiler.com/flash/issues/849 -[#852]: https://www.free-decompiler.com/flash/issues/852 -[#837]: https://www.free-decompiler.com/flash/issues/837 -[#811]: https://www.free-decompiler.com/flash/issues/811 -[#745]: https://www.free-decompiler.com/flash/issues/745 -[#803]: https://www.free-decompiler.com/flash/issues/803 -[#738]: https://www.free-decompiler.com/flash/issues/738 -[#742]: https://www.free-decompiler.com/flash/issues/742 -[#747]: https://www.free-decompiler.com/flash/issues/747 -[#749]: https://www.free-decompiler.com/flash/issues/749 -[#752]: https://www.free-decompiler.com/flash/issues/752 -[#753]: https://www.free-decompiler.com/flash/issues/753 -[#759]: https://www.free-decompiler.com/flash/issues/759 -[#766]: https://www.free-decompiler.com/flash/issues/766 -[#768]: https://www.free-decompiler.com/flash/issues/768 -[#773]: https://www.free-decompiler.com/flash/issues/773 -[#776]: https://www.free-decompiler.com/flash/issues/776 -[#783]: https://www.free-decompiler.com/flash/issues/783 -[#785]: https://www.free-decompiler.com/flash/issues/785 -[#787]: https://www.free-decompiler.com/flash/issues/787 -[#788]: https://www.free-decompiler.com/flash/issues/788 -[#790]: https://www.free-decompiler.com/flash/issues/790 -[#794]: https://www.free-decompiler.com/flash/issues/794 -[#798]: https://www.free-decompiler.com/flash/issues/798 -[#800]: https://www.free-decompiler.com/flash/issues/800 -[#676]: https://www.free-decompiler.com/flash/issues/676 -[#734]: https://www.free-decompiler.com/flash/issues/734 -[#687]: https://www.free-decompiler.com/flash/issues/687 -[#709]: https://www.free-decompiler.com/flash/issues/709 -[#732]: https://www.free-decompiler.com/flash/issues/732 -[#730]: https://www.free-decompiler.com/flash/issues/730 -[#735]: https://www.free-decompiler.com/flash/issues/735 -[#722]: https://www.free-decompiler.com/flash/issues/722 -[#725]: https://www.free-decompiler.com/flash/issues/725 -[#715]: https://www.free-decompiler.com/flash/issues/715 -[#635]: https://www.free-decompiler.com/flash/issues/635 -[#726]: https://www.free-decompiler.com/flash/issues/726 -[#716]: https://www.free-decompiler.com/flash/issues/716 -[#717]: https://www.free-decompiler.com/flash/issues/717 -[#718]: https://www.free-decompiler.com/flash/issues/718 -[#720]: https://www.free-decompiler.com/flash/issues/720 -[#719]: https://www.free-decompiler.com/flash/issues/719 -[#723]: https://www.free-decompiler.com/flash/issues/723 -[#288]: https://www.free-decompiler.com/flash/issues/288 -[#677]: https://www.free-decompiler.com/flash/issues/677 -[#389]: https://www.free-decompiler.com/flash/issues/389 -[#701]: https://www.free-decompiler.com/flash/issues/701 -[#707]: https://www.free-decompiler.com/flash/issues/707 -[#302]: https://www.free-decompiler.com/flash/issues/302 -[#685]: https://www.free-decompiler.com/flash/issues/685 -[#698]: https://www.free-decompiler.com/flash/issues/698 -[#710]: https://www.free-decompiler.com/flash/issues/710 -[#711]: https://www.free-decompiler.com/flash/issues/711 -[#681]: https://www.free-decompiler.com/flash/issues/681 -[#688]: https://www.free-decompiler.com/flash/issues/688 -[#691]: https://www.free-decompiler.com/flash/issues/691 -[#524]: https://www.free-decompiler.com/flash/issues/524 -[#663]: https://www.free-decompiler.com/flash/issues/663 -[#702]: https://www.free-decompiler.com/flash/issues/702 -[#539]: https://www.free-decompiler.com/flash/issues/539 -[#650]: https://www.free-decompiler.com/flash/issues/650 -[#680]: https://www.free-decompiler.com/flash/issues/680 -[#649]: https://www.free-decompiler.com/flash/issues/649 -[#656]: https://www.free-decompiler.com/flash/issues/656 -[#661]: https://www.free-decompiler.com/flash/issues/661 -[#664]: https://www.free-decompiler.com/flash/issues/664 -[#668]: https://www.free-decompiler.com/flash/issues/668 -[#674]: https://www.free-decompiler.com/flash/issues/674 -[#675]: https://www.free-decompiler.com/flash/issues/675 -[#632]: https://www.free-decompiler.com/flash/issues/632 -[#651]: https://www.free-decompiler.com/flash/issues/651 -[#678]: https://www.free-decompiler.com/flash/issues/678 -[#672]: https://www.free-decompiler.com/flash/issues/672 -[#684]: https://www.free-decompiler.com/flash/issues/684 -[#647]: https://www.free-decompiler.com/flash/issues/647 -[#648]: https://www.free-decompiler.com/flash/issues/648 -[#612]: https://www.free-decompiler.com/flash/issues/612 -[#623]: https://www.free-decompiler.com/flash/issues/623 -[#624]: https://www.free-decompiler.com/flash/issues/624 -[#627]: https://www.free-decompiler.com/flash/issues/627 -[#640]: https://www.free-decompiler.com/flash/issues/640 -[#595]: https://www.free-decompiler.com/flash/issues/595 -[#592]: https://www.free-decompiler.com/flash/issues/592 -[#585]: https://www.free-decompiler.com/flash/issues/585 -[#578]: https://www.free-decompiler.com/flash/issues/578 -[#501]: https://www.free-decompiler.com/flash/issues/501 -[#616]: https://www.free-decompiler.com/flash/issues/616 -[#559]: https://www.free-decompiler.com/flash/issues/559 -[#401]: https://www.free-decompiler.com/flash/issues/401 -[#593]: https://www.free-decompiler.com/flash/issues/593 -[#594]: https://www.free-decompiler.com/flash/issues/594 -[#579]: https://www.free-decompiler.com/flash/issues/579 -[#428]: https://www.free-decompiler.com/flash/issues/428 -[#337]: https://www.free-decompiler.com/flash/issues/337 -[#584]: https://www.free-decompiler.com/flash/issues/584 -[#576]: https://www.free-decompiler.com/flash/issues/576 -[#250]: https://www.free-decompiler.com/flash/issues/250 -[#580]: https://www.free-decompiler.com/flash/issues/580 -[#510]: https://www.free-decompiler.com/flash/issues/510 -[#583]: https://www.free-decompiler.com/flash/issues/583 -[#586]: https://www.free-decompiler.com/flash/issues/586 -[#574]: https://www.free-decompiler.com/flash/issues/574 -[#570]: https://www.free-decompiler.com/flash/issues/570 -[#563]: https://www.free-decompiler.com/flash/issues/563 -[#561]: https://www.free-decompiler.com/flash/issues/561 -[#509]: https://www.free-decompiler.com/flash/issues/509 -[#433]: https://www.free-decompiler.com/flash/issues/433 -[#557]: https://www.free-decompiler.com/flash/issues/557 -[#556]: https://www.free-decompiler.com/flash/issues/556 -[#504]: https://www.free-decompiler.com/flash/issues/504 -[#529]: https://www.free-decompiler.com/flash/issues/529 -[#538]: https://www.free-decompiler.com/flash/issues/538 -[#537]: https://www.free-decompiler.com/flash/issues/537 -[#540]: https://www.free-decompiler.com/flash/issues/540 -[#387]: https://www.free-decompiler.com/flash/issues/387 -[#552]: https://www.free-decompiler.com/flash/issues/552 -[#494]: https://www.free-decompiler.com/flash/issues/494 -[#513]: https://www.free-decompiler.com/flash/issues/513 -[#262]: https://www.free-decompiler.com/flash/issues/262 -[#499]: https://www.free-decompiler.com/flash/issues/499 -[#508]: https://www.free-decompiler.com/flash/issues/508 -[#305]: https://www.free-decompiler.com/flash/issues/305 -[#312]: https://www.free-decompiler.com/flash/issues/312 -[#503]: https://www.free-decompiler.com/flash/issues/503 -[#304]: https://www.free-decompiler.com/flash/issues/304 -[#306]: https://www.free-decompiler.com/flash/issues/306 -[#507]: https://www.free-decompiler.com/flash/issues/507 -[#424]: https://www.free-decompiler.com/flash/issues/424 -[#425]: https://www.free-decompiler.com/flash/issues/425 -[#478]: https://www.free-decompiler.com/flash/issues/478 -[#485]: https://www.free-decompiler.com/flash/issues/485 -[#517]: https://www.free-decompiler.com/flash/issues/517 -[#518]: https://www.free-decompiler.com/flash/issues/518 -[#361]: https://www.free-decompiler.com/flash/issues/361 -[#392]: https://www.free-decompiler.com/flash/issues/392 -[#516]: https://www.free-decompiler.com/flash/issues/516 -[#495]: https://www.free-decompiler.com/flash/issues/495 -[#496]: https://www.free-decompiler.com/flash/issues/496 -[#299]: https://www.free-decompiler.com/flash/issues/299 -[#303]: https://www.free-decompiler.com/flash/issues/303 -[#324]: https://www.free-decompiler.com/flash/issues/324 -[#346]: https://www.free-decompiler.com/flash/issues/346 -[#371]: https://www.free-decompiler.com/flash/issues/371 -[#426]: https://www.free-decompiler.com/flash/issues/426 -[#457]: https://www.free-decompiler.com/flash/issues/457 -[#458]: https://www.free-decompiler.com/flash/issues/458 -[#460]: https://www.free-decompiler.com/flash/issues/460 -[#462]: https://www.free-decompiler.com/flash/issues/462 -[#463]: https://www.free-decompiler.com/flash/issues/463 -[#465]: https://www.free-decompiler.com/flash/issues/465 -[#466]: https://www.free-decompiler.com/flash/issues/466 -[#369]: https://www.free-decompiler.com/flash/issues/369 -[#390]: https://www.free-decompiler.com/flash/issues/390 -[#453]: https://www.free-decompiler.com/flash/issues/453 -[#459]: https://www.free-decompiler.com/flash/issues/459 -[#461]: https://www.free-decompiler.com/flash/issues/461 -[#451]: https://www.free-decompiler.com/flash/issues/451 -[#454]: https://www.free-decompiler.com/flash/issues/454 -[#455]: https://www.free-decompiler.com/flash/issues/455 -[#474]: https://www.free-decompiler.com/flash/issues/474 -[#477]: https://www.free-decompiler.com/flash/issues/477 -[#481]: https://www.free-decompiler.com/flash/issues/481 -[#484]: https://www.free-decompiler.com/flash/issues/484 -[#493]: https://www.free-decompiler.com/flash/issues/493 -[#365]: https://www.free-decompiler.com/flash/issues/365 -[#366]: https://www.free-decompiler.com/flash/issues/366 -[#429]: https://www.free-decompiler.com/flash/issues/429 -[#447]: https://www.free-decompiler.com/flash/issues/447 -[#354]: https://www.free-decompiler.com/flash/issues/354 -[#438]: https://www.free-decompiler.com/flash/issues/438 -[#436]: https://www.free-decompiler.com/flash/issues/436 -[#446]: https://www.free-decompiler.com/flash/issues/446 -[#427]: https://www.free-decompiler.com/flash/issues/427 -[#405]: https://www.free-decompiler.com/flash/issues/405 -[#420]: https://www.free-decompiler.com/flash/issues/420 -[#421]: https://www.free-decompiler.com/flash/issues/421 -[#430]: https://www.free-decompiler.com/flash/issues/430 -[#397]: https://www.free-decompiler.com/flash/issues/397 -[#431]: https://www.free-decompiler.com/flash/issues/431 -[#169]: https://www.free-decompiler.com/flash/issues/169 -[#335]: https://www.free-decompiler.com/flash/issues/335 -[#404]: https://www.free-decompiler.com/flash/issues/404 -[#407]: https://www.free-decompiler.com/flash/issues/407 -[#399]: https://www.free-decompiler.com/flash/issues/399 -[#400]: https://www.free-decompiler.com/flash/issues/400 -[#398]: https://www.free-decompiler.com/flash/issues/398 -[#382]: https://www.free-decompiler.com/flash/issues/382 -[#396]: https://www.free-decompiler.com/flash/issues/396 -[#357]: https://www.free-decompiler.com/flash/issues/357 -[#391]: https://www.free-decompiler.com/flash/issues/391 -[#395]: https://www.free-decompiler.com/flash/issues/395 -[#334]: https://www.free-decompiler.com/flash/issues/334 -[#301]: https://www.free-decompiler.com/flash/issues/301 -[#383]: https://www.free-decompiler.com/flash/issues/383 -[#386]: https://www.free-decompiler.com/flash/issues/386 -[#367]: https://www.free-decompiler.com/flash/issues/367 -[#380]: https://www.free-decompiler.com/flash/issues/380 -[#292]: https://www.free-decompiler.com/flash/issues/292 -[#375]: https://www.free-decompiler.com/flash/issues/375 -[#378]: https://www.free-decompiler.com/flash/issues/378 -[#325]: https://www.free-decompiler.com/flash/issues/325 -[#210]: https://www.free-decompiler.com/flash/issues/210 -[#355]: https://www.free-decompiler.com/flash/issues/355 -[#313]: https://www.free-decompiler.com/flash/issues/313 -[#330]: https://www.free-decompiler.com/flash/issues/330 -[#332]: https://www.free-decompiler.com/flash/issues/332 -[#344]: https://www.free-decompiler.com/flash/issues/344 -[#295]: https://www.free-decompiler.com/flash/issues/295 -[#297]: https://www.free-decompiler.com/flash/issues/297 -[#307]: https://www.free-decompiler.com/flash/issues/307 -[#309]: https://www.free-decompiler.com/flash/issues/309 -[#310]: https://www.free-decompiler.com/flash/issues/310 -[#311]: https://www.free-decompiler.com/flash/issues/311 -[#327]: https://www.free-decompiler.com/flash/issues/327 -[#328]: https://www.free-decompiler.com/flash/issues/328 -[#333]: https://www.free-decompiler.com/flash/issues/333 -[#336]: https://www.free-decompiler.com/flash/issues/336 -[#338]: https://www.free-decompiler.com/flash/issues/338 -[#315]: https://www.free-decompiler.com/flash/issues/315 -[#123]: https://www.free-decompiler.com/flash/issues/123 -[#243]: https://www.free-decompiler.com/flash/issues/243 -[#326]: https://www.free-decompiler.com/flash/issues/326 -[#287]: https://www.free-decompiler.com/flash/issues/287 -[#290]: https://www.free-decompiler.com/flash/issues/290 -[#291]: https://www.free-decompiler.com/flash/issues/291 -[#294]: https://www.free-decompiler.com/flash/issues/294 -[#298]: https://www.free-decompiler.com/flash/issues/298 -[#296]: https://www.free-decompiler.com/flash/issues/296 -[#314]: https://www.free-decompiler.com/flash/issues/314 -[#316]: https://www.free-decompiler.com/flash/issues/316 -[#318]: https://www.free-decompiler.com/flash/issues/318 -[#319]: https://www.free-decompiler.com/flash/issues/319 -[#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 -[#261]: https://www.free-decompiler.com/flash/issues/261 -[#269]: https://www.free-decompiler.com/flash/issues/269 -[#274]: https://www.free-decompiler.com/flash/issues/274 -[#275]: https://www.free-decompiler.com/flash/issues/275 -[#258]: https://www.free-decompiler.com/flash/issues/258 -[#267]: https://www.free-decompiler.com/flash/issues/267 -[#286]: https://www.free-decompiler.com/flash/issues/286 -[#233]: https://www.free-decompiler.com/flash/issues/233 -[#235]: https://www.free-decompiler.com/flash/issues/235 -[#263]: https://www.free-decompiler.com/flash/issues/263 -[#264]: https://www.free-decompiler.com/flash/issues/264 -[#265]: https://www.free-decompiler.com/flash/issues/265 -[#266]: https://www.free-decompiler.com/flash/issues/266 -[#281]: https://www.free-decompiler.com/flash/issues/281 -[#251]: https://www.free-decompiler.com/flash/issues/251 -[#257]: https://www.free-decompiler.com/flash/issues/257 -[#259]: https://www.free-decompiler.com/flash/issues/259 -[#260]: https://www.free-decompiler.com/flash/issues/260 -[#268]: https://www.free-decompiler.com/flash/issues/268 -[#272]: https://www.free-decompiler.com/flash/issues/272 -[#276]: https://www.free-decompiler.com/flash/issues/276 -[#220]: https://www.free-decompiler.com/flash/issues/220 -[#284]: https://www.free-decompiler.com/flash/issues/284 -[#232]: https://www.free-decompiler.com/flash/issues/232 -[#253]: https://www.free-decompiler.com/flash/issues/253 -[#137]: https://www.free-decompiler.com/flash/issues/137 -[#242]: https://www.free-decompiler.com/flash/issues/242 -[#244]: https://www.free-decompiler.com/flash/issues/244 -[#203]: https://www.free-decompiler.com/flash/issues/203 -[#225]: https://www.free-decompiler.com/flash/issues/225 -[#236]: https://www.free-decompiler.com/flash/issues/236 -[#245]: https://www.free-decompiler.com/flash/issues/245 -[#247]: https://www.free-decompiler.com/flash/issues/247 -[#248]: https://www.free-decompiler.com/flash/issues/248 -[#254]: https://www.free-decompiler.com/flash/issues/254 -[#255]: https://www.free-decompiler.com/flash/issues/255 -[#256]: https://www.free-decompiler.com/flash/issues/256 -[#241]: https://www.free-decompiler.com/flash/issues/241 -[#238]: https://www.free-decompiler.com/flash/issues/238 -[#239]: https://www.free-decompiler.com/flash/issues/239 -[#240]: https://www.free-decompiler.com/flash/issues/240 -[#237]: https://www.free-decompiler.com/flash/issues/237 -[#217]: https://www.free-decompiler.com/flash/issues/217 -[#219]: https://www.free-decompiler.com/flash/issues/219 -[#224]: https://www.free-decompiler.com/flash/issues/224 -[#121]: https://www.free-decompiler.com/flash/issues/121 -[#207]: https://www.free-decompiler.com/flash/issues/207 -[#151]: https://www.free-decompiler.com/flash/issues/151 -[#171]: https://www.free-decompiler.com/flash/issues/171 -[#206]: https://www.free-decompiler.com/flash/issues/206 -[#208]: https://www.free-decompiler.com/flash/issues/208 -[#209]: https://www.free-decompiler.com/flash/issues/209 -[#229]: https://www.free-decompiler.com/flash/issues/229 -[#213]: https://www.free-decompiler.com/flash/issues/213 -[#221]: https://www.free-decompiler.com/flash/issues/221 -[#226]: https://www.free-decompiler.com/flash/issues/226 -[#227]: https://www.free-decompiler.com/flash/issues/227 -[#230]: https://www.free-decompiler.com/flash/issues/230 -[#172]: https://www.free-decompiler.com/flash/issues/172 -[#174]: https://www.free-decompiler.com/flash/issues/174 -[#175]: https://www.free-decompiler.com/flash/issues/175 -[#212]: https://www.free-decompiler.com/flash/issues/212 -[#185]: https://www.free-decompiler.com/flash/issues/185 -[#186]: https://www.free-decompiler.com/flash/issues/186 -[#197]: https://www.free-decompiler.com/flash/issues/197 -[#216]: https://www.free-decompiler.com/flash/issues/216 -[#168]: https://www.free-decompiler.com/flash/issues/168 -[#176]: https://www.free-decompiler.com/flash/issues/176 -[#177]: https://www.free-decompiler.com/flash/issues/177 -[#202]: https://www.free-decompiler.com/flash/issues/202 -[#173]: https://www.free-decompiler.com/flash/issues/173 -[#190]: https://www.free-decompiler.com/flash/issues/190 -[#129]: https://www.free-decompiler.com/flash/issues/129 -[#153]: https://www.free-decompiler.com/flash/issues/153 -[#180]: https://www.free-decompiler.com/flash/issues/180 -[#136]: https://www.free-decompiler.com/flash/issues/136 -[#179]: https://www.free-decompiler.com/flash/issues/179 -[#144]: https://www.free-decompiler.com/flash/issues/144 -[#164]: https://www.free-decompiler.com/flash/issues/164 -[#167]: https://www.free-decompiler.com/flash/issues/167 -[#170]: https://www.free-decompiler.com/flash/issues/170 -[#178]: https://www.free-decompiler.com/flash/issues/178 -[#181]: https://www.free-decompiler.com/flash/issues/181 -[#182]: https://www.free-decompiler.com/flash/issues/182 -[#183]: https://www.free-decompiler.com/flash/issues/183 -[#184]: https://www.free-decompiler.com/flash/issues/184 -[#189]: https://www.free-decompiler.com/flash/issues/189 -[#191]: https://www.free-decompiler.com/flash/issues/191 -[#195]: https://www.free-decompiler.com/flash/issues/195 -[#196]: https://www.free-decompiler.com/flash/issues/196 -[#198]: https://www.free-decompiler.com/flash/issues/198 -[#200]: https://www.free-decompiler.com/flash/issues/200 -[#201]: https://www.free-decompiler.com/flash/issues/201 -[#166]: https://www.free-decompiler.com/flash/issues/166 -[#165]: https://www.free-decompiler.com/flash/issues/165 -[#63]: https://www.free-decompiler.com/flash/issues/63 -[#67]: https://www.free-decompiler.com/flash/issues/67 -[#117]: https://www.free-decompiler.com/flash/issues/117 -[#127]: https://www.free-decompiler.com/flash/issues/127 -[#134]: https://www.free-decompiler.com/flash/issues/134 -[#155]: https://www.free-decompiler.com/flash/issues/155 -[#142]: https://www.free-decompiler.com/flash/issues/142 -[#146]: https://www.free-decompiler.com/flash/issues/146 -[#130]: https://www.free-decompiler.com/flash/issues/130 -[#132]: https://www.free-decompiler.com/flash/issues/132 -[#145]: https://www.free-decompiler.com/flash/issues/145 -[#147]: https://www.free-decompiler.com/flash/issues/147 -[#148]: https://www.free-decompiler.com/flash/issues/148 -[#152]: https://www.free-decompiler.com/flash/issues/152 -[#156]: https://www.free-decompiler.com/flash/issues/156 -[#157]: https://www.free-decompiler.com/flash/issues/157 -[#158]: https://www.free-decompiler.com/flash/issues/158 -[#159]: https://www.free-decompiler.com/flash/issues/159 -[#160]: https://www.free-decompiler.com/flash/issues/160 -[#162]: https://www.free-decompiler.com/flash/issues/162 -[#163]: https://www.free-decompiler.com/flash/issues/163 -[#149]: https://www.free-decompiler.com/flash/issues/149 -[#150]: https://www.free-decompiler.com/flash/issues/150 -[#119]: https://www.free-decompiler.com/flash/issues/119 -[#101]: https://www.free-decompiler.com/flash/issues/101 -[#114]: https://www.free-decompiler.com/flash/issues/114 -[#135]: https://www.free-decompiler.com/flash/issues/135 -[#141]: https://www.free-decompiler.com/flash/issues/141 -[#102]: https://www.free-decompiler.com/flash/issues/102 -[#124]: https://www.free-decompiler.com/flash/issues/124 -[#128]: https://www.free-decompiler.com/flash/issues/128 -[#131]: https://www.free-decompiler.com/flash/issues/131 -[#104]: https://www.free-decompiler.com/flash/issues/104 -[#113]: https://www.free-decompiler.com/flash/issues/113 -[#133]: https://www.free-decompiler.com/flash/issues/133 -[#140]: https://www.free-decompiler.com/flash/issues/140 -[#108]: https://www.free-decompiler.com/flash/issues/108 -[#105]: https://www.free-decompiler.com/flash/issues/105 -[#109]: https://www.free-decompiler.com/flash/issues/109 -[#106]: https://www.free-decompiler.com/flash/issues/106 -[#107]: https://www.free-decompiler.com/flash/issues/107 -[#110]: https://www.free-decompiler.com/flash/issues/110 -[#103]: https://www.free-decompiler.com/flash/issues/103 -[#111]: https://www.free-decompiler.com/flash/issues/111 -[#96]: https://www.free-decompiler.com/flash/issues/96 -[#98]: https://www.free-decompiler.com/flash/issues/98 -[#99]: https://www.free-decompiler.com/flash/issues/99 -[#100]: https://www.free-decompiler.com/flash/issues/100 -[#85]: https://www.free-decompiler.com/flash/issues/85 -[#79]: https://www.free-decompiler.com/flash/issues/79 -[#92]: https://www.free-decompiler.com/flash/issues/92 -[#93]: https://www.free-decompiler.com/flash/issues/93 -[#94]: https://www.free-decompiler.com/flash/issues/94 -[#95]: https://www.free-decompiler.com/flash/issues/95 -[#86]: https://www.free-decompiler.com/flash/issues/86 -[#87]: https://www.free-decompiler.com/flash/issues/87 -[#88]: https://www.free-decompiler.com/flash/issues/88 -[#89]: https://www.free-decompiler.com/flash/issues/89 -[#82]: https://www.free-decompiler.com/flash/issues/82 -[#78]: https://www.free-decompiler.com/flash/issues/78 -[#81]: https://www.free-decompiler.com/flash/issues/81 -[#84]: https://www.free-decompiler.com/flash/issues/84 -[#83]: https://www.free-decompiler.com/flash/issues/83 -[#65]: https://www.free-decompiler.com/flash/issues/65 -[#48]: https://www.free-decompiler.com/flash/issues/48 -[#53]: https://www.free-decompiler.com/flash/issues/53 -[#66]: https://www.free-decompiler.com/flash/issues/66 -[#68]: https://www.free-decompiler.com/flash/issues/68 -[#69]: https://www.free-decompiler.com/flash/issues/69 -[#75]: https://www.free-decompiler.com/flash/issues/75 -[#73]: https://www.free-decompiler.com/flash/issues/73 -[#62]: https://www.free-decompiler.com/flash/issues/62 -[#72]: https://www.free-decompiler.com/flash/issues/72 -[#64]: https://www.free-decompiler.com/flash/issues/64 -[#38]: https://www.free-decompiler.com/flash/issues/38 -[#56]: https://www.free-decompiler.com/flash/issues/56 -[#57]: https://www.free-decompiler.com/flash/issues/57 -[#58]: https://www.free-decompiler.com/flash/issues/58 -[#45]: https://www.free-decompiler.com/flash/issues/45 -[#50]: https://www.free-decompiler.com/flash/issues/50 -[#51]: https://www.free-decompiler.com/flash/issues/51 -[#52]: https://www.free-decompiler.com/flash/issues/52 -[#47]: https://www.free-decompiler.com/flash/issues/47 -[#42]: https://www.free-decompiler.com/flash/issues/42 -[#39]: https://www.free-decompiler.com/flash/issues/39 -[#40]: https://www.free-decompiler.com/flash/issues/40 -[#44]: https://www.free-decompiler.com/flash/issues/44 -[#36]: https://www.free-decompiler.com/flash/issues/36 -[#43]: https://www.free-decompiler.com/flash/issues/43 -[#46]: https://www.free-decompiler.com/flash/issues/46 -[#3]: https://www.free-decompiler.com/flash/issues/3 -[#37]: https://www.free-decompiler.com/flash/issues/37 -[#34]: https://www.free-decompiler.com/flash/issues/34 -[#35]: https://www.free-decompiler.com/flash/issues/35 -[#32]: https://www.free-decompiler.com/flash/issues/32 +# Change Log +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added +- [#1240] AS search using multiple threads when parallel speedup is enabled +- [#1308] Search by all P-code files in AS3 +- [#1333] Exporting sprites as swf files +- [#1365] Allow to configure all types of configuration settings from command line +- [#1369] Allow zoom in sprite (and button) export + +### Fixed +- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter +- [#1343] AS 1/2 direct editation critical bug +- [#1348] Cannot properly export frame with cyrillic symbols to SVG +- [#1354] Various FLA export problem fixes +- [#1367] Raw edit conditional type fix. + +## [10.0.0] - 2016-12-24 +### Added +- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only +- optional AS3 direct editation with Flex SDK +- AS3 p-code editing - metadata read/write support +- AS3 p-code editing - end of the block command like in RABCDasm +- AS3 p-code editing - popup docs for more than instructions +- Debugger - New columns for variable details - scope, flags, trait +- Debugger - Add watch feature +- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases +- Deobfuscation Tool - Fix colliding trait/classes via toolbar command +- Auto rename identifiers option now fixes colliding trait/classes aswell +- [#1254] FLA export - detecting scripts on AS3 timeline +- [#907] FFDec Library JAR file has version inside it. +- [#1311], [#1313] actionScript source font size +- Display warning when library version and GUI version mismatch +- Changelog file +- [#1308] Search by all P-code files (AS 1/2 only) + +### Changed +- [#1189] AS3 - sort imports to have same order always +- GUI: AS3 P-code header show actual trait type and method type +- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" +- Set advance values button has confirm dialog with information +- [#1274] Linux package no longer requires Oracle Java only +- Library now packaged inside ZIP file + +### Fixed +- P-code docs formatting fix +- Export dialog - handling sprite and SWF frames correctly +- [#1275] debugger - show local variables fixes +- AS3 p-code editing - popup docs correctly displayed when label on line start +- [#1278] replacing DefineBits error +- [#1281] DefineFont 2/3 getting character advance value when replacing fix +- Set advance values button - Do not set advance if the char cannot be displayed in source font +- AS3 Goto declaration for single character names +- Identifier renaming for top level classes +- AS3 direct editation not correctly saving local register names +- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir +- Mac OS X installer fix (.pkg) +- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers +- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix +- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes +- [#1302] Callpropvoid instruction docblock not correct +- [#1309] recent files not getting updates +- [#1312] faster colliding usages finder +- [#1303] garbled text when exporting frame with text +- [#1314] user interface: button order +- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) +- [#1323] Audio playback fails + +## [9.0.0] - 2016-08-12 +### Added +- Instance metadata (AMF3) editing in PlaceObject4 +- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) +- [#1171] Export stroke scale to FLA +- FLA export - check invalid unicode characters +- [#1170] Extract from memory in commandline +- Reload one vs Reload all buttons +- ABC: Float and Float4 support +- AS3 p-code instruction documentation in GUI +- [#1241] Settings to show original bytes in hex view +- Search in dump view +- Jump to resources view from hex view +- Show warning on 32bit JRE + +### Changed +- [#1162] improved opening loaded SWF files +- Flash Viewer - skip frames when not on time +- [#1199] Automatically import alpha channel to JPEG3/4 from PNG + +### Fixed +- [#1151] Filters on texts fixed +- [#1128] Adding characters to font fixed (FontAlignZones not removed) +- [#1163] Clicking open->file makes program buggy +- Refresh tree after raw edit +- [#1172] Text double escape fix +- [#1174] Change language fix +- some AS2 deobfuscation fixes +- [#1183] Index out of bounds fix +- Implicit coersion on binary/unary opfix +- debugger: corect display variable values through getters +- Multiple XLF export fix +- [#1193] FLA export - text tag advance fix, one layer shape fix +- [#1193] FLA export - smoothed image detection, export raw JPEG data +- [#1193] Export space character to TTF correctly +- [#1200] Previous search text selected when quick find +- Flash viewer: aspect ratio on startup fix +- [#1198] Saving trait slot const value +- Zoom parameter commandline fixed +- [#1205] clipping fixed +- [#1194] Wrong sound effects in FLA +- [#1210] Frame Export fix +- Improved/fixed go to declaration in AS3 +- [#1217] PCode window not in same position as AS +- Hide memor search on non windows platform +- [#1244] Incorrect showing of NOP instructions +- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back +- [#1241] File content is different from hex view +- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont +- [#1236] won't open fixed +- [#1251] SWF not same after export XML and import back +- [#1265] Error during export +- [#1268] Font export - Using second glyph when two glyphs for one character found +- [#1268] GFX compacted font - fixed advance values on export + +## [8.0.1] - 2016-02-20 +### Changed +- FFDec debug tab in advanced settings moved to other tabs + +### Fixed +- [#1161] AS1/2 deobfuscation broken +- AS1/2 Simplify expressions fix + +## [8.0.0] - 2016-02-18 +### Added +- Debugger - AS1/2 Show registers +- Debugger - display variables in the tree structure +- Debugger - set value of variable +- Debugger - AS1/2 View constantpool +- Debugger - P-code level debugging for both AS1/2 and AS3 +- Basic SVG import for shapes +- Simplify expression setting +- [#1118] Loading characters through ImportAssets - show as readonly +- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 +- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) +- [#1121] Ability to save binary data by its name +- [#1052] Add object to existing frame +- Allow adding tag to main timeline +- AS1/2: Ctrl+click to declaration of variables, registers +- Allow trait specification in pcode import +- Icons for tag types in Dump view +- Show error message when a text tag is invalid (glyph index problem) +- AS3 direct editation - store local register names in debug info = allow to rename them + +### Changed +- New application icon and splash screen +- [#1145] AS3 better declaration type detection, better convert_x instruction handling +- Binary export - use .swf extension for swf files +- Better tree labels in generic tag editor (Raw edit) +- [#758] Allow zooming more than preview area in internal viewer + +### Fixed +- [#1096] FLA export - pretty print +- [#1104] AS1/2/3 Script Importat not working +- [#1107] Text Offset Incorrect fixed +- [#1106] New Shapes replace function fix +- [#1113] It takes too long to switch between rendered sprite +- [#1075] Lenght of DefineText in some cases +- [#1127] autoRenameIdentifiers is not supported in CLI mode +- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed +- [#1103] Foreach variables fixes +- AS3 Switch fixes +- Default clause position in switch +- [#1133] Incorrect frame order for nested sprite +- [#1135] Handle try "to" in p-code correctly +- Font wideOffsets,wideCodes fixed in DefineFont2/3 +- AS3: super method call +- [#1138] All exported videos are the same file which may be broken +- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages +- [#1137] running flashplayer(debugger) executable in Linux/MacOs +- [#1144] Command line argument renameInvalidIdentifiers +- [#1145] double not (!!) not removed +- [#1147] Sprite is exported incorrectly +- [#1148] handing end of stream exception in abc reader, loc exception +- [#1152] Font info tag modified tag was not set => saved swf was corrupt +- [#1154] Some 32bit JRE problems - program won't start +- [#1145] Correct precedence handling on binary operators +- [#116] not resolving unusual tags in DefineSprite + +## [7.1.2] - 2015-12-03 +### Fixed +- AS3 debugger start halt fix +- AS1/2 debugger fix on nondebug enabled SWFs +- AS1/2 debugger fix for functions +- Debug menu item enabled fix +- AS3 local reg index fix +- Advanced settings calendar +- AVM2 instructions in hex view +- [#1070] Incorrect switch decompilation +- [#1098] Import XML fix + +## [7.1.1] - 2015-11-23 +### Fixed +- Critical debugger fix - widelines + +## [7.1.0] - 2015-11-23 +### Added +- AS1/2 debugger +- Breakpoint/IP marker on line beginning + +### Changed +- Starting debugger on demand +- Installer message about playerglobal is only warning now + +### Fixed +- [#1033], [#1083] AS3 deobfuscation issues +- [#1091] AS 1/2 direct editation saving + +## [7.0.1] - 2015-11-18 +### Fixed +- Debugger: Adding breakpoint if script initializer not displayed + +## [7.0.0] - 2015-11-18 +### Added +- AS3 Debugger - breakpoints, stepping, show variables +- Faster AS3 direct editation + +### Changed +- Better Configuration of flashplayer paths + +### Removed +- Removed old "debugger" buttons +- Removed search from browsers cache - inactual code + +### Fixed +- Many AS3 direct editation related bugs +- [#1076] export fix + +## [6.1.1] - 2015-10-30 +### Fixed +- Deobfuscate AS3 metadata +- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix +- [#1063] AS3 direct edit - script initializer fix, generating method names +- XML export/import fixes +- [#1019] Namespace imports fix +- AVM2 code execution fix +- [#1016] AS3 direct editation fixes +- [#1010] AS2 direct editation - internal and override is not a reserved word +- [#1008] pushshort instruction diassembly +- [#1004] this/super can be AS1/2 variable +- [#933] AS3 allow numbers as object literal keys + +## [6.1.0] - 2015-10-26 +### Added +- Open other loaded SWFs during playback (useful for loaders) +- Export uncompressed data from dump tree +- Print performance statistics from commandline +- [#1062] Editing/displaying script initializers +- Enable debugging on SWF file (commandline) + +### Changed +- Faster syntax highlighting +- Better AS1/2 deobfuscator +- [#418] AS3 deobfuscator improved + +### Fixed +- AS call method fix (first parameter is "this") +- [#1047] open all scripts folders +- [#812] decompile fail +- [#1056] deltaY missing when adding a new StraightEdgeRecord +- [#1057] Editing as in editor results in package name moving +- [#991] GUI export +- [#689] Ignore Case not correctly toggled +- [#1060] reversed and/or detection in some cases +- [#1037] isXML call + +## [6.0.2] - 2015-09-12 +### Added +- AS3: Display and direct edit trait Metadata +- Allow to specify tag type on image or shape import +- Convert image tags from commandline +- [#489] Hex decode very large integers +- Add new tags without show empty folders +- Dependent characters in basic tag info +- [#1007] replace bytearray in raw editing +- Italian translation + +### Changed +- AS2 parser - add string to constant pool if there is not enough space +- [#1044] AS2 - order scripts by physical location, name by offset + +### Removed +- Deprecated commandline parameters removed + +### Fixed +- JNA problems on some JDKs +- [#947] Marklevels errors ignored 17a94b7 +- [#953] Mac application permission fix (maybe) +- [#954] IndexOutOfBounds fix +- [#950] AddTrait setting modified fix +- [#945] AS1/2 directeditation fix - member named as global function +- [#957] AS1/2 IndexOutOfBounds fix +- [#956] Invalid jump offsets warning +- [#968] Sprites export with wrong coloring +- [#978] case sensitivity of filenames +- [#955] AS2 decompilation problem +- Image alpha fixes +- [#966] Go to document class +- [#991] scripts exporting +- [#999] save as fla +- [#1000] image export for malformed JPEG3 tags +- [#1017] store alchemy opcodes with wrong order +- [#1030] stack overflow fix + +## [6.0.1] - 2015-07-06 +### Added +- Special §§ instructions marked as red +- [#949] Replace alpha channel from commandline +- AS3 deobfuscation from commandline +- Option to ignore FlashCC/Alchemy packages + +### Changed +- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements + +### Fixed +- AS1/2 deobfuscation fixed +- [#952] Not loading SWF without extension + +## [6.0.0] - 2015-07-04 +### Added +- New AS3 deobfuscation method +- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... +- Allow reload FFDec when no SWF is opened +- [#858] Allow to set compression type in header +- [#905] Show codec details for sound items +- Better alchemy/DomainMemory instruction handling +- Better obfuscated names handling +- [#920] Export instance name to SVG +- [#921] Export html DefineEditText to SVG +- Open multiple files with drag and drop +- Better "multi packs" handling (Alchemy) +- SWF version 29 to flash player 18 mapping +- ImportAssets2 sha1 field +- [#924] Sprites to image from commandline +- AS1/2 direct editation big numbers fix +- Allow to add FILTERs and SHAPERECORDs in generic tag editor +- Enable close all menu when no swf is selected +- Restore modified state even when something goes wrong +- Some old tags added + +### Changed +- AS decompilation highly improved +- Better &&, || handling +- DoABCDefine renamed to DoABC2 +- Separated Sprite export settings + +### Deprecated +- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) + +### Fixed +- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. +- Few menu issues +- [#895] Correct handling CMYK JPEG +- [#884] AS direct edit assignment +- [#899] Show script after AS3 direct editation +- Some AS1/2 parser problems +- [#903] FLA export - fix for missing fontname, lastframe +- [#855] AS3 direct edit - for..in variable declaration fix +- [#850] Constant initialization for same multinames +- [#832] AS3 direct edit - other ABCs resolving fix +- [#904] Cannot export images +- [#910] Missing instructions +- Opening not existent files on restoring last session +- [#922] Edit text leading +- Put image before shape on shape replace +- [#916] Replacing Shape corrupts SWF +- JRE setup parameters fixed +- [#938] Parallel speedup limit fix + +## [5.3.0] - 2015-05-25 +### Added +- Generic tag editor: improved table editing (import/export assets tags, etc.) + +### Changed +- Classic (nonribbon) UI improved - has same items as Ribbon UI +- Icons improvements +- Disabling menu items when work in progress + +### Fixed +- [#897] Classic UI fix + +## [5.2.0] - 2015-05-22 +### Added +- UI8 editbox for swf version in header panel +- Basic tag information panel + +### Changed +- AS1/2: Shown only the constant pool(s) in pcode editor +- Do not allow to chage tag tree selection, when current tag is under editing +- Faster bitmap export +- Using less memory when playing sounds +- Error message changed when the opened file is not swf + +### Fixed +- [#470] panels size after resizing from/to full screen +- [#877] A small glitch after search in AS +- [#878] small glitch after saving P-code or swf file +- [#470] glitch +- [#845] If frame consist 2 DoAction then it imports only first one +- pdf export (when no frame exists) +- text rendering (alpha channel was ignored), +- bmp export (paddings when width%2==1) +- [#883] -dumpSWF option does not work anymore +- [#882] Canvas export border size +- [#760] Internal viewer line linear gradient fill is not working +- [#887] error on export a special swf's P-CODE +- Extensions of exported images fixed + +## [5.1.0] - 2015-05-04 +### Added +- Allow to copy/move multiple tags, and dependencies +- [#842] For reconstruction if debug line info present +- [#841] Loop control for sound preview +- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button +- Scrollbar added to fontpanel +- SWF header editor +- Configure what object types to export in exportdialog + +### Changed +- Better gif exporter +- [#772]: closing loading dialog now cancels the loading of the swf +- [#762] export pcode with different extension + +### Fixed +- CRITICAL: Update System Bug causing updates not working +- [#862] AS3 asm: do not read beyond return/throw instructions +- [#865], [#613]: ribbon prefered width fix +- [#868] export path fix, allow to export buttons +- [#865] TagTree font size problem on high resolution screens +- [#713],[#807] Installer for 4.0+ fails to access Adobe Website +- [#728] Large fonts, [#857] add scroll on DefineFont3 + +## [5.0.2] - 2015-04-18 +### Added +- Reopen last session + +### Fixed +- ffdec.sh file line endings fixed + +## [5.0.1] - 2015-04-18 +### Fixed +- [#860]: Opening bundle (zip, swc, any binary file) files fixed + +## [5.0.0] - 2015-04-18 +### Added +- Color skins +- [#824] Mac OS X package +- [#809] Move left,right buttons for DefineTexts using translatex parameter +- [#805] Editor mode for DefineTexts +- [#825] Hotkeys for next/previous DefineText +- Export/Import symbol classes/export asset tags +- Frame export progress +- [#737] Single file script export +- Displaying changed AS3 scripts in GUI as bold +- Additional character info tags placed under character node +- New icons for other tags (metadata,fileattributes,setbackground,place/remove) +- Metadata tag editor + +### Changed +- Default color skin altered +- [#350] Allow only one running instance (Windows only, can be turned off) +- SWFs in zip based bundles (SWC for example) can be modified & saved +- Performace improvements +- More compact SWF-XML format +- Marking changed parentnodes as bold too + +### Fixed +- [#814] Exporting with scale problem +- [#816] P-code not shown after class initializer trait selection +- [#835] Static initializer improvements +- AS3 direct editing - local register decrement fix +- AS3 direct editing - maintain register order/names +- [#836] AS1/2/3 Correct expression precedence handling +- AS3 preincrement +- [#848] Correct toggling text switches +- [#817] AS1/2 for..in variable declaration +- [#849] Attribute member +- [#852] Ignore case for russian characters +- [#837] AS3 try..finally without catch + +## [4.1.1] - 2015-02-21 +### Added +- Export/Import XML added to ribbon menu +- Few GUI enhancements +- Undo tag changes context menu + +### Changed +- Java 8 now required + +### Removed +- Removed support for Java below 8 + +### Fixed +- [#811] export ActionScript + +## [4.1.0] - 2015-02-18 +### Added +- XML export/import +- confirmation dialogs added +- Add support for non-standard ABC-compressed SWF file +- [#745] Copy tag to another SWF +- [#803] Align text in DefineText + +### Changed +- performance improvements +- [#758] Zoom to fit is dynamic + +### Fixed +- [#738] Frame export +- [#742] Can't edit frames +- [#747] Move tag to adds extra frame +- [#749] Internal viewer Sprite fill color +- [#752] Sound is not stopped +- [#753] Reload swf +- [#759] Decompilation § symbol +- [#766] Can't extract all resources +- [#768] Super calls not being correctly recognized +- [#773] Scripts associated with ClipActions are not shown +- [#776] Stop working after setting "number of threads" to 0 +- [#783] No OK box when edited script or text was saved +- [#785] Text search. Remember last choise, Unicode case insensitive search +- [#787] Search in AS bug (when navigating to searched results) +- [#788] Add DefineCompactedFont Tag to gfx file +- [#790] Impossible to change letters under a font +- [#794] Font extraction fails sometimes +- [#798] Close file streams after export, exporting progress +- [#800] Unexpected deleted carrier return in DefineEditText +- Build fix on Linux +- Fis Startup Script for OpenJDK +- Other minor fixes + +## [4.0.5] - 2014-12-01 +### Added +- Escape control characters in strings, identifier names +- [#676] import text error messages / logging enhancement +- [#734] \xAB escapes, \uABCD escapes +- [#687] AS3 - allowing p-code comments on separate line +- [#709] Text Export to Single File with custom filename + +### Fixed +- [#732] Random freezing - JavactiveX library updated. +- [#730] Not working without ActiveX fix on Windows +- [#735] Automatic deobfuscation not correctly switched (required restart) + +## [4.0.4] - 2014-11-23 +### Changed +- better file cache, removing unneccessary temp files + +### Fixed +- obfuscated identifiers + +## [4.0.3] - 2014-11-23 +### Added +- [#722] Go to next/previous frame +- BMP file format export (images,frames,shapes) and import(images) + +### Fixed +- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type +- [#715] namespace resolving fix +- [#635],[#726] placing cursor inside Unicode characters + +## [4.0.2] - 2014-11-22 +### Added +- show frame number during play +- flashplayer - show controls for DefineSprite +- goto frame +- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design + +### Changed +- [#720]: edited shape tag is not marked as modified after replacing +- reorganized about dialog + +### Fixed +- [#719] null swf name in Proxy after cancelling rename dialog +- flashplayer - font display +- [#723]: saving swf with invalid referenced characters +- DefineCompactedFont paging +- [#288] Less memory usage during FLA export +- Corrected syntax hilighting for AS3 P-code + +## [4.0.1] - 2014-11-12 +### Fixed +- [#713] Installer can continue when no file can be downloaded +- Fixed shapes +- Checking for updates moved to separate thread + +## [4.0.0] - 2014-11-11 +### Added +- [#677] Zoom level in export settings +- internal viewer: linear/srgb gradients +- zooming buttons for flashplayer/internal viewer +- stroke scaling modes for canvas export +- create snapshot button +- [#389] Selecting font face on import +- [#701] Importing font from TTF file +- Reorganized font panel +- [#707] Debugger for logging messages +- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets +- [#685] Getting local register names from debug info can be disabled +- Adding new tags +- [#698] Allowing unicode letters in identifiers +- [#710] Information about deobfuscation in error comments +- One EXE for 32/64 bit, uses percentage memory. +- EXE SplashScreen +- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc +- Config setting to load inner SWFs automatically +- Replace shape with image + +### Changed +- better FlashPlayer integration using JavactiveX library +- Faster building tag tree +- Faster timeline construction +- [#711] Improved folder view - faster and with correct context menu + +### Fixed +- AS2 deobfuscation fixes +- AS2 loops fix +- [#681] Linux script fixes +- AS2 constructor name fix +- [#688] AS3 direct edit fixes +- [#691] AS3 p-code reading/saving fix +- AS3 direct edit -submethod name resolve fix +- frames to html canvas fix +- [#524] Mask layer not applied when nonempty script layer +- [#663] AS3 imports fixes +- Font export of dot character +- Font panel Yes button fixed +- [#702] GFX font reading fix +- Better obfuscated names handling +- [#539] for(each) in declaration fixes + +## [3.0.0] - 2014-09-20 +### Added +- Separated GUI (GPL) and library (now LGPL) +- Editing obfuscated identifiers via new paragraph(§) syntax +- Timeline View with preview and object hilighting +- Show GFX data in dump view +- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline +- Dump view - selecting node +- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption + +### Removed +- Removed deprecated commandline export formats (see --help) + +### Fixed +- FileAttributes tag reading fix +- [#649] GFX reading fixed +- [#656] Search in memory - 64 bit processes fix +- [#661] scripts not showing +- [#664] expanding fillStyles in raw edit +- [#668] add missing character fix, text tags fix +- [#674] texts hilighting initialization fix +- [#675] AS1/2 and/or operator compilation +- [#632] Locking file after opening (cannot save, etc.) +- [#651] Unnecessary removing expression killed in unreachable part +- [#678] Windows batch file paths fixed +- [#672] Disabling transparency slider on RGB only selection +- [#684] Sound streams inside DefineSprites, soundstream handling + +## [2.1.4] - 2014-08-23 +### Added +- AS1/2: New method for deobfuscation (can be switched off in settings) +- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters + +### Fixed +- [#647] Skipping FileAttributesTag with Parallel speedup on +- [#648] Export from embedded SWF + +## [2.1.3] - 2014-08-18 +### Added +- Show "save" and "saveas" in application menu +- Saving data range in dump view +- Show actions, abcdata in dumpview (context menu on the tree node) +- [#612] show color in hex format + +### Changed +- Faster dump info collecting (less memory) +- Allow selecting multiple files in open file dialog + +### Fixed +- [#623] ffdec.sh UNIX file endings, executable +- [#624] search in embedded swf files +- [#632] AS1/2 Unnecessary GetVariable before NewObject +- [#627] filter swf not working +- LZMA saving +- Export pcode&hex from commandline +- [#640] text import fixed, ignore BOM + +## [2.1.2] - 2014-07-20 +### Added +- Dump view +- Context menu: Jump to character, raw edit all tags +- Catalan translation +- SWF header display + +### Fixed +- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes +- [#592] AS3 Multiname resolving in P-code causing different bytecode +- [#585] AS3 moving popped values to output +- [#578] Always on top fixed on search results +- [#501] GotoFrame2 fix +- [#616] Frames to PNG export +- Export context menu +- [#559] Bitmap export opacity +- [#401] Placeobject 3/4 fix +- [#593] Return object newline +- [#594] Setting for curly brace + +## [2.1.1] - 2014-06-05 +### Added +- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers +- AS1/2 direct edit - global functions improvements +- AS1/2 negate operator, unary minus operator +- Opening SWFs in BinaryData tags +- AS1: Old string operators support, and/or, <> operator (editation) +- Statusbar loading animation improved +- [#579] AS3 direct editation - removing old class/methods from ABC +- remove character without the dependencies (remove only the place/remove tags) +- Running on system with no home directory +- [#428] PDF export (as images only) +- Commandline FlashPaper to PDF export +- Select frames / Characters commandline options + +### Changed +- [#337] quickfind visibility improved +- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) + +### Fixed +- [#576] AS1/2 direct editation: DefineFunction2 fix +- AS1/2 property fix +- AS1/2 typeof operator fix +- [#250] line spacing fix +- PlaceObject 3-4 className +- [#579] AS3 direct editation bugfixes - property resolving, integer values +- Morphshape canvas export fix +- Canvas export fix - closing path +- [#580] Rename invalid identifiers commandline fix +- [#510] JSyntaxPane find and replace dialog wrap around fix +- No more frame caching during export => memory saving (like [#583]) +- [#586] DropShadow filter fix +- Canvas export colortransform fix + +## [2.1.0 update 2] - 2014-05-08 +### Added +- AS3 decompilation/editation: Vector initializers +- AS3 direct editation: more classes in one file + +### Fixed +- [#574] DefineSprite editing fix +- Various AS3 direct editation fixes + +## [2.1.0 update 1] - 2014-05-05 +### Added +- Portugese-brasilian translation + +### Changed +- HTML Canvas export improvements + +### Fixed +- Various AS3 direct editation bugs, like [#570] + +## [2.1.0] - 2014-05-01 +### Added +- AS3 direct editation (Experimental!) +- Frames SVG Export +- Shape/MorphShape/Frames HTML 5 Canvas Export +- [#559] morphshapes as animated SVG +- [#563] Single file text export/import +- Font WOFF export +- Advanced settings dialog with tabs, config names, descriptions + +### Fixed +- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments +- Internal viewer: Filters fix + +## [2.0.1 update 2] - 2014-04-05 +### Fixed +- [#557] AS3 null namespace fix - p-code not working + +## [2.0.1 update 1] - 2014-04-04 +### Fixed +- [#556] Goto main class on startup fix +- [#557] Nullpointer fix (private namespaces) + +## [2.0.1] - 2014-04-03 +### Added +- Thumbnail view +- Font TTF export +- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) +- Expand all context menu +- Internal viewer: Button mouse move and click handling +- Playing sounds without flash player +- Internal viewer: Sounds on stage +- All sounds to WAV export +- Internal viewer: Showing texts, dynamic text border/fill +- [#504]: Unicode characters in JSyntaxPane +- Internal viewer: showing object under cursor +- Folder icons +- Sound/Image format on command line. +- Removing placeobject tags +- Removing frames +- AS: "elseif" statements +- Code formatting: space before parenthesis + +### Changed +- Single frames animated. + +### Fixed +- [#529] limit the number of displayed binaryData bytes +- [#538] Interface are sometimes dynamic +- [#537] super is sometime preceded by a dot +- [#540] Saving SWF changes very large static uint values +- [#387] Frames preview bugged +- AS:loop mismatch fix on parallel speedup +- [#552] Some timeout exceptions +- [#494] Fixed nightly builds updates + +## [2.0.0] - 2014-03-02 +### Added +- Generic tag tree editor +- Timeline view (stub only) +- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) +- [#513]: command line option to extract swf from binary file +- Configurable code formatting (Indentation + brace position) +- [#262] Export FLA: Font character ranges export +- Configurable checking for updates + +### Changed +- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes +- Improved commandline usage +- Automatic deobfuscation default value set to False (See News on webpages) +- Check for updates can be configured to inform about Nightly builds aswell + +### Deprecated +- Some commandline options are now deprecated, see --help + +### Fixed +- [#499] Cannot save via Proxy fixed +- [#504] font name reading fixed +- [#508] Support for OS without GUI +- [#305] Export FLA: empty sound layers +- [#312] Export FLA: Improved Shape/MorphShape fix +- [#503] Export FLA: Smoothing invalid shapes +- [#401] Invalid GFX tags in non GFX files +- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues +- [#361] FFDec icon is not visible on application start +- [#392] Video stream data fix +- [#516] AS3 P-code editor - Null name namespace handling + +## [1.8.1 update 1] - 2014-02-02 +### Fixed +- [#495] font embedding fix +- [#496] date format in new version dialog +- cosmetic changes + +## [1.8.1] - 2014-01-30 +### Added +- [#299] replace DefineBits images +- [#303] open folder with exported FLA +- [#324],[#346] SWC/zip/other binary file support +- [#371] detailed logging +- [#426] command line switch to rename identifiers +- [#457] clear recent opened files list +- [#458] save selected system font for swf fonts +- [#460] text editor: do not scroll to the end automatically +- [#462] font embedding dialog: show more sample characters +- [#463] global search in texts +- [#465] make font properties editable +- [#466] font preview + +### Changed +- [#369] new SVG and preview image rendering +- [#390] refresh font list without reloading the application +- [#453] update texts aftert adding new character to a font tag +- [#459] remember text panel splitter position +- [#461] font panel gui redesigned + +### Fixed +- [#451] dialog windows are not on the center of the screen +- [#454] Text syntax highlighting +- [#455],[#465] classic interface issues +- [#474] changeing language only available one time +- [#477] log window localization +- [#481] SVG export fix +- [#484] Oversized advance value after editing DefineText with DefineFont2 font +- [#493] missing search results + +## [1.8.0 update 1] - 2013-12-27 +### Added +- [#453] refresh (edit+save action) all texts button + +### Fixed +- Flash panel and font panel fixed + +## [1.8.0] - 2013-12-27 +### Added +- [#350] Allow to open multiple SWFs +- [#365] Filter fake SWFs during memory search +- [#366] Allow to sort the result list in memory search window +- [#429] Auto rename invalid identifiers setting +- [#447] Non-ribbon interface + +### Fixed +- [#354] Infinite decompilation fixed +- [#438] Case sensitive Command line arguments fixed +- [#436] Saving actionscript fixed +- [#446] Precedence issue fixed +- [#451] Dialogue window positions on a multi-monitor configuration fixed + +## [1.7.4 update 1] - 2013-12-05 +### Added +- [#426] Command line parameter for renaming invalid identifiers + +### Fixed +- [#427] Exception on linux fixed +- [#405], [#420], [#421] Some decompilation issues fixed +- [#430] Configuration default value problem fixed +- [#397], [#431] Deobfuscation stucked sometimes problem fixed + +## [1.7.4] - 2013-11-10 +### Added +- [#169] hexedit method body bytes +- [#335] last opened files +- [#404] Exporting P-code and Hex + console parameters +- [#407] register name is configurable +- Advanced settings +- Cancellable decompiling, exporting and searching + +### Fixed +- [#399], [#400] performance optimizations + +## [1.7.3 update 2] - 2013-09-29 +### Fixed +- [#398] AS3 p-code values with index 0 (null) + +## [1.7.3 update 1] - 2013-09-28 +### Added +- [#382] AS3: Adding new method + +## [1.7.3] - 2013-09-27 +### Added +- AS3: Multiname and namespace editing. +- [#382],[#396] AS3: Adding new trait (method/slot/const) +- AS3: Highlighting pair parenthesis/bracket +- AS3: Editing various new P-code parameters +- AS3: Highligting of trait names/types/parameters +- AS3: Global rename identifier for traits +- [#357] Playback controls for DefineSound +- [#391] AS3: Native methods mark +- [#395] Support for GFx ScaleForm SWFs (with fonts editing) +- Displaying fonts in internal viewer +- [#334], [#395] New Embed font dialog - selecting character ranges with preview +- Replacing characters in font (Yes/No to all dialog) + +### Changed +- AS3: New p-code syntax inspired by RABCDasm +- AS3: Editing whole trait in one textarea +- AS3: Removed messages about adding new constants +- AS3: Modified colors in editor +- [#301] Clearing error log causes icon to reset + +## [1.7.2 update 2] - 2013-09-13 +### Changed +- Updated translations + +### Fixed +- [#383] Firefox browser cache handling +- [#386] SWF resizing + +## [1.7.2 update 1] - 2013-09-11 +### Changed +- updated translations + +### Fixed +- [#383] Fixed cache loading when Firefox not used + +## [1.7.2] - 2013-09-11 +### Added +- [#357] Sounds Preview (Windows only) +- Movies preview (Windows only) +- Whole SWF display +- Preview controls (Play,Pause,Stop) +- Search SWFs in browsers cache (Firefox, Chrome) +- [#367] Memory search: Save selected files to disk +- Portugese translation + +### Changed +- [#380] Faster displaying DefineBitsLossless(2) images + +### Fixed +- [#292] Background color for Fonts preview fixed +- [#375] Replacing DefineBitsLossless image tag +- [#378] Refreshing language of JSyntaxPane +- MORPHGRADIENT reading fix + +## [1.7.1] - 2013-08-25 +### Added +- Loading SWFs from other processes memory (Windows only, sorry) +- [#325] Spanish translation +- [#210] Ukrainian and Dutch translation +- [#355] Chinese translation +- [#292] Change background color in SWF preview +- [#301] Clear errors log button +- [#313] Command line parameter for ignore all errors +- [#330] Protection agains adding same characters +- [#332] AS1/2 Showing elapsed times during commandline export +- [#344] Reload opened SWF +- Decompilation timeouts + +### Fixed +- [#295] Export FLA: wrong font +- [#297] Too bright titlebar button colors +- [#307] Export FLA: fixed empty textfields +- [#309] Export FLA: static text letter spacing detection +- [#310] Export FLA: Strokes +- [#311] Export FLA: BitmapFill +- [#327] AS1/2 Disassembly error stop application +- [#328] Fixed replacing images in DefineBitsJPEGX +- [#333] AS1/2 action reading +- [#336] Graph window is too small +- [#337] Quick search panel barely visible in same cases +- [#338] Expand/collapse icon in errorlog + +## [1.7.0 update 1] - 2013-08-11 +### Added +- [#315] German translation (partial) + +### Fixed +- [#123] Better context menu integration +- [#243],[#326] Better deobfuscation +- [#287] Typo in parallelSpeedUp parameter +- [#290],[#291] improved select language dialog +- [#294] minor GUI fixes +- [#298] Progressbar positition issues +- [#296] better export directory remembering +- [#314] Better deobfuscating filenames +- [#316] Readonly editor panes accepted Ctrl+Z/Y +- [#318] Export FLA: Shapes export fix +- [#319] AS3: Improved try..catch..finally decompilation +- [#323] AS3: Fixed default switch part + +## [1.7.0] - 2013-08-03 +### Added +- Listing contributors on about page +- [#223] AS2: Detecting uninitialized class fields +- [#250] Export FLA: Detecting static fields margin and spacing +- [#261] Export FLA: AS1/2 Frame scripts on first layer +- [#269] Commandline parameters for switching configuration +- [#274] AS3 Displaying elapsed time during commandline export +- [#275] AS3 Removing returnvoid as last statement + +### Changed +- New GUI based on Substance look and feel +- Menu changed to ribbon panel +- New round icon +- [#258] AS1/2: Improved chained assignments +- [#267] Starting program without choosing a file +- [#286] Saving to temp file first + +### Fixed +- [#123] Improved context menu integration on Windows +- [#233] Globally rename identifier deselects item in the tree +- [#235] Export FLA: Dynamic text fields coordinates +- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation +- [#251] Export FLA: Fixed filter strength rounding +- [#257] Export FLA: Text field color and size issues +- [#259] Fixed images alpha +- [#260] Export FLA: Labels position +- [#268] AS1/2 Function parameter shown as register instead loc +- [#272] AS3 Class initializer editation fix +- [#276] Fixed anonymous/inline functions handling +- [#220] Improved editing fonts / texts +- [#284],... other small fixes + +## [1.6.7] - 2013-07-20 +### Added +- [#220] Selection of font to import characters from +- [#232] Automatically add .swf extension in saveas dialog +- [#253] Abort/Retry/Ignore dialog on errors with file saving + +### Changed +- Improved translations + +### Fixed +- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation +- [#203] AS1/2 improved direct editing +- [#220] Adding characters to font fix +- [#225] AS1/2 object literal without name quotes +- [#236] AS1/2 Rename invalid identifiers issues +- [#245] AS3 Double space around "as" keyword +- [#247] AS3 Scrolling to main class at startup +- [#248] Memory issues (slowdown) +- [#254] Expressions as commands +- [#255] Windows 7 loading issues +- [#256] AS3 Object literal in return clause +- SWF text parsing (new lines) +- Labels size by locales + +## [1.6.6 update 2] - 2013-07-16 +### Fixed +- [#241] Program could not be started + +## [1.6.6 update 1] - 2013-07-16 +### Changed +- Better localization support + +### Fixed +- [#238],[#239],[#240] Fixed deobfuscation related problems +- [#237] Parentheses in AS1/2 add,subtract + +## [1.6.6] - 2013-07-16 +### Added +- [#217] Russian translation (focus) +- [#219] Hungarian translation (honfika) +- [#224] Swedish translation (Capasha) +- [#220] Adding characters to Fonts, displaying font info +- [#121] Search progress indication +- Error log + +### Changed +- [#203] Improved direct editing of AS1/2 +- [#207] Update SWF preview after switching external/internal flash player + +### Fixed +- [#151] Memory caching +- [#171] Skipping invalid AS3 code - newobject, newarray +- [#206] AS3 switch problem +- [#208] Renaming anonymous functions +- [#209],[#229] FLA export texts positions +- [#213],[#221] other decompilation issues +- [#225] AS object literal broken with ternar operator +- [#226] onClip indentation in FLA export +- [#227] gotoAndStop wrong frame index +- [#230] FLA export missing strokes +- Shapes viewer - missing strokes + +## [1.6.5 update 1] - 2013-07-09 +### Fixed +- [#151] Fixed caching in memory +- [#172] AS1/2 constant detection fix +- [#174] Renaming SymbolClass fix +- [#175],[#212] Fixed create directory issues on export +- [#185],[#186] on-clip actions indentation +- [#197] AS1/2 Missing storeregister before switch +- [#216] AS2 Fixed field order +- [#213] AS2 Fixed var fields quotes, switch nullpointer + +## [1.6.5] - 2013-07-08 +### Added +- Multilanguage support (currently English and Czech) +- [#151] Option for caching in memory instead of files +- [#168] Export selection in tree context menu +- [#176] option to show main class on startup +- [#177] saving window maximized state +- [#202] Removing tags other than DefineSprite + +### Changed +- [#173],[#190] Better renaming +- [#129], [#153] Better deobfuscation +- [#180] better error handling +- [#185],[#186] better displaying and exporting onclip actions + +### Fixed +- [#123] Better context menu integration +- [#136] FLA export - text sizes +- [#137],[#179] foreach issues (hasNext) +- [#144] Plain text export - empty line fix +- [#144] Not displaying texts +- [#164] DefineMorphShape issues +- [#167] Sprite tag appearing twice in export filename +- [#170] AS3 Try in loop +- [#172] loop detection fix +- [#175] use empty namespace +- [#178] AS subtract with negate +- [#181] AS3 missing quotes in object field +- [#182] missing namespace imports +- [#183] wrong stage size +- [#184] wrong video link +- [#189] Fixed three dots in tree +- [#191] Focalgradient fill fix +- [#195] AS2 issues +- [#196],[#197] switch issues +- [#198] DefineFont2 empty check +- [#200] DefineBitsLossLess fix +- [#201] Nonworking main window in Linux/MacOS (due toAssociation) + +## [1.6.4 update 1] - 2013-06-30 +### Fixed +- [#166] For loops detection +- [#165] AS3:direct lookupswitch support + +## [1.6.4] - 2013-06-30 +### Added +- [#63] Globally rename identifier +- [#67] Deobfuscation - rename identifiers according to type +- [#117] Drag & Drop SWF file to main window opens it +- [#123] Context menu integration on Windows +- [#127] Drag & Drop items from tree outside of application +- [#134] AS3: Find document class +- [#144] New lines in plain text export +- [#155] Remembering window size + splitbar positions between runs + +### Changed +- [#142] Using exportassets tag for tag names +- [#146] Display AS2 classes as tree of packages +- Better loop detection + +### Fixed +- [#129] AS1/2: not refreshing decompiled after rename +- [#130] Renaming SymbolClass identifiers too +- [#132] Renaming identifiers renamed strings +- [#136] Invalid text positions in FLA export +- [#145] Unicode support +- [#147] Escape filenames during obfuscated AS3 export +- [#148] Better package vs classname handling +- [#152] Empty if branches not inverted +- [#156] Better search handling (not freezing) +- [#157] AS3: Try statements in loops +- [#158] Graph repaint problem +- [#159] AS3: Improper rest parameter handling +- [#160] Commandline binaryData export +- [#162] DefineBitsJPEG2 image replacing +- [#163] Closing SWF file after loading +- other minor fixes + +## [1.6.3 update 2] - 2013-06-21 +### Changed +- [#149] Ifs with empty onTrue branches now inverted + +### Fixed +- [#150] Long line restriction removed + +## [1.6.3 update 1] - 2013-06-21 +### Fixed +- Memory limit decreased - FFDec was not working on 32 bit JVM. + +## [1.6.3] - 2013-06-20 +### Changed +- Parallel SpeedUp can be disabled in menu +- Better loop detection + +### Fixed +- [#119] Replacements file not found issue +- [#101] AS1/2 postincrement fix +- [#114],[#116],[#135],[#141] Fixed loop detection +- [#102] Fixed loop highlighting in export +- [#124] Flash player file path detection +- [#128] Improved imports +- [#135] CommentItem fix +- [#129],[#131] Better deobfuscation +- [#104] AS3 inc/dec local deobfuscation fix +- [#113],[#133],[#140] Memory limit increased + +## [1.6.2] - 2013-06-09 +### Added +- New loop detection algorithm + +### Changed +- [#108] - Faster loading and decompiling (Parallelism) +- Improved Internal flash viewer - shapes and morphshapes + +### Fixed +- Ternar operator fix +- [#102] Fixed Shapes to FLA export +- AS1/2 class detection fix +- [#105],[#104],[#101] fixed via new loop detection + +## [1.6.1] - 2013-06-03 +### Added +- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) +- [#109], [#106], [#107] some code improvements + +### Changed +- Application needs Java 1.7 to run + +### Removed +- Support for Java before 1.7 + +### Fixed +- [#102], [#110] AS3: Class highlight fix +- [#103] AS3:Fixed setslot handling +- [#104] AS3:Inc/Declocal nullpointer fix +- [#104] Multiple conditions in loop fix +- [#111] AS3:Object literal truncates line +- [#105] Better do while..break handling +- loop fixes + +## [1.6.0 update 1] - 2013-05-25 +### Added +- better FLA export + +### Fixed +- Many FLA export related bugs (like [#96]) +- [#98] Empty initializers do not cause empty lines now +- [#99] small logging issues +- [#100] large obfuscated code support + +## [1.6.0] - 2013-05-20 +### Added +- Export to FLA (Experimental BETA!) +- [#85] Search text in all ActionScripts +- SWF 11 support + +### Fixed +- [#79] ActionStartDrag constraint fix +- [#92] Inversed GreaterThan/LessThan +- [#93] AS1/2 fixed switch detection +- [#94] AS1/2 ActionTry - register cast fix +- [#95] Better script end handling + +## [1.5.2] - 2013-05-05 +### Added +- Improved automatic update system (changes log). +- Handling script traits as separate objects. +- [#86] open/save file dialog now accepts absolute paths in quotes + +### Fixed +- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 +- [#88] Fixed graph building +- [#89] AS3: bracket in property name lead to missing dot +- [#82] printgraph issue + +## [1.5.1 update 1] - 2013-05-04 +### Added +- Exporting texts via commandline +- Exporting all via commandline + +### Fixed +- DefineText2 color parameter +- AS3 GetSlot,SetSlot +- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... +- [#83] Fixed images transparency (zlib fix) +- Fixed graphparts with only jump in it (obfuscators) +- MORPHGRADIENT FIX +- Trasparency in DefineBitsJPEG3 and 4 +- Displaying shapes,morphshapes and sprites with bitmaps + +## [1.5.1] - 2013-05-01 +### Added +- Support for larger switches (10+cases) +- Editing text tags +- [#65] Exporting text tags +- Removing sprites +- Replacing images + +### Fixed +- DefineMorphShape2 fix +- [#79] - AS1/2 class detection fix, wrong printgraph fix +- [#78] - script trait slots fix + +## [1.5.0 update 1] - 2013-04-21 +### Fixed +- Automatic deobfuscation config defaulted to Off for AS1/2. + +## [1.5.0] - 2013-04-20 +### Added +- Direct editing of ActionScript 1/2 code (Beta) +- AS1/2: ifFrameLoaded support +- Automatic deobfuscation can be disabled in the menu +- [#48] - Decompile only specified class (commandline option) +- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices +- [#66] - Decompressing LZMA via commandline +- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) +- [#69] - DoABC vs DoABCDefine tags decompilation +- [#75] - Comma separator in while/do..while conditions, better if..return handling +- AS1/2: parsing NaN,Infinity value (Fix for [#73]) + +### Changed +- New icons (edit/save/cancel and main menu) + +### Fixed +- [#62] - Errors on not defined character tags (import tag) +- [#72] - First ternary operator expression was always true +- Fixed many deobfuscation related bugs + +## [1.4.3 update 2] - 2013-04-10 +### Fixed +- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) +- Try to fix lib/FlashPlayer.exe issue + +## [1.4.3 update 1] - 2013-04-06 +### Fixed +- [#38] - Indentation in const/var initializers, missing semicolon +- [#56] - Test output left in last release +- [#57] - Unknown instructions now do not log an exception (obfuscators do this) +- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. +- AS3 loops fix +- While true fix + +## [1.4.3] - 2013-04-04 +### Added +- AS1/2 Better deobfuscation + +### Fixed +- [#45] - Unicode characters fix +- [#50] - AS1/2 Function body deobfuscation fix +- [#51] - Displaying java class names instead of expressions +- [#52] - AS1/2 Better constantpool detection (deobfuscation) +- [#38] - AS3 indentation in initialized const/var value for newobject +- Fixed ImportAssets2 tag id + +## [1.4.2 update 1] - 2013-03-25 +### Fixed +- [#47] - wrong AS3 deobfuscation +- AS3 deobfuscation issues +- AS3 switch + +## [1.4.2] - 2013-03-24 +### Added +- [#42] - Displaying code as hex +- AS1/2: Renaming identifiers (deobfuscation) +- AS1/2,AS3: Better deobfuscation +- Storing configuration to user home +- Installer for Windows systems + +### Changed +- Graph button changed to icon. + +### Fixed +- [#39] - AS1/2 NewMethod..Pop fix +- [#40] - No logging + For..in..return decompilation +- [#44] - DefineFont2 fix +- [#36] - Multiname with invalid index +- [#43] - Ternary operator and more +- [#46] - Ifs with empty branches got ignored +- [#3] - Ignoring unknown opcodes +- Logging exceptions during export + +## [1.4.1] - 2013-03-10 +### Added +- Exporting sounds +- Better AS1/2 deobfuscation (disassembly & decompilation) + +### Fixed +- Exporting only first 1000 frames of the movie +- Decompiled code was not refreshed on AS1/2 changes +- Application no longer creates empty directories on export + +## [1.4.0 update 1] - 2013-03-04 +### Fixed +- [#37] - AS3: Reversed loop conditions + +## [1.4.0] - 2013-03-03 +### Added +- AS3: ignoring return void at the end of methods +- New icons - Silk icons +- AS3: Traits list sort button +- Better Graph display +- Frames view +- Exporting of movies (No audio) +- Some AS3 related Tests +- Homepage & Donate link in the menu + +### Changed +- Tree view instead of tabs +- AS1/2 and AS3 now share same decompiling method. + +### Fixed +- [#34] - Reversed loop conditions +- [#35] - Fixed unicode strings (Japanese) + +## [1.3.1] - 2013-02-23 +### Changed +- Flash player no longer uses SWT library + +### Fixed +- [#32] - AS2: Action255 bug +- [#31] - Erorrneous tags are now ignored +- DefineBitsLossLess 1&2 on 8bit colormapped images + +## [1.3.0] - 2013-02-17 +### Added +- Decompilation is more resistant to obfuscation +- Shapes SVG export +- AS2: Decompiling classes & interfaces +- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) +- AS3: Deobfuscation menu +- Graph button for displaying code flow Graph + +### Changed +- Complete new decompiling method in both AS1/2 and AS3 +- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". +- To edit source, Edit button must be pressed first (Due to click&go feature) + +### Fixed +- AS3: Method info editor fixed +- Edittext & Button displaying + +## [1.2.0] - 2013-01-19 +### Added +- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). +- Images display and export +- AS2: Exporting selection +- Progressbar during loading + +### Changed +- One merged window for AS1/2 and 3. +- Updated icons + +### Fixed +- AS3: xml attrib, switch in anonymous function (in AS2 too) + +## [1.1.0] - 2013-01-02 +### Added +- Checking for updates +- AS2: Exporting +- AS3: Decompiling whole scripts instead of just classes +- AS3: Exporting selected scripts +- AS3: Script search bar +- AS3: List of DoABCTags now has default "- all -" item +- AS3: Better imports, use namespaces +- AS3: XML related instructions +- AS3: Anonymous functions with names +- AS3: Better initialization of const values +- Logging exceptions to log.txt file + +### Fixed +- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops + +## [1.0.1] - 2012-12-26 +### Added +- AS3: Runtime namespace resolving +- AS3: Arguments variable +- AS3: Better recognizing Pre/Post Increments/Decrements +- AS3: Better declarations + +### Fixed +- AS3: Fixed static variables + +## [1.0.0] - 2012-12-24 +### Added +- Support for LZMA compressed files +- AS3: Detecting local register types for declaration. +- AS3: Displaying inline functions +- AS3: Last save/open dir is remembered +- AS3: Better usage detection for multinames +- AS3: Commandline arguments for exporting +- AS3: Better chained assignments +- AS2: FSCommand2 instruction support +- Proxy: Mimetype application/octet-stream added +- Added executable for Windows users. + +### Changed +- AS3: GUI - Constants tab moved to the top +- AS3: Deobfuscation is now optional, can be accessed via menu + +### Fixed +- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) +- Other minor fixes + +## [beta 1] - 2011-07-30 +### Added +- AS3: Automatic computing method body parameters (EXPERIMENTAL) +- AS3: Editing return type of methods +- AS3: Editing type and default value for variables/constants (Slot/Const traits) +- AS1/2: Few enhancements +- About dialog + +### Changed +- Gui: Updated Icons + +### Fixed +- AS 1/2: Fixed large bug causing Ifs to not decompile properly +- Proxy: Some minor fixes + +## [alpha 10] - 2011-07-13 +### Added +- AS3:Highlighting actual line +- AS3:Completing instruction names via Ctrl+Space +- AS3:Editing method parameters, method body parameters via tab panel +- AS3:ByteCode minor_version 17 supported - decimal datatypes +- AS3:Local variables and method parameters take name from debug information if present +- AS3:Automatic renaming of classes/methods when obfuscated names +- AS3:Better error messages (When cannot decompile obfuscated code) + +### Fixed +- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) +- AS3:Hilighting fixes +- AS3:Fixed decrement/increment statements decompilation +- AS3:Decompiler now adds variable declarations on the beginning of decompiled method +- AS3:Try/catch statements fixed when debug information present +- AS3:Fixed for each statements +- AS3:Other minor fixes + +## [alpha 9] - 2011-07-02 +### Added +- AS3: Added disassembling of some new types of instructions +- AS3: Exporting source as PCode + +### Fixed +- AS3: Many other bugfixes... + +## [alpha 8] - 2010-09-19 +### Added +- AS3: Editing exceptions +- AS3: Finding usage of multinames from constant table + +### Changed +- AS1/2: Better GUI +- AS1/2: Better decompiling of Ifs, For..in + +## [alpha 7] - 2010-09-04 +### Added +- Initial public release + +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 +[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 +[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 +[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 +[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 +[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 +[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 +[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 +[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 +[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 +[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 +[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 +[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 +[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 +[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 +[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 +[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 +[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 +[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 +[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 +[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 +[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 +[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 +[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 +[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 +[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 +[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 +[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 +[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 +[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 +[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 +[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 +[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 +[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 +[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 +[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 +[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 +[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 +[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 +[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 +[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 +[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 +[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 +[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 +[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 +[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 +[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 +[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 +[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 +[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 +[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 +[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 +[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 +[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 +[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 +[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 +[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 +[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 +[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 +[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 +[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 +[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 +[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 +[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 +[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 +[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 +[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 +[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 +[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 +[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 +[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 +[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 +[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 +[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 +[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 +[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 +[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 +[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 +[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 +[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 +[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 +[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 +[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 +[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 +[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 +[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 +[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 +[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 +[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 +[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 +[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 +[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 +[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1156]: https://www.free-decompiler.com/flash/issues/1156 +[#1171]: https://www.free-decompiler.com/flash/issues/1171 +[#1170]: https://www.free-decompiler.com/flash/issues/1170 +[#1241]: https://www.free-decompiler.com/flash/issues/1241 +[#1162]: https://www.free-decompiler.com/flash/issues/1162 +[#1199]: https://www.free-decompiler.com/flash/issues/1199 +[#1151]: https://www.free-decompiler.com/flash/issues/1151 +[#1128]: https://www.free-decompiler.com/flash/issues/1128 +[#1163]: https://www.free-decompiler.com/flash/issues/1163 +[#1172]: https://www.free-decompiler.com/flash/issues/1172 +[#1174]: https://www.free-decompiler.com/flash/issues/1174 +[#1183]: https://www.free-decompiler.com/flash/issues/1183 +[#1193]: https://www.free-decompiler.com/flash/issues/1193 +[#1200]: https://www.free-decompiler.com/flash/issues/1200 +[#1198]: https://www.free-decompiler.com/flash/issues/1198 +[#1205]: https://www.free-decompiler.com/flash/issues/1205 +[#1194]: https://www.free-decompiler.com/flash/issues/1194 +[#1210]: https://www.free-decompiler.com/flash/issues/1210 +[#1217]: https://www.free-decompiler.com/flash/issues/1217 +[#1244]: https://www.free-decompiler.com/flash/issues/1244 +[#1247]: https://www.free-decompiler.com/flash/issues/1247 +[#1236]: https://www.free-decompiler.com/flash/issues/1236 +[#1251]: https://www.free-decompiler.com/flash/issues/1251 +[#1265]: https://www.free-decompiler.com/flash/issues/1265 +[#1268]: https://www.free-decompiler.com/flash/issues/1268 +[#1161]: https://www.free-decompiler.com/flash/issues/1161 +[#1118]: https://www.free-decompiler.com/flash/issues/1118 +[#409]: https://www.free-decompiler.com/flash/issues/409 +[#1132]: https://www.free-decompiler.com/flash/issues/1132 +[#1134]: https://www.free-decompiler.com/flash/issues/1134 +[#1121]: https://www.free-decompiler.com/flash/issues/1121 +[#1052]: https://www.free-decompiler.com/flash/issues/1052 +[#1145]: https://www.free-decompiler.com/flash/issues/1145 +[#758]: https://www.free-decompiler.com/flash/issues/758 +[#1096]: https://www.free-decompiler.com/flash/issues/1096 +[#1104]: https://www.free-decompiler.com/flash/issues/1104 +[#1107]: https://www.free-decompiler.com/flash/issues/1107 +[#1106]: https://www.free-decompiler.com/flash/issues/1106 +[#1113]: https://www.free-decompiler.com/flash/issues/1113 +[#1075]: https://www.free-decompiler.com/flash/issues/1075 +[#1127]: https://www.free-decompiler.com/flash/issues/1127 +[#1103]: https://www.free-decompiler.com/flash/issues/1103 +[#1133]: https://www.free-decompiler.com/flash/issues/1133 +[#1135]: https://www.free-decompiler.com/flash/issues/1135 +[#1138]: https://www.free-decompiler.com/flash/issues/1138 +[#1139]: https://www.free-decompiler.com/flash/issues/1139 +[#930]: https://www.free-decompiler.com/flash/issues/930 +[#1137]: https://www.free-decompiler.com/flash/issues/1137 +[#1144]: https://www.free-decompiler.com/flash/issues/1144 +[#1147]: https://www.free-decompiler.com/flash/issues/1147 +[#1148]: https://www.free-decompiler.com/flash/issues/1148 +[#1152]: https://www.free-decompiler.com/flash/issues/1152 +[#1154]: https://www.free-decompiler.com/flash/issues/1154 +[#116]: https://www.free-decompiler.com/flash/issues/116 +[#1070]: https://www.free-decompiler.com/flash/issues/1070 +[#1098]: https://www.free-decompiler.com/flash/issues/1098 +[#1033]: https://www.free-decompiler.com/flash/issues/1033 +[#1083]: https://www.free-decompiler.com/flash/issues/1083 +[#1091]: https://www.free-decompiler.com/flash/issues/1091 +[#1076]: https://www.free-decompiler.com/flash/issues/1076 +[#1068]: https://www.free-decompiler.com/flash/issues/1068 +[#1063]: https://www.free-decompiler.com/flash/issues/1063 +[#1019]: https://www.free-decompiler.com/flash/issues/1019 +[#1016]: https://www.free-decompiler.com/flash/issues/1016 +[#1010]: https://www.free-decompiler.com/flash/issues/1010 +[#1008]: https://www.free-decompiler.com/flash/issues/1008 +[#1004]: https://www.free-decompiler.com/flash/issues/1004 +[#933]: https://www.free-decompiler.com/flash/issues/933 +[#1062]: https://www.free-decompiler.com/flash/issues/1062 +[#418]: https://www.free-decompiler.com/flash/issues/418 +[#1047]: https://www.free-decompiler.com/flash/issues/1047 +[#812]: https://www.free-decompiler.com/flash/issues/812 +[#1056]: https://www.free-decompiler.com/flash/issues/1056 +[#1057]: https://www.free-decompiler.com/flash/issues/1057 +[#991]: https://www.free-decompiler.com/flash/issues/991 +[#689]: https://www.free-decompiler.com/flash/issues/689 +[#1060]: https://www.free-decompiler.com/flash/issues/1060 +[#1037]: https://www.free-decompiler.com/flash/issues/1037 +[#489]: https://www.free-decompiler.com/flash/issues/489 +[#1007]: https://www.free-decompiler.com/flash/issues/1007 +[#1044]: https://www.free-decompiler.com/flash/issues/1044 +[#947]: https://www.free-decompiler.com/flash/issues/947 +[#953]: https://www.free-decompiler.com/flash/issues/953 +[#954]: https://www.free-decompiler.com/flash/issues/954 +[#950]: https://www.free-decompiler.com/flash/issues/950 +[#945]: https://www.free-decompiler.com/flash/issues/945 +[#957]: https://www.free-decompiler.com/flash/issues/957 +[#956]: https://www.free-decompiler.com/flash/issues/956 +[#968]: https://www.free-decompiler.com/flash/issues/968 +[#978]: https://www.free-decompiler.com/flash/issues/978 +[#955]: https://www.free-decompiler.com/flash/issues/955 +[#966]: https://www.free-decompiler.com/flash/issues/966 +[#999]: https://www.free-decompiler.com/flash/issues/999 +[#1000]: https://www.free-decompiler.com/flash/issues/1000 +[#1017]: https://www.free-decompiler.com/flash/issues/1017 +[#1030]: https://www.free-decompiler.com/flash/issues/1030 +[#949]: https://www.free-decompiler.com/flash/issues/949 +[#944]: https://www.free-decompiler.com/flash/issues/944 +[#939]: https://www.free-decompiler.com/flash/issues/939 +[#942]: https://www.free-decompiler.com/flash/issues/942 +[#952]: https://www.free-decompiler.com/flash/issues/952 +[#858]: https://www.free-decompiler.com/flash/issues/858 +[#905]: https://www.free-decompiler.com/flash/issues/905 +[#920]: https://www.free-decompiler.com/flash/issues/920 +[#921]: https://www.free-decompiler.com/flash/issues/921 +[#924]: https://www.free-decompiler.com/flash/issues/924 +[#895]: https://www.free-decompiler.com/flash/issues/895 +[#884]: https://www.free-decompiler.com/flash/issues/884 +[#899]: https://www.free-decompiler.com/flash/issues/899 +[#903]: https://www.free-decompiler.com/flash/issues/903 +[#855]: https://www.free-decompiler.com/flash/issues/855 +[#850]: https://www.free-decompiler.com/flash/issues/850 +[#832]: https://www.free-decompiler.com/flash/issues/832 +[#904]: https://www.free-decompiler.com/flash/issues/904 +[#910]: https://www.free-decompiler.com/flash/issues/910 +[#922]: https://www.free-decompiler.com/flash/issues/922 +[#916]: https://www.free-decompiler.com/flash/issues/916 +[#938]: https://www.free-decompiler.com/flash/issues/938 +[#897]: https://www.free-decompiler.com/flash/issues/897 +[#470]: https://www.free-decompiler.com/flash/issues/470 +[#877]: https://www.free-decompiler.com/flash/issues/877 +[#878]: https://www.free-decompiler.com/flash/issues/878 +[#845]: https://www.free-decompiler.com/flash/issues/845 +[#883]: https://www.free-decompiler.com/flash/issues/883 +[#882]: https://www.free-decompiler.com/flash/issues/882 +[#760]: https://www.free-decompiler.com/flash/issues/760 +[#887]: https://www.free-decompiler.com/flash/issues/887 +[#842]: https://www.free-decompiler.com/flash/issues/842 +[#841]: https://www.free-decompiler.com/flash/issues/841 +[#772]: https://www.free-decompiler.com/flash/issues/772 +[#762]: https://www.free-decompiler.com/flash/issues/762 +[#862]: https://www.free-decompiler.com/flash/issues/862 +[#865]: https://www.free-decompiler.com/flash/issues/865 +[#613]: https://www.free-decompiler.com/flash/issues/613 +[#868]: https://www.free-decompiler.com/flash/issues/868 +[#713]: https://www.free-decompiler.com/flash/issues/713 +[#807]: https://www.free-decompiler.com/flash/issues/807 +[#728]: https://www.free-decompiler.com/flash/issues/728 +[#857]: https://www.free-decompiler.com/flash/issues/857 +[#860]: https://www.free-decompiler.com/flash/issues/860 +[#824]: https://www.free-decompiler.com/flash/issues/824 +[#809]: https://www.free-decompiler.com/flash/issues/809 +[#805]: https://www.free-decompiler.com/flash/issues/805 +[#825]: https://www.free-decompiler.com/flash/issues/825 +[#737]: https://www.free-decompiler.com/flash/issues/737 +[#350]: https://www.free-decompiler.com/flash/issues/350 +[#814]: https://www.free-decompiler.com/flash/issues/814 +[#816]: https://www.free-decompiler.com/flash/issues/816 +[#835]: https://www.free-decompiler.com/flash/issues/835 +[#836]: https://www.free-decompiler.com/flash/issues/836 +[#848]: https://www.free-decompiler.com/flash/issues/848 +[#817]: https://www.free-decompiler.com/flash/issues/817 +[#849]: https://www.free-decompiler.com/flash/issues/849 +[#852]: https://www.free-decompiler.com/flash/issues/852 +[#837]: https://www.free-decompiler.com/flash/issues/837 +[#811]: https://www.free-decompiler.com/flash/issues/811 +[#745]: https://www.free-decompiler.com/flash/issues/745 +[#803]: https://www.free-decompiler.com/flash/issues/803 +[#738]: https://www.free-decompiler.com/flash/issues/738 +[#742]: https://www.free-decompiler.com/flash/issues/742 +[#747]: https://www.free-decompiler.com/flash/issues/747 +[#749]: https://www.free-decompiler.com/flash/issues/749 +[#752]: https://www.free-decompiler.com/flash/issues/752 +[#753]: https://www.free-decompiler.com/flash/issues/753 +[#759]: https://www.free-decompiler.com/flash/issues/759 +[#766]: https://www.free-decompiler.com/flash/issues/766 +[#768]: https://www.free-decompiler.com/flash/issues/768 +[#773]: https://www.free-decompiler.com/flash/issues/773 +[#776]: https://www.free-decompiler.com/flash/issues/776 +[#783]: https://www.free-decompiler.com/flash/issues/783 +[#785]: https://www.free-decompiler.com/flash/issues/785 +[#787]: https://www.free-decompiler.com/flash/issues/787 +[#788]: https://www.free-decompiler.com/flash/issues/788 +[#790]: https://www.free-decompiler.com/flash/issues/790 +[#794]: https://www.free-decompiler.com/flash/issues/794 +[#798]: https://www.free-decompiler.com/flash/issues/798 +[#800]: https://www.free-decompiler.com/flash/issues/800 +[#676]: https://www.free-decompiler.com/flash/issues/676 +[#734]: https://www.free-decompiler.com/flash/issues/734 +[#687]: https://www.free-decompiler.com/flash/issues/687 +[#709]: https://www.free-decompiler.com/flash/issues/709 +[#732]: https://www.free-decompiler.com/flash/issues/732 +[#730]: https://www.free-decompiler.com/flash/issues/730 +[#735]: https://www.free-decompiler.com/flash/issues/735 +[#722]: https://www.free-decompiler.com/flash/issues/722 +[#725]: https://www.free-decompiler.com/flash/issues/725 +[#715]: https://www.free-decompiler.com/flash/issues/715 +[#635]: https://www.free-decompiler.com/flash/issues/635 +[#726]: https://www.free-decompiler.com/flash/issues/726 +[#716]: https://www.free-decompiler.com/flash/issues/716 +[#717]: https://www.free-decompiler.com/flash/issues/717 +[#718]: https://www.free-decompiler.com/flash/issues/718 +[#720]: https://www.free-decompiler.com/flash/issues/720 +[#719]: https://www.free-decompiler.com/flash/issues/719 +[#723]: https://www.free-decompiler.com/flash/issues/723 +[#288]: https://www.free-decompiler.com/flash/issues/288 +[#677]: https://www.free-decompiler.com/flash/issues/677 +[#389]: https://www.free-decompiler.com/flash/issues/389 +[#701]: https://www.free-decompiler.com/flash/issues/701 +[#707]: https://www.free-decompiler.com/flash/issues/707 +[#302]: https://www.free-decompiler.com/flash/issues/302 +[#685]: https://www.free-decompiler.com/flash/issues/685 +[#698]: https://www.free-decompiler.com/flash/issues/698 +[#710]: https://www.free-decompiler.com/flash/issues/710 +[#711]: https://www.free-decompiler.com/flash/issues/711 +[#681]: https://www.free-decompiler.com/flash/issues/681 +[#688]: https://www.free-decompiler.com/flash/issues/688 +[#691]: https://www.free-decompiler.com/flash/issues/691 +[#524]: https://www.free-decompiler.com/flash/issues/524 +[#663]: https://www.free-decompiler.com/flash/issues/663 +[#702]: https://www.free-decompiler.com/flash/issues/702 +[#539]: https://www.free-decompiler.com/flash/issues/539 +[#650]: https://www.free-decompiler.com/flash/issues/650 +[#680]: https://www.free-decompiler.com/flash/issues/680 +[#649]: https://www.free-decompiler.com/flash/issues/649 +[#656]: https://www.free-decompiler.com/flash/issues/656 +[#661]: https://www.free-decompiler.com/flash/issues/661 +[#664]: https://www.free-decompiler.com/flash/issues/664 +[#668]: https://www.free-decompiler.com/flash/issues/668 +[#674]: https://www.free-decompiler.com/flash/issues/674 +[#675]: https://www.free-decompiler.com/flash/issues/675 +[#632]: https://www.free-decompiler.com/flash/issues/632 +[#651]: https://www.free-decompiler.com/flash/issues/651 +[#678]: https://www.free-decompiler.com/flash/issues/678 +[#672]: https://www.free-decompiler.com/flash/issues/672 +[#684]: https://www.free-decompiler.com/flash/issues/684 +[#647]: https://www.free-decompiler.com/flash/issues/647 +[#648]: https://www.free-decompiler.com/flash/issues/648 +[#612]: https://www.free-decompiler.com/flash/issues/612 +[#623]: https://www.free-decompiler.com/flash/issues/623 +[#624]: https://www.free-decompiler.com/flash/issues/624 +[#627]: https://www.free-decompiler.com/flash/issues/627 +[#640]: https://www.free-decompiler.com/flash/issues/640 +[#595]: https://www.free-decompiler.com/flash/issues/595 +[#592]: https://www.free-decompiler.com/flash/issues/592 +[#585]: https://www.free-decompiler.com/flash/issues/585 +[#578]: https://www.free-decompiler.com/flash/issues/578 +[#501]: https://www.free-decompiler.com/flash/issues/501 +[#616]: https://www.free-decompiler.com/flash/issues/616 +[#559]: https://www.free-decompiler.com/flash/issues/559 +[#401]: https://www.free-decompiler.com/flash/issues/401 +[#593]: https://www.free-decompiler.com/flash/issues/593 +[#594]: https://www.free-decompiler.com/flash/issues/594 +[#579]: https://www.free-decompiler.com/flash/issues/579 +[#428]: https://www.free-decompiler.com/flash/issues/428 +[#337]: https://www.free-decompiler.com/flash/issues/337 +[#584]: https://www.free-decompiler.com/flash/issues/584 +[#576]: https://www.free-decompiler.com/flash/issues/576 +[#250]: https://www.free-decompiler.com/flash/issues/250 +[#580]: https://www.free-decompiler.com/flash/issues/580 +[#510]: https://www.free-decompiler.com/flash/issues/510 +[#583]: https://www.free-decompiler.com/flash/issues/583 +[#586]: https://www.free-decompiler.com/flash/issues/586 +[#574]: https://www.free-decompiler.com/flash/issues/574 +[#570]: https://www.free-decompiler.com/flash/issues/570 +[#563]: https://www.free-decompiler.com/flash/issues/563 +[#561]: https://www.free-decompiler.com/flash/issues/561 +[#509]: https://www.free-decompiler.com/flash/issues/509 +[#433]: https://www.free-decompiler.com/flash/issues/433 +[#557]: https://www.free-decompiler.com/flash/issues/557 +[#556]: https://www.free-decompiler.com/flash/issues/556 +[#504]: https://www.free-decompiler.com/flash/issues/504 +[#529]: https://www.free-decompiler.com/flash/issues/529 +[#538]: https://www.free-decompiler.com/flash/issues/538 +[#537]: https://www.free-decompiler.com/flash/issues/537 +[#540]: https://www.free-decompiler.com/flash/issues/540 +[#387]: https://www.free-decompiler.com/flash/issues/387 +[#552]: https://www.free-decompiler.com/flash/issues/552 +[#494]: https://www.free-decompiler.com/flash/issues/494 +[#513]: https://www.free-decompiler.com/flash/issues/513 +[#262]: https://www.free-decompiler.com/flash/issues/262 +[#499]: https://www.free-decompiler.com/flash/issues/499 +[#508]: https://www.free-decompiler.com/flash/issues/508 +[#305]: https://www.free-decompiler.com/flash/issues/305 +[#312]: https://www.free-decompiler.com/flash/issues/312 +[#503]: https://www.free-decompiler.com/flash/issues/503 +[#304]: https://www.free-decompiler.com/flash/issues/304 +[#306]: https://www.free-decompiler.com/flash/issues/306 +[#507]: https://www.free-decompiler.com/flash/issues/507 +[#424]: https://www.free-decompiler.com/flash/issues/424 +[#425]: https://www.free-decompiler.com/flash/issues/425 +[#478]: https://www.free-decompiler.com/flash/issues/478 +[#485]: https://www.free-decompiler.com/flash/issues/485 +[#517]: https://www.free-decompiler.com/flash/issues/517 +[#518]: https://www.free-decompiler.com/flash/issues/518 +[#361]: https://www.free-decompiler.com/flash/issues/361 +[#392]: https://www.free-decompiler.com/flash/issues/392 +[#516]: https://www.free-decompiler.com/flash/issues/516 +[#495]: https://www.free-decompiler.com/flash/issues/495 +[#496]: https://www.free-decompiler.com/flash/issues/496 +[#299]: https://www.free-decompiler.com/flash/issues/299 +[#303]: https://www.free-decompiler.com/flash/issues/303 +[#324]: https://www.free-decompiler.com/flash/issues/324 +[#346]: https://www.free-decompiler.com/flash/issues/346 +[#371]: https://www.free-decompiler.com/flash/issues/371 +[#426]: https://www.free-decompiler.com/flash/issues/426 +[#457]: https://www.free-decompiler.com/flash/issues/457 +[#458]: https://www.free-decompiler.com/flash/issues/458 +[#460]: https://www.free-decompiler.com/flash/issues/460 +[#462]: https://www.free-decompiler.com/flash/issues/462 +[#463]: https://www.free-decompiler.com/flash/issues/463 +[#465]: https://www.free-decompiler.com/flash/issues/465 +[#466]: https://www.free-decompiler.com/flash/issues/466 +[#369]: https://www.free-decompiler.com/flash/issues/369 +[#390]: https://www.free-decompiler.com/flash/issues/390 +[#453]: https://www.free-decompiler.com/flash/issues/453 +[#459]: https://www.free-decompiler.com/flash/issues/459 +[#461]: https://www.free-decompiler.com/flash/issues/461 +[#451]: https://www.free-decompiler.com/flash/issues/451 +[#454]: https://www.free-decompiler.com/flash/issues/454 +[#455]: https://www.free-decompiler.com/flash/issues/455 +[#474]: https://www.free-decompiler.com/flash/issues/474 +[#477]: https://www.free-decompiler.com/flash/issues/477 +[#481]: https://www.free-decompiler.com/flash/issues/481 +[#484]: https://www.free-decompiler.com/flash/issues/484 +[#493]: https://www.free-decompiler.com/flash/issues/493 +[#365]: https://www.free-decompiler.com/flash/issues/365 +[#366]: https://www.free-decompiler.com/flash/issues/366 +[#429]: https://www.free-decompiler.com/flash/issues/429 +[#447]: https://www.free-decompiler.com/flash/issues/447 +[#354]: https://www.free-decompiler.com/flash/issues/354 +[#438]: https://www.free-decompiler.com/flash/issues/438 +[#436]: https://www.free-decompiler.com/flash/issues/436 +[#446]: https://www.free-decompiler.com/flash/issues/446 +[#427]: https://www.free-decompiler.com/flash/issues/427 +[#405]: https://www.free-decompiler.com/flash/issues/405 +[#420]: https://www.free-decompiler.com/flash/issues/420 +[#421]: https://www.free-decompiler.com/flash/issues/421 +[#430]: https://www.free-decompiler.com/flash/issues/430 +[#397]: https://www.free-decompiler.com/flash/issues/397 +[#431]: https://www.free-decompiler.com/flash/issues/431 +[#169]: https://www.free-decompiler.com/flash/issues/169 +[#335]: https://www.free-decompiler.com/flash/issues/335 +[#404]: https://www.free-decompiler.com/flash/issues/404 +[#407]: https://www.free-decompiler.com/flash/issues/407 +[#399]: https://www.free-decompiler.com/flash/issues/399 +[#400]: https://www.free-decompiler.com/flash/issues/400 +[#398]: https://www.free-decompiler.com/flash/issues/398 +[#382]: https://www.free-decompiler.com/flash/issues/382 +[#396]: https://www.free-decompiler.com/flash/issues/396 +[#357]: https://www.free-decompiler.com/flash/issues/357 +[#391]: https://www.free-decompiler.com/flash/issues/391 +[#395]: https://www.free-decompiler.com/flash/issues/395 +[#334]: https://www.free-decompiler.com/flash/issues/334 +[#301]: https://www.free-decompiler.com/flash/issues/301 +[#383]: https://www.free-decompiler.com/flash/issues/383 +[#386]: https://www.free-decompiler.com/flash/issues/386 +[#367]: https://www.free-decompiler.com/flash/issues/367 +[#380]: https://www.free-decompiler.com/flash/issues/380 +[#292]: https://www.free-decompiler.com/flash/issues/292 +[#375]: https://www.free-decompiler.com/flash/issues/375 +[#378]: https://www.free-decompiler.com/flash/issues/378 +[#325]: https://www.free-decompiler.com/flash/issues/325 +[#210]: https://www.free-decompiler.com/flash/issues/210 +[#355]: https://www.free-decompiler.com/flash/issues/355 +[#313]: https://www.free-decompiler.com/flash/issues/313 +[#330]: https://www.free-decompiler.com/flash/issues/330 +[#332]: https://www.free-decompiler.com/flash/issues/332 +[#344]: https://www.free-decompiler.com/flash/issues/344 +[#295]: https://www.free-decompiler.com/flash/issues/295 +[#297]: https://www.free-decompiler.com/flash/issues/297 +[#307]: https://www.free-decompiler.com/flash/issues/307 +[#309]: https://www.free-decompiler.com/flash/issues/309 +[#310]: https://www.free-decompiler.com/flash/issues/310 +[#311]: https://www.free-decompiler.com/flash/issues/311 +[#327]: https://www.free-decompiler.com/flash/issues/327 +[#328]: https://www.free-decompiler.com/flash/issues/328 +[#333]: https://www.free-decompiler.com/flash/issues/333 +[#336]: https://www.free-decompiler.com/flash/issues/336 +[#338]: https://www.free-decompiler.com/flash/issues/338 +[#315]: https://www.free-decompiler.com/flash/issues/315 +[#123]: https://www.free-decompiler.com/flash/issues/123 +[#243]: https://www.free-decompiler.com/flash/issues/243 +[#326]: https://www.free-decompiler.com/flash/issues/326 +[#287]: https://www.free-decompiler.com/flash/issues/287 +[#290]: https://www.free-decompiler.com/flash/issues/290 +[#291]: https://www.free-decompiler.com/flash/issues/291 +[#294]: https://www.free-decompiler.com/flash/issues/294 +[#298]: https://www.free-decompiler.com/flash/issues/298 +[#296]: https://www.free-decompiler.com/flash/issues/296 +[#314]: https://www.free-decompiler.com/flash/issues/314 +[#316]: https://www.free-decompiler.com/flash/issues/316 +[#318]: https://www.free-decompiler.com/flash/issues/318 +[#319]: https://www.free-decompiler.com/flash/issues/319 +[#323]: https://www.free-decompiler.com/flash/issues/323 +[#223]: https://www.free-decompiler.com/flash/issues/223 +[#261]: https://www.free-decompiler.com/flash/issues/261 +[#269]: https://www.free-decompiler.com/flash/issues/269 +[#274]: https://www.free-decompiler.com/flash/issues/274 +[#275]: https://www.free-decompiler.com/flash/issues/275 +[#258]: https://www.free-decompiler.com/flash/issues/258 +[#267]: https://www.free-decompiler.com/flash/issues/267 +[#286]: https://www.free-decompiler.com/flash/issues/286 +[#233]: https://www.free-decompiler.com/flash/issues/233 +[#235]: https://www.free-decompiler.com/flash/issues/235 +[#263]: https://www.free-decompiler.com/flash/issues/263 +[#264]: https://www.free-decompiler.com/flash/issues/264 +[#265]: https://www.free-decompiler.com/flash/issues/265 +[#266]: https://www.free-decompiler.com/flash/issues/266 +[#281]: https://www.free-decompiler.com/flash/issues/281 +[#251]: https://www.free-decompiler.com/flash/issues/251 +[#257]: https://www.free-decompiler.com/flash/issues/257 +[#259]: https://www.free-decompiler.com/flash/issues/259 +[#260]: https://www.free-decompiler.com/flash/issues/260 +[#268]: https://www.free-decompiler.com/flash/issues/268 +[#272]: https://www.free-decompiler.com/flash/issues/272 +[#276]: https://www.free-decompiler.com/flash/issues/276 +[#220]: https://www.free-decompiler.com/flash/issues/220 +[#284]: https://www.free-decompiler.com/flash/issues/284 +[#232]: https://www.free-decompiler.com/flash/issues/232 +[#253]: https://www.free-decompiler.com/flash/issues/253 +[#137]: https://www.free-decompiler.com/flash/issues/137 +[#242]: https://www.free-decompiler.com/flash/issues/242 +[#244]: https://www.free-decompiler.com/flash/issues/244 +[#203]: https://www.free-decompiler.com/flash/issues/203 +[#225]: https://www.free-decompiler.com/flash/issues/225 +[#236]: https://www.free-decompiler.com/flash/issues/236 +[#245]: https://www.free-decompiler.com/flash/issues/245 +[#247]: https://www.free-decompiler.com/flash/issues/247 +[#248]: https://www.free-decompiler.com/flash/issues/248 +[#254]: https://www.free-decompiler.com/flash/issues/254 +[#255]: https://www.free-decompiler.com/flash/issues/255 +[#256]: https://www.free-decompiler.com/flash/issues/256 +[#241]: https://www.free-decompiler.com/flash/issues/241 +[#238]: https://www.free-decompiler.com/flash/issues/238 +[#239]: https://www.free-decompiler.com/flash/issues/239 +[#240]: https://www.free-decompiler.com/flash/issues/240 +[#237]: https://www.free-decompiler.com/flash/issues/237 +[#217]: https://www.free-decompiler.com/flash/issues/217 +[#219]: https://www.free-decompiler.com/flash/issues/219 +[#224]: https://www.free-decompiler.com/flash/issues/224 +[#121]: https://www.free-decompiler.com/flash/issues/121 +[#207]: https://www.free-decompiler.com/flash/issues/207 +[#151]: https://www.free-decompiler.com/flash/issues/151 +[#171]: https://www.free-decompiler.com/flash/issues/171 +[#206]: https://www.free-decompiler.com/flash/issues/206 +[#208]: https://www.free-decompiler.com/flash/issues/208 +[#209]: https://www.free-decompiler.com/flash/issues/209 +[#229]: https://www.free-decompiler.com/flash/issues/229 +[#213]: https://www.free-decompiler.com/flash/issues/213 +[#221]: https://www.free-decompiler.com/flash/issues/221 +[#226]: https://www.free-decompiler.com/flash/issues/226 +[#227]: https://www.free-decompiler.com/flash/issues/227 +[#230]: https://www.free-decompiler.com/flash/issues/230 +[#172]: https://www.free-decompiler.com/flash/issues/172 +[#174]: https://www.free-decompiler.com/flash/issues/174 +[#175]: https://www.free-decompiler.com/flash/issues/175 +[#212]: https://www.free-decompiler.com/flash/issues/212 +[#185]: https://www.free-decompiler.com/flash/issues/185 +[#186]: https://www.free-decompiler.com/flash/issues/186 +[#197]: https://www.free-decompiler.com/flash/issues/197 +[#216]: https://www.free-decompiler.com/flash/issues/216 +[#168]: https://www.free-decompiler.com/flash/issues/168 +[#176]: https://www.free-decompiler.com/flash/issues/176 +[#177]: https://www.free-decompiler.com/flash/issues/177 +[#202]: https://www.free-decompiler.com/flash/issues/202 +[#173]: https://www.free-decompiler.com/flash/issues/173 +[#190]: https://www.free-decompiler.com/flash/issues/190 +[#129]: https://www.free-decompiler.com/flash/issues/129 +[#153]: https://www.free-decompiler.com/flash/issues/153 +[#180]: https://www.free-decompiler.com/flash/issues/180 +[#136]: https://www.free-decompiler.com/flash/issues/136 +[#179]: https://www.free-decompiler.com/flash/issues/179 +[#144]: https://www.free-decompiler.com/flash/issues/144 +[#164]: https://www.free-decompiler.com/flash/issues/164 +[#167]: https://www.free-decompiler.com/flash/issues/167 +[#170]: https://www.free-decompiler.com/flash/issues/170 +[#178]: https://www.free-decompiler.com/flash/issues/178 +[#181]: https://www.free-decompiler.com/flash/issues/181 +[#182]: https://www.free-decompiler.com/flash/issues/182 +[#183]: https://www.free-decompiler.com/flash/issues/183 +[#184]: https://www.free-decompiler.com/flash/issues/184 +[#189]: https://www.free-decompiler.com/flash/issues/189 +[#191]: https://www.free-decompiler.com/flash/issues/191 +[#195]: https://www.free-decompiler.com/flash/issues/195 +[#196]: https://www.free-decompiler.com/flash/issues/196 +[#198]: https://www.free-decompiler.com/flash/issues/198 +[#200]: https://www.free-decompiler.com/flash/issues/200 +[#201]: https://www.free-decompiler.com/flash/issues/201 +[#166]: https://www.free-decompiler.com/flash/issues/166 +[#165]: https://www.free-decompiler.com/flash/issues/165 +[#63]: https://www.free-decompiler.com/flash/issues/63 +[#67]: https://www.free-decompiler.com/flash/issues/67 +[#117]: https://www.free-decompiler.com/flash/issues/117 +[#127]: https://www.free-decompiler.com/flash/issues/127 +[#134]: https://www.free-decompiler.com/flash/issues/134 +[#155]: https://www.free-decompiler.com/flash/issues/155 +[#142]: https://www.free-decompiler.com/flash/issues/142 +[#146]: https://www.free-decompiler.com/flash/issues/146 +[#130]: https://www.free-decompiler.com/flash/issues/130 +[#132]: https://www.free-decompiler.com/flash/issues/132 +[#145]: https://www.free-decompiler.com/flash/issues/145 +[#147]: https://www.free-decompiler.com/flash/issues/147 +[#148]: https://www.free-decompiler.com/flash/issues/148 +[#152]: https://www.free-decompiler.com/flash/issues/152 +[#156]: https://www.free-decompiler.com/flash/issues/156 +[#157]: https://www.free-decompiler.com/flash/issues/157 +[#158]: https://www.free-decompiler.com/flash/issues/158 +[#159]: https://www.free-decompiler.com/flash/issues/159 +[#160]: https://www.free-decompiler.com/flash/issues/160 +[#162]: https://www.free-decompiler.com/flash/issues/162 +[#163]: https://www.free-decompiler.com/flash/issues/163 +[#149]: https://www.free-decompiler.com/flash/issues/149 +[#150]: https://www.free-decompiler.com/flash/issues/150 +[#119]: https://www.free-decompiler.com/flash/issues/119 +[#101]: https://www.free-decompiler.com/flash/issues/101 +[#114]: https://www.free-decompiler.com/flash/issues/114 +[#135]: https://www.free-decompiler.com/flash/issues/135 +[#141]: https://www.free-decompiler.com/flash/issues/141 +[#102]: https://www.free-decompiler.com/flash/issues/102 +[#124]: https://www.free-decompiler.com/flash/issues/124 +[#128]: https://www.free-decompiler.com/flash/issues/128 +[#131]: https://www.free-decompiler.com/flash/issues/131 +[#104]: https://www.free-decompiler.com/flash/issues/104 +[#113]: https://www.free-decompiler.com/flash/issues/113 +[#133]: https://www.free-decompiler.com/flash/issues/133 +[#140]: https://www.free-decompiler.com/flash/issues/140 +[#108]: https://www.free-decompiler.com/flash/issues/108 +[#105]: https://www.free-decompiler.com/flash/issues/105 +[#109]: https://www.free-decompiler.com/flash/issues/109 +[#106]: https://www.free-decompiler.com/flash/issues/106 +[#107]: https://www.free-decompiler.com/flash/issues/107 +[#110]: https://www.free-decompiler.com/flash/issues/110 +[#103]: https://www.free-decompiler.com/flash/issues/103 +[#111]: https://www.free-decompiler.com/flash/issues/111 +[#96]: https://www.free-decompiler.com/flash/issues/96 +[#98]: https://www.free-decompiler.com/flash/issues/98 +[#99]: https://www.free-decompiler.com/flash/issues/99 +[#100]: https://www.free-decompiler.com/flash/issues/100 +[#85]: https://www.free-decompiler.com/flash/issues/85 +[#79]: https://www.free-decompiler.com/flash/issues/79 +[#92]: https://www.free-decompiler.com/flash/issues/92 +[#93]: https://www.free-decompiler.com/flash/issues/93 +[#94]: https://www.free-decompiler.com/flash/issues/94 +[#95]: https://www.free-decompiler.com/flash/issues/95 +[#86]: https://www.free-decompiler.com/flash/issues/86 +[#87]: https://www.free-decompiler.com/flash/issues/87 +[#88]: https://www.free-decompiler.com/flash/issues/88 +[#89]: https://www.free-decompiler.com/flash/issues/89 +[#82]: https://www.free-decompiler.com/flash/issues/82 +[#78]: https://www.free-decompiler.com/flash/issues/78 +[#81]: https://www.free-decompiler.com/flash/issues/81 +[#84]: https://www.free-decompiler.com/flash/issues/84 +[#83]: https://www.free-decompiler.com/flash/issues/83 +[#65]: https://www.free-decompiler.com/flash/issues/65 +[#48]: https://www.free-decompiler.com/flash/issues/48 +[#53]: https://www.free-decompiler.com/flash/issues/53 +[#66]: https://www.free-decompiler.com/flash/issues/66 +[#68]: https://www.free-decompiler.com/flash/issues/68 +[#69]: https://www.free-decompiler.com/flash/issues/69 +[#75]: https://www.free-decompiler.com/flash/issues/75 +[#73]: https://www.free-decompiler.com/flash/issues/73 +[#62]: https://www.free-decompiler.com/flash/issues/62 +[#72]: https://www.free-decompiler.com/flash/issues/72 +[#64]: https://www.free-decompiler.com/flash/issues/64 +[#38]: https://www.free-decompiler.com/flash/issues/38 +[#56]: https://www.free-decompiler.com/flash/issues/56 +[#57]: https://www.free-decompiler.com/flash/issues/57 +[#58]: https://www.free-decompiler.com/flash/issues/58 +[#45]: https://www.free-decompiler.com/flash/issues/45 +[#50]: https://www.free-decompiler.com/flash/issues/50 +[#51]: https://www.free-decompiler.com/flash/issues/51 +[#52]: https://www.free-decompiler.com/flash/issues/52 +[#47]: https://www.free-decompiler.com/flash/issues/47 +[#42]: https://www.free-decompiler.com/flash/issues/42 +[#39]: https://www.free-decompiler.com/flash/issues/39 +[#40]: https://www.free-decompiler.com/flash/issues/40 +[#44]: https://www.free-decompiler.com/flash/issues/44 +[#36]: https://www.free-decompiler.com/flash/issues/36 +[#43]: https://www.free-decompiler.com/flash/issues/43 +[#46]: https://www.free-decompiler.com/flash/issues/46 +[#3]: https://www.free-decompiler.com/flash/issues/3 +[#37]: https://www.free-decompiler.com/flash/issues/37 +[#34]: https://www.free-decompiler.com/flash/issues/34 +[#35]: https://www.free-decompiler.com/flash/issues/35 +[#32]: https://www.free-decompiler.com/flash/issues/32 [#31]: https://www.free-decompiler.com/flash/issues/31 \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java index 1e99e32a5..9734d6e89 100644 --- a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java @@ -1,384 +1,386 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.decompiler.flash.abc.ScriptPack; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.BinaryDataExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ButtonExportMode; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.exporters.modes.FrameExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ImageExportMode; -import com.jpexs.decompiler.flash.exporters.modes.MorphShapeExportMode; -import com.jpexs.decompiler.flash.exporters.modes.MovieExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ShapeExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SoundExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SpriteExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode; -import com.jpexs.decompiler.flash.exporters.modes.TextExportMode; -import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; -import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; -import com.jpexs.decompiler.flash.tags.DefineSpriteTag; -import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; -import com.jpexs.decompiler.flash.tags.base.ASMSource; -import com.jpexs.decompiler.flash.tags.base.ButtonTag; -import com.jpexs.decompiler.flash.tags.base.FontTag; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; -import com.jpexs.decompiler.flash.tags.base.ShapeTag; -import com.jpexs.decompiler.flash.tags.base.SoundTag; -import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; -import com.jpexs.decompiler.flash.tags.base.TextTag; -import com.jpexs.decompiler.flash.timeline.Frame; -import com.jpexs.decompiler.flash.treeitems.TreeItem; -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.util.Arrays; -import java.util.List; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTextField; - -/** - * - * @author JPEXS - */ -public class ExportDialog extends AppDialog { - - private int result = ERROR_OPTION; - - String[] optionNames = { - TagTreeModel.FOLDER_SHAPES, - TagTreeModel.FOLDER_TEXTS, - TagTreeModel.FOLDER_IMAGES, - TagTreeModel.FOLDER_MOVIES, - TagTreeModel.FOLDER_SOUNDS, - TagTreeModel.FOLDER_SCRIPTS, - TagTreeModel.FOLDER_BINARY_DATA, - TagTreeModel.FOLDER_FRAMES, - TagTreeModel.FOLDER_SPRITES, - TagTreeModel.FOLDER_BUTTONS, - TagTreeModel.FOLDER_FONTS, - TagTreeModel.FOLDER_MORPHSHAPES, - "symbolclass" - }; - - //Display options only when these classes found - Class[][] objClasses = { - {ShapeTag.class}, - {TextTag.class}, - {ImageTag.class}, - {DefineVideoStreamTag.class}, - {SoundTag.class}, - {ASMSource.class, ScriptPack.class}, - {DefineBinaryDataTag.class}, - {Frame.class}, - {Frame.class}, - {ButtonTag.class}, - {FontTag.class}, - {MorphShapeTag.class}, - {SymbolClassTypeTag.class} - }; - - //Enum classes for values - Class[] optionClasses = { - ShapeExportMode.class, - TextExportMode.class, - ImageExportMode.class, - MovieExportMode.class, - SoundExportMode.class, - ScriptExportMode.class, - BinaryDataExportMode.class, - FrameExportMode.class, - SpriteExportMode.class, - ButtonExportMode.class, - FontExportMode.class, - MorphShapeExportMode.class, - SymbolClassExportMode.class - }; - - Class[] zoomClasses = { - ShapeExportMode.class, - TextExportMode.class, - FrameExportMode.class, - MorphShapeExportMode.class - }; - - private final JComboBox[] combos; - - private final JCheckBox[] checkBoxes; - - private final JCheckBox selectAllCheckBox; - - private JTextField zoomTextField = new JTextField(); - - public E getValue(Class option) { - for (int i = 0; i < optionClasses.length; i++) { - if (option == optionClasses[i]) { - E[] values = option.getEnumConstants(); - return values[combos[i].getSelectedIndex()]; - } - } - - return null; - } - - public boolean isOptionEnabled(Class option) { - for (int i = 0; i < optionClasses.length; i++) { - if (option == optionClasses[i]) { - return checkBoxes[i].isSelected(); - } - } - - return false; - } - - public double getZoom() { - return Double.parseDouble(zoomTextField.getText()) / 100; - } - - private void saveConfig() { - StringBuilder cfg = new StringBuilder(); - for (int i = 0; i < optionNames.length; i++) { - int selIndex = combos[i].getSelectedIndex(); - Class c = optionClasses[i]; - Object[] vals = c.getEnumConstants(); - String key = optionNames[i] + "." + vals[selIndex].toString().toLowerCase(); - if (i > 0) { - cfg.append(","); - } - cfg.append(key); - } - - Configuration.lastSelectedExportZoom.set(Double.parseDouble(zoomTextField.getText()) / 100); - Configuration.lastSelectedExportFormats.set(cfg.toString()); - } - - private boolean optionCanHandle(int optionIndex, Object e) { - for (int i = 0; i < objClasses[optionIndex].length; i++) { - Class c = objClasses[optionIndex][i]; - if (c.isInstance(e)) { - if (c == Frame.class) { //Frame class can be SWF frame or Sprite frame - Frame f = (Frame) e; - boolean isSprite = (f.timeline.timelined instanceof DefineSpriteTag); - boolean spritesWanted = optionClasses[optionIndex] == SpriteExportMode.class; - if (spritesWanted == isSprite) { //both true or both false - return true; - } - } else { - return true; - } - } - } - return false; - } - - public ExportDialog(List exportables) { - setTitle(translate("dialog.title")); - setResizable(false); - - Container cnt = getContentPane(); - cnt.setLayout(new BorderLayout()); - JPanel comboPanel = new JPanel(null); - int labWidth = 0; - boolean[] exportableExistsArray = new boolean[optionNames.length]; - for (int i = 0; i < optionNames.length; i++) { - boolean exportableExists = false; - if (exportables == null) { - exportableExists = true; - } else { - for (TreeItem e : exportables) { - if (optionCanHandle(i, e)) { - exportableExists = true; - } - } - } - - if (!exportableExists) { - continue; - } - - exportableExistsArray[i] = true; - - JLabel label = new JLabel(translate(optionNames[i])); - if (label.getPreferredSize().width > labWidth) { - labWidth = label.getPreferredSize().width; - } - } - - String exportFormatsStr = Configuration.lastSelectedExportFormats.get(); - if ("".equals(exportFormatsStr)) { - exportFormatsStr = null; - } - - String[] exportFormatsArr = new String[0]; - if (exportFormatsStr != null) { - if (exportFormatsStr.contains(",")) { - exportFormatsArr = exportFormatsStr.split(","); - } else { - exportFormatsArr = new String[]{exportFormatsStr}; - } - - } - - int comboWidth = 200; - int checkBoxWidth; - int top = 10; - - List exportFormats = Arrays.asList(exportFormatsArr); - combos = new JComboBox[optionNames.length]; - checkBoxes = new JCheckBox[optionNames.length]; - selectAllCheckBox = new JCheckBox(); - checkBoxWidth = selectAllCheckBox.getPreferredSize().width; - selectAllCheckBox.setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, selectAllCheckBox.getPreferredSize().height); - selectAllCheckBox.setSelected(true); - selectAllCheckBox.addActionListener((ActionEvent e) -> { - boolean selected = selectAllCheckBox.isSelected(); - for (JCheckBox checkBox : checkBoxes) { - if (checkBox != null) { - checkBox.setSelected(selected); - } - } - }); - comboPanel.add(selectAllCheckBox); - top += selectAllCheckBox.getHeight(); - - boolean zoomable = false; - for (int i = 0; i < optionNames.length; i++) { - Class c = optionClasses[i]; - Object[] vals = c.getEnumConstants(); - String[] names = new String[vals.length]; - int itemIndex = -1; - for (int j = 0; j < vals.length; j++) { - - String key = optionNames[i] + "." + vals[j].toString().toLowerCase(); - if (exportFormats.contains(key)) { - itemIndex = j; - } - names[j] = translate(key); - } - - combos[i] = new JComboBox<>(names); - if (itemIndex > -1) { - combos[i].setSelectedIndex(itemIndex); - } - - combos[i].setBounds(10 + labWidth + 10, top, comboWidth, combos[i].getPreferredSize().height); - - checkBoxes[i] = new JCheckBox(); - checkBoxes[i].setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, checkBoxes[i].getPreferredSize().height); - checkBoxes[i].setSelected(true); - - if (!exportableExistsArray[i]) { - continue; - } - - if (Arrays.asList(zoomClasses).contains(c)) { - zoomable = true; - } - - JLabel lab = new JLabel(translate(optionNames[i])); - lab.setBounds(10, top, lab.getPreferredSize().width, lab.getPreferredSize().height); - comboPanel.add(lab); - comboPanel.add(checkBoxes[i]); - comboPanel.add(combos[i]); - top += combos[i].getHeight(); - } - - int zoomWidth = 50; - if (zoomable) { - top += 2; - JLabel zlab = new JLabel(translate("zoom")); - zlab.setBounds(10, top + 4, zlab.getPreferredSize().width, zlab.getPreferredSize().height); - zoomTextField.setBounds(10 + labWidth + 10, top, zoomWidth, zoomTextField.getPreferredSize().height); - JLabel pctLabel = new JLabel(translate("zoom.percent")); - pctLabel.setBounds(10 + labWidth + 10 + zoomWidth + 5, top + 4, 20, pctLabel.getPreferredSize().height); - - comboPanel.add(zlab); - comboPanel.add(zoomTextField); - comboPanel.add(pctLabel); - top += zoomTextField.getHeight(); - } - - Dimension dim = new Dimension(10 + labWidth + 10 + checkBoxWidth + 10 + comboWidth + 10, top + 10); - comboPanel.setMinimumSize(dim); - comboPanel.setPreferredSize(dim); - cnt.add(comboPanel, BorderLayout.CENTER); - - JPanel buttonsPanel = new JPanel(new FlowLayout()); - JButton okButton = new JButton(translate("button.ok")); - okButton.addActionListener(this::okButtonActionPerformed); - - JButton cancelButton = new JButton(translate("button.cancel")); - cancelButton.addActionListener(this::cancelButtonActionPerformed); - - buttonsPanel.add(okButton); - buttonsPanel.add(cancelButton); - - cnt.add(buttonsPanel, BorderLayout.SOUTH); - pack(); - View.centerScreen(this); - View.setWindowIcon(this); - getRootPane().setDefaultButton(okButton); - setModal(true); - String pct = "" + Configuration.lastSelectedExportZoom.get() * 100; - if (pct.endsWith(".0")) { - pct = pct.substring(0, pct.length() - 2); - } - - zoomTextField.setText(pct); - } - - @Override - public void setVisible(boolean b) { - if (b) { - result = ERROR_OPTION; - } - super.setVisible(b); - } - - private void okButtonActionPerformed(ActionEvent evt) { - result = OK_OPTION; - try { - saveConfig(); - } catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - zoomTextField.requestFocusInWindow(); - return; - } - - setVisible(false); - } - - private void cancelButtonActionPerformed(ActionEvent evt) { - result = CANCEL_OPTION; - setVisible(false); - } - - public int showExportDialog() { - setVisible(true); - return result; - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.BinaryDataExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ButtonExportMode; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.exporters.modes.FrameExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ImageExportMode; +import com.jpexs.decompiler.flash.exporters.modes.MorphShapeExportMode; +import com.jpexs.decompiler.flash.exporters.modes.MovieExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ShapeExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SoundExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SpriteExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode; +import com.jpexs.decompiler.flash.exporters.modes.TextExportMode; +import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; +import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; +import com.jpexs.decompiler.flash.tags.DefineSpriteTag; +import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.decompiler.flash.tags.base.ButtonTag; +import com.jpexs.decompiler.flash.tags.base.FontTag; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; +import com.jpexs.decompiler.flash.tags.base.ShapeTag; +import com.jpexs.decompiler.flash.tags.base.SoundTag; +import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; +import com.jpexs.decompiler.flash.tags.base.TextTag; +import com.jpexs.decompiler.flash.timeline.Frame; +import com.jpexs.decompiler.flash.treeitems.TreeItem; +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.util.Arrays; +import java.util.List; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; + +/** + * + * @author JPEXS + */ +public class ExportDialog extends AppDialog { + + private int result = ERROR_OPTION; + + String[] optionNames = { + TagTreeModel.FOLDER_SHAPES, + TagTreeModel.FOLDER_TEXTS, + TagTreeModel.FOLDER_IMAGES, + TagTreeModel.FOLDER_MOVIES, + TagTreeModel.FOLDER_SOUNDS, + TagTreeModel.FOLDER_SCRIPTS, + TagTreeModel.FOLDER_BINARY_DATA, + TagTreeModel.FOLDER_FRAMES, + TagTreeModel.FOLDER_SPRITES, + TagTreeModel.FOLDER_BUTTONS, + TagTreeModel.FOLDER_FONTS, + TagTreeModel.FOLDER_MORPHSHAPES, + "symbolclass" + }; + + //Display options only when these classes found + Class[][] objClasses = { + {ShapeTag.class}, + {TextTag.class}, + {ImageTag.class}, + {DefineVideoStreamTag.class}, + {SoundTag.class}, + {ASMSource.class, ScriptPack.class}, + {DefineBinaryDataTag.class}, + {Frame.class}, + {Frame.class}, + {ButtonTag.class}, + {FontTag.class}, + {MorphShapeTag.class}, + {SymbolClassTypeTag.class}, + }; + + //Enum classes for values + Class[] optionClasses = { + ShapeExportMode.class, + TextExportMode.class, + ImageExportMode.class, + MovieExportMode.class, + SoundExportMode.class, + ScriptExportMode.class, + BinaryDataExportMode.class, + FrameExportMode.class, + SpriteExportMode.class, + ButtonExportMode.class, + FontExportMode.class, + MorphShapeExportMode.class, + SymbolClassExportMode.class, + }; + + Class[] zoomClasses = { + ShapeExportMode.class, + MorphShapeExportMode.class, + TextExportMode.class, + FrameExportMode.class, + SpriteExportMode.class, + ButtonExportMode.class, + }; + + private final JComboBox[] combos; + + private final JCheckBox[] checkBoxes; + + private final JCheckBox selectAllCheckBox; + + private JTextField zoomTextField = new JTextField(); + + public E getValue(Class option) { + for (int i = 0; i < optionClasses.length; i++) { + if (option == optionClasses[i]) { + E[] values = option.getEnumConstants(); + return values[combos[i].getSelectedIndex()]; + } + } + + return null; + } + + public boolean isOptionEnabled(Class option) { + for (int i = 0; i < optionClasses.length; i++) { + if (option == optionClasses[i]) { + return checkBoxes[i].isSelected(); + } + } + + return false; + } + + public double getZoom() { + return Double.parseDouble(zoomTextField.getText()) / 100; + } + + private void saveConfig() { + StringBuilder cfg = new StringBuilder(); + for (int i = 0; i < optionNames.length; i++) { + int selIndex = combos[i].getSelectedIndex(); + Class c = optionClasses[i]; + Object[] vals = c.getEnumConstants(); + String key = optionNames[i] + "." + vals[selIndex].toString().toLowerCase(); + if (i > 0) { + cfg.append(","); + } + cfg.append(key); + } + + Configuration.lastSelectedExportZoom.set(Double.parseDouble(zoomTextField.getText()) / 100); + Configuration.lastSelectedExportFormats.set(cfg.toString()); + } + + private boolean optionCanHandle(int optionIndex, Object e) { + for (int i = 0; i < objClasses[optionIndex].length; i++) { + Class c = objClasses[optionIndex][i]; + if (c.isInstance(e)) { + if (c == Frame.class) { //Frame class can be SWF frame or Sprite frame + Frame f = (Frame) e; + boolean isSprite = (f.timeline.timelined instanceof DefineSpriteTag); + boolean spritesWanted = optionClasses[optionIndex] == SpriteExportMode.class; + if (spritesWanted == isSprite) { //both true or both false + return true; + } + } else { + return true; + } + } + } + return false; + } + + public ExportDialog(List exportables) { + setTitle(translate("dialog.title")); + setResizable(false); + + Container cnt = getContentPane(); + cnt.setLayout(new BorderLayout()); + JPanel comboPanel = new JPanel(null); + int labWidth = 0; + boolean[] exportableExistsArray = new boolean[optionNames.length]; + for (int i = 0; i < optionNames.length; i++) { + boolean exportableExists = false; + if (exportables == null) { + exportableExists = true; + } else { + for (TreeItem e : exportables) { + if (optionCanHandle(i, e)) { + exportableExists = true; + } + } + } + + if (!exportableExists) { + continue; + } + + exportableExistsArray[i] = true; + + JLabel label = new JLabel(translate(optionNames[i])); + if (label.getPreferredSize().width > labWidth) { + labWidth = label.getPreferredSize().width; + } + } + + String exportFormatsStr = Configuration.lastSelectedExportFormats.get(); + if ("".equals(exportFormatsStr)) { + exportFormatsStr = null; + } + + String[] exportFormatsArr = new String[0]; + if (exportFormatsStr != null) { + if (exportFormatsStr.contains(",")) { + exportFormatsArr = exportFormatsStr.split(","); + } else { + exportFormatsArr = new String[]{exportFormatsStr}; + } + + } + + int comboWidth = 200; + int checkBoxWidth; + int top = 10; + + List exportFormats = Arrays.asList(exportFormatsArr); + combos = new JComboBox[optionNames.length]; + checkBoxes = new JCheckBox[optionNames.length]; + selectAllCheckBox = new JCheckBox(); + checkBoxWidth = selectAllCheckBox.getPreferredSize().width; + selectAllCheckBox.setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, selectAllCheckBox.getPreferredSize().height); + selectAllCheckBox.setSelected(true); + selectAllCheckBox.addActionListener((ActionEvent e) -> { + boolean selected = selectAllCheckBox.isSelected(); + for (JCheckBox checkBox : checkBoxes) { + if (checkBox != null) { + checkBox.setSelected(selected); + } + } + }); + comboPanel.add(selectAllCheckBox); + top += selectAllCheckBox.getHeight(); + + boolean zoomable = false; + for (int i = 0; i < optionNames.length; i++) { + Class c = optionClasses[i]; + Object[] vals = c.getEnumConstants(); + String[] names = new String[vals.length]; + int itemIndex = -1; + for (int j = 0; j < vals.length; j++) { + + String key = optionNames[i] + "." + vals[j].toString().toLowerCase(); + if (exportFormats.contains(key)) { + itemIndex = j; + } + names[j] = translate(key); + } + + combos[i] = new JComboBox<>(names); + if (itemIndex > -1) { + combos[i].setSelectedIndex(itemIndex); + } + + combos[i].setBounds(10 + labWidth + 10, top, comboWidth, combos[i].getPreferredSize().height); + + checkBoxes[i] = new JCheckBox(); + checkBoxes[i].setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, checkBoxes[i].getPreferredSize().height); + checkBoxes[i].setSelected(true); + + if (!exportableExistsArray[i]) { + continue; + } + + if (Arrays.asList(zoomClasses).contains(c)) { + zoomable = true; + } + + JLabel lab = new JLabel(translate(optionNames[i])); + lab.setBounds(10, top, lab.getPreferredSize().width, lab.getPreferredSize().height); + comboPanel.add(lab); + comboPanel.add(checkBoxes[i]); + comboPanel.add(combos[i]); + top += combos[i].getHeight(); + } + + int zoomWidth = 50; + if (zoomable) { + top += 2; + JLabel zlab = new JLabel(translate("zoom")); + zlab.setBounds(10, top + 4, zlab.getPreferredSize().width, zlab.getPreferredSize().height); + zoomTextField.setBounds(10 + labWidth + 10, top, zoomWidth, zoomTextField.getPreferredSize().height); + JLabel pctLabel = new JLabel(translate("zoom.percent")); + pctLabel.setBounds(10 + labWidth + 10 + zoomWidth + 5, top + 4, 20, pctLabel.getPreferredSize().height); + + comboPanel.add(zlab); + comboPanel.add(zoomTextField); + comboPanel.add(pctLabel); + top += zoomTextField.getHeight(); + } + + Dimension dim = new Dimension(10 + labWidth + 10 + checkBoxWidth + 10 + comboWidth + 10, top + 10); + comboPanel.setMinimumSize(dim); + comboPanel.setPreferredSize(dim); + cnt.add(comboPanel, BorderLayout.CENTER); + + JPanel buttonsPanel = new JPanel(new FlowLayout()); + JButton okButton = new JButton(translate("button.ok")); + okButton.addActionListener(this::okButtonActionPerformed); + + JButton cancelButton = new JButton(translate("button.cancel")); + cancelButton.addActionListener(this::cancelButtonActionPerformed); + + buttonsPanel.add(okButton); + buttonsPanel.add(cancelButton); + + cnt.add(buttonsPanel, BorderLayout.SOUTH); + pack(); + View.centerScreen(this); + View.setWindowIcon(this); + getRootPane().setDefaultButton(okButton); + setModal(true); + String pct = "" + Configuration.lastSelectedExportZoom.get() * 100; + if (pct.endsWith(".0")) { + pct = pct.substring(0, pct.length() - 2); + } + + zoomTextField.setText(pct); + } + + @Override + public void setVisible(boolean b) { + if (b) { + result = ERROR_OPTION; + } + super.setVisible(b); + } + + private void okButtonActionPerformed(ActionEvent evt) { + result = OK_OPTION; + try { + saveConfig(); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + zoomTextField.requestFocusInWindow(); + return; + } + + setVisible(false); + } + + private void cancelButtonActionPerformed(ActionEvent evt) { + result = CANCEL_OPTION; + setVisible(false); + } + + public int showExportDialog() { + setVisible(true); + return result; + } +} From 6033c906308ec90d7df43444ff2d4c35724bdbb6 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Mon, 1 May 2017 12:28:28 +0200 Subject: [PATCH 043/114] Wrtie log message when can't initialize flash panel --- .../decompiler/flash/DecompilerPool.java | 364 ++-- .../flash/gui/abc/TraitsListItem.java | 274 +-- .../flash/gui/locales/MainFrame_zh.properties | 1468 ++++++++--------- .../flash/gui/player/FlashPlayerPanel.java | 871 +++++----- 4 files changed, 1491 insertions(+), 1486 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java index 0a8050cf8..4321d7334 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -1,182 +1,182 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash; - -import com.jpexs.decompiler.flash.abc.ScriptPack; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.ScriptInfo; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedText; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.tags.base.ASMSource; -import com.jpexs.helpers.ImmediateFuture; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class DecompilerPool { - - private final ThreadPoolExecutor executor; - - public DecompilerPool() { - int threadCount = Configuration.getParallelThreadCount(); - executor = new ThreadPoolExecutor(threadCount, threadCount, - 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>()); - } - - public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - writer.startFunction("!script"); - src.getActionScriptSource(writer, actions); - writer.endFunction(); - - HighlightedText result = new HighlightedText(writer); - SWF swf = src.getSwf(); - if (swf != null) { - swf.as2Cache.put(src, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - int scriptIndex = pack.scriptIndex; - ScriptInfo script = null; - if (scriptIndex > -1) { - script = pack.abc.script_info.get(scriptIndex); - } - boolean parallel = Configuration.parallelSpeedUp.get(); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); - - HighlightedText result = new HighlightedText(writer); - SWF swf = pack.getSwf(); - if (swf != null) { - swf.as3Cache.put(pack, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - private Future submit(Callable callable) { - boolean parallel = Configuration.parallelSpeedUp.get(); - if (parallel) { - Future f = executor.submit(callable); - return f; - } else { - boolean cancelled = false; - Throwable throwable = null; - HighlightedText result = null; - try { - result = callable.call(); - } catch (InterruptedException ex) { - cancelled = true; - } catch (Exception ex) { - throwable = ex; - } - - return new ImmediateFuture<>(result, throwable, cancelled); - } - } - - public String getStat() { - return "core: " + executor.getCorePoolSize() - + " size: " + executor.getPoolSize() - + " largest: " + executor.getLargestPoolSize() - + " max: " + executor.getMaximumPoolSize() - + " active: " + executor.getActiveCount() - + " count: " + executor.getTaskCount() - + " completed: " + executor.getCompletedTaskCount(); - } - - public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { - Future future = submitTask(src, actions, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public HighlightedText decompile(ScriptPack pack) throws InterruptedException { - Future future = submitTask(pack, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public void shutdown() throws InterruptedException { - executor.shutdown(); - if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.ScriptInfo; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.helpers.ImmediateFuture; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class DecompilerPool { + + private final ThreadPoolExecutor executor; + + public DecompilerPool() { + int threadCount = Configuration.getParallelThreadCount(); + executor = new ThreadPoolExecutor(threadCount, threadCount, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>()); + } + + public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + writer.startFunction("!script"); + src.getActionScriptSource(writer, actions); + writer.endFunction(); + + HighlightedText result = new HighlightedText(writer); + SWF swf = src.getSwf(); + if (swf != null) { + swf.as2Cache.put(src, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + int scriptIndex = pack.scriptIndex; + ScriptInfo script = null; + if (scriptIndex > -1) { + script = pack.abc.script_info.get(scriptIndex); + } + boolean parallel = Configuration.parallelSpeedUp.get(); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); + + HighlightedText result = new HighlightedText(writer); + SWF swf = pack.getSwf(); + if (swf != null) { + swf.as3Cache.put(pack, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + private Future submit(Callable callable) { + boolean parallel = Configuration.parallelSpeedUp.get(); + if (parallel) { + Future f = executor.submit(callable); + return f; + } else { + boolean cancelled = false; + Throwable throwable = null; + HighlightedText result = null; + try { + result = callable.call(); + } catch (InterruptedException ex) { + cancelled = true; + } catch (Exception ex) { + throwable = ex; + } + + return new ImmediateFuture<>(result, throwable, cancelled); + } + } + + public String getStat() { + return "core: " + executor.getCorePoolSize() + + " size: " + executor.getPoolSize() + + " largest: " + executor.getLargestPoolSize() + + " max: " + executor.getMaximumPoolSize() + + " active: " + executor.getActiveCount() + + " count: " + executor.getTaskCount() + + " completed: " + executor.getCompletedTaskCount(); + } + + public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { + Future future = submitTask(src, actions, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public HighlightedText decompile(ScriptPack pack) throws InterruptedException { + Future future = submitTask(pack, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public void shutdown() throws InterruptedException { + executor.shutdown(); + if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { + } + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index 720918a55..5575b7397 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -1,137 +1,137 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.abc; - -import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.abc.types.traits.TraitType; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.helpers.NulWriter; -import com.jpexs.decompiler.flash.search.ABCSearchResult; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class TraitsListItem { - - private final TraitType type; - - private final boolean isStatic; - - private final ABC abc; - - private final int classIndex; - - private final int index; - - private final int scriptIndex; - - public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; - - public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; - - public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; - - public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { - this.type = type; - this.index = index; - this.isStatic = isStatic; - this.abc = abc; - this.classIndex = classIndex; - this.scriptIndex = scriptIndex; - } - - public int getGlobalTraitId() { - return abc.getGlobalTraitId(type, isStatic, classIndex, index); - } - - public String toStringName() { - - if (type == TraitType.INITIALIZER) { - if (!isStatic) { - return "__" + STR_INSTANCE_INITIALIZER; - } else { - return "__" + STR_CLASS_INITIALIZER; - } - } - if (type == TraitType.SCRIPT_INITIALIZER) { - return "__" + STR_SCRIPT_INITIALIZER; - } - if (isStatic) { - return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } else { - return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } - } - - @Override - public String toString() { - String s = ""; - try { - if (type == TraitType.SCRIPT_INITIALIZER) { - s = STR_SCRIPT_INITIALIZER; - } else if (type == TraitType.INITIALIZER) { - if (!isStatic) { - s = STR_INSTANCE_INITIALIZER; - } else { - s = STR_CLASS_INITIALIZER; - } - } else if (isStatic) { - ConvertData convertData = new ConvertData(); - Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } else { - ConvertData convertData = new ConvertData(); - Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } - } catch (InterruptedException ex) { - Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); - } - s = s.replaceAll("[ \r\n]+", " "); - return s; - } - - public TraitType getType() { - return type; - } - - public boolean isStatic() { - return isStatic; - } - - public int getClassIndex() { - return classIndex; - } - - public int getIndex() { - return index; - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.abc; + +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.helpers.NulWriter; +import com.jpexs.decompiler.flash.search.ABCSearchResult; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class TraitsListItem { + + private final TraitType type; + + private final boolean isStatic; + + private final ABC abc; + + private final int classIndex; + + private final int index; + + private final int scriptIndex; + + public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; + + public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; + + public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; + + public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { + this.type = type; + this.index = index; + this.isStatic = isStatic; + this.abc = abc; + this.classIndex = classIndex; + this.scriptIndex = scriptIndex; + } + + public int getGlobalTraitId() { + return abc.getGlobalTraitId(type, isStatic, classIndex, index); + } + + public String toStringName() { + + if (type == TraitType.INITIALIZER) { + if (!isStatic) { + return "__" + STR_INSTANCE_INITIALIZER; + } else { + return "__" + STR_CLASS_INITIALIZER; + } + } + if (type == TraitType.SCRIPT_INITIALIZER) { + return "__" + STR_SCRIPT_INITIALIZER; + } + if (isStatic) { + return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } else { + return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } + } + + @Override + public String toString() { + String s = ""; + try { + if (type == TraitType.SCRIPT_INITIALIZER) { + s = STR_SCRIPT_INITIALIZER; + } else if (type == TraitType.INITIALIZER) { + if (!isStatic) { + s = STR_INSTANCE_INITIALIZER; + } else { + s = STR_CLASS_INITIALIZER; + } + } else if (isStatic) { + ConvertData convertData = new ConvertData(); + Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } else { + ConvertData convertData = new ConvertData(); + Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } + } catch (InterruptedException ex) { + Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); + } + s = s.replaceAll("[ \r\n]+", " "); + return s; + } + + public TraitType getType() { + return type; + } + + public boolean isStatic() { + return isStatic; + } + + public int getClassIndex() { + return classIndex; + } + + public int getIndex() { + return index; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties index 811de2324..669f23a6e 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -1,734 +1,734 @@ -# Copyright (C) 2010-2016 JPEXS -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -menu.file = \u6587\u4ef6 -menu.file.open = \u6253\u5f00... -menu.file.save = \u4fdd\u5b58 -menu.file.saveas = \u53e6\u5b58\u4e3a... -menu.file.export.fla = \u5bfc\u51fa\u5230 FLA -menu.file.export.all = \u5bfc\u51fa\u6240\u6709 -menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 -menu.file.exit = \u9000\u51fa - -menu.tools = \u5de5\u5177 -menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... -menu.tools.proxy = \u4ee3\u7406 -menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 -menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... -menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 -menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 -menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b - -menu.settings = \u8bbe\u7f6e -menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 -menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 -menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f -menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) -menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 -menu.settings.language = \u66f4\u6539\u8bed\u8a00 -menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 -menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b - -menu.help = \u5e2e\u52a9 -menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... -menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! -menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 -menu.help.about = \u5173\u4e8e... - -contextmenu.remove = \u5220\u9664 - -button.save = \u4fdd\u5b58 -button.edit = \u7f16\u8f91 -button.cancel = \u53d6\u6d88 -button.replace = \u66ff\u6362... - -notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) - -swfpreview = SWF \u9884\u89c8 -swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) - -parameters = \u53c2\u6570 - -rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: - -rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. -rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. - -node.texts = \u6587\u672c -node.images = \u56fe\u50cf -node.movies = \u89c6\u9891 -node.sounds = \u58f0\u97f3 -node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e -node.fonts = \u5b57\u4f53 -node.sprites = \u7cbe\u7075 -node.shapes = \u56fe\u5f62 -node.morphshapes = \u53d8\u5f62\u5f62\u72b6 -node.buttons = \u6309\u94ae -node.frames = \u5e27 -node.scripts = \u811a\u672c - -message.warning = \u8b66\u544a -message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f -message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 -message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f -message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f -message.confirm = \u786e\u8ba4 - -message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 - -message.parallel = \u591a\u7ebf\u7a0b -message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait - -message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 -message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 -message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 -message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 - -work.buffering = \u7f13\u51b2 -work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 -work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae -work.disassembling = \u53cd\u6c47\u7f16 -work.exporting = \u5bfc\u51fa\u4e2d -work.searching = \u641c\u7d22\u4e2d -work.renaming = \u91cd\u547d\u540d\u4e2d -work.exporting.fla = \u5bfc\u51fa FLA \u4e2d -work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d -work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d -work.decompiling = \u53cd\u7f16\u8bd1\u4e2d -work.gettingvariables = \u83b7\u53d6\u53d8\u91cf -work.reading.swf = \u8bfb\u5165 SWF \u4e2d -work.creatingwindow = \u521b\u5efa\u7a97\u4f53 -work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 - -work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 - -message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . -message.search.notfound.title = \u6ca1\u6709\u627e\u5230 - -message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname -message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 -message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 -message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% - -filter.images = \u56fe\u7247 (%extensions%) -filter.fla = %version% \u6587\u4ef6 (*.fla) -filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) -filter.swf = SWF \u6587\u4ef6 (*.swf) - -error = \u9519\u8bef -error.image.invalid = \u65e0\u6548\u56fe\u7247. - -error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c -error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 -error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 -error.export = \u5bfc\u51fa\u65f6\u9519\u8bef - -export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 -export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% - -update.check.title = \u786e\u8ba4\u66f4\u65b0 -update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. - -message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. -message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% - -proxy = \u4ee3\u7406 -proxy.start = \u5f00\u59cb\u4ee3\u7406 -proxy.stop = \u505c\u6b62\u4ee3\u7406 -proxy.show = \u663e\u793a\u4ee3\u7406 -exit = \u9000\u51fa - -panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 -panel.decompiled = AS\u8d44\u6e90 - -search.info = \u641c\u7d22 "%text%" : -search.script = \u811a\u672c - -constants = \u5e38\u91cf -traits = Traits - -pleasewait = \u8bf7\u7a0d\u7b49 - -abc.detail.methodtrait = Method/Getter/Setter Trait -abc.detail.unsupported = - -abc.detail.slotconsttrait = Slot/Const Trait -abc.detail.traitname = \u540d\u79f0: - -abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: -abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: -abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) -abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 - -abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: -abc.detail.methodinfo.parameters = \u53c2\u6570: -abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: - -error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef -error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef - -abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f -abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 -abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 - -abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: - -error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef - -message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. -info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. - -button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 -button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 - -action.edit.experimental = (\u5b9e\u9a8c\u7684) - -message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f - -error.action.save = %error% \u5728 %line% \u884c - -message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f - -#after version 1.6.5u1: - -button.ok = \u786e\u5b9a -button.cancel = \u53d6\u6d88 - -font.name = \u5b57\u4f53\u540d\u79f0: -font.isbold = \u52a0\u7c97: -font.isitalic = \u659c\u4f53: -font.ascent = \u4e0a\u6807: -font.descent = \u4e0b\u6807: -font.leading = Leading: -font.characters = \u5b57\u7b26\u96c6: -font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: -value.unknown = ? - -yes = \u662f -no = \u5426 - -errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 -errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 - -#after version 1.6.6: - -dialog.message.title = \u6d88\u606f -dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 - -button.yes = \u662f -button.no = \u5426 - -FileChooser.openButtonText = \u6253\u5f00 -FileChooser.openButtonToolTipText = \u6253\u5f00 -FileChooser.lookInLabelText = \u6d4f\u89c8: -FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 -FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: -FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: -FileChooser.listViewButtonToolTipText = \u5217\u8868 -FileChooser.listViewButtonAccessibleName = \u5217\u8868 -FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f -FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 -FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 -FileChooser.fileNameHeaderText = \u540d\u79f0 -FileChooser.fileSizeHeaderText = \u5927\u5c0f -FileChooser.fileTypeHeaderText = \u7c7b\u578b -FileChooser.fileDateHeaderText = \u65e5\u671f -FileChooser.fileAttrHeaderText = \u5c5e\u6027 -FileChooser.openDialogTitleText = \u6253\u5f00 -FileChooser.directoryDescriptionText = \u76ee\u5f55 -FileChooser.directoryOpenButtonText = \u6253\u5f00 -FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 -FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 -FileChooser.helpButtonText = \u5e2e\u52a9 -FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 -FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 -FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} -FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) -FileChooser.saveButtonText = \u4fdd\u5b58 -FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 -FileChooser.saveDialogTitleText = \u4fdd\u5b58 -FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: -FileChooser.updateButtonText = \u5237\u65b0 -FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 - -#after version 1.6.6u2: - -FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 -FileChooser.fileDateHeader.textAndMnemonic = Modified -FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 -FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: -FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f -FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b -FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: -FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: -FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 -FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 -FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 -FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: -FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 -FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 -FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: -FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 -FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 -FileChooser.listViewActionLabelText = \u5217\u8868 -FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.refreshActionLabelText = \u5237\u65b0 -FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 -FileChooser.viewMenuLabelText = \u6d4f\u89c8 -FileChooser.fileSizeKiloBytes = {0} KB -FileChooser.fileSizeMegaBytes = {0} MB -FileChooser.fileSizeGigaBytes = {0} GB -FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: - -error.occured = \u53d1\u751f\u9519\u8bef : %error% -button.abort = \u7ec8\u6b62 -button.retry = \u91cd\u8bd5 -button.ignore = \u5ffd\u7565 - -font.source = \u6e90\u5b57\u4f53: - -#after version 1.6.7: - -menu.export = \u5bfc\u51fa -menu.general = \u901a\u7528 -menu.language = \u8bed\u8a00 - -startup.welcometo = \u6b22\u8fce\u4f7f\u7528 -startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 - -error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". - -warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 - -#after version 1.7.0u1: - -menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF -menu.file.reload = \u91cd\u8f7d -message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f - -dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 -button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 - -ColorChooser.okText = \u786e\u5b9a -ColorChooser.cancelText = \u53d6\u6d88 -ColorChooser.resetText = \u91cd\u7f6e -ColorChooser.previewText = \u9884\u89c8 -ColorChooser.swatchesNameText = \u8c03\u8272\u677f -ColorChooser.swatchesRecentText = \u6700\u8fd1: -ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c - -#after version 1.7.1: - -preview.play = \u64ad\u653e -preview.pause = \u6682\u505c -preview.stop = \u505c\u6b62 - -message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f - -menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 - -#after version 1.7.2u2 - -error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 -button.addtrait = \u6dfb\u52a0 Trait -button.font.embed = \u5d4c\u5165... -button.yes.all = \u5168\u662f -button.no.all = \u5168\u5426 -message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f - -filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) -filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b -work.canceled = \u5df2\u53d6\u6d88 -work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b -menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e -menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 - -#after version 1.7.4 -work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d -message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f -contextmenu.closeSwf = \u5173\u95ed SWF -menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 -menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... -filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) - -#after version 1.8.0 -font.updateTexts = \u66f4\u65b0\u6587\u672c - -#after version 1.8.0u1 -menu.file.close = \u5173\u95ed -menu.file.closeAll = \u5168\u90e8\u5173\u95ed -menu.tools.otherTools = \u5176\u4ed6 -menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 -fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: -fontName.copyright = \u5b57\u4f53\u7248\u6743: -button.preview = \u9884\u89c8 -button.reset = \u91cd\u7f6e -errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 -errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 - -decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef - -disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 -disassemblingProgress.reading = \u8bfb\u53d6\u4e2d -disassemblingProgress.deobfuscating = \u6df7\u6dc6 - -contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 - -filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) -filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) -filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) - -open.error = \u9519\u8bef -open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 -open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 - -node.others = \u5176\u4ed6 - -#after version 1.8.1 -menu.tools.search = \u6587\u672c\u67e5\u627e - -#after version 1.8.1u1 -menu.tools.timeline = \u65f6\u95f4\u8f74 - -dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 -button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 - -#default item name, will be used in following sentences -generictag.array.item = \u9879\u76ee -generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% -generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d -generictag.array.remove = \u79fb\u9664 %item% -generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e -generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% - -#after version 2.0.0 -contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 - -filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) -filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) -filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) - -error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 - -button.prev = \u4e0a\u4e00\u9875 -button.next = \u4e0b\u4e00\u9875 - -#after version 2.1.0 -message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 -message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 -message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 - -message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 -message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a - -menu.import = \u5bfc\u5165 -menu.file.import.text = \u5bfc\u5165\u6587\u672c -import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 -error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f - -#after version 2.1.1 -contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 - -abc.action.find-usages = \u67e5\u627e\u5f15\u7528 -abc.action.find-declaration = \u67e5\u627e\u58f0\u660e - -contextmenu.rawEdit = RAW\u7f16\u8f91 -contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 - -menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 - -menu.view = \u67e5\u770b -menu.file.view.resources = \u8d44\u6e90 -menu.file.view.hex = \u4e8c\u8fdb\u5236 - -node.header = \u6587\u4ef6\u5934 - -header.signature = \u6587\u4ef6\u6807\u8bc6: -header.compression = \u538b\u7f29\u6a21\u5f0f: -header.compression.lzma = LZMA -header.compression.zlib = ZLIB -header.compression.none = \u65e0\u538b\u7f29 -header.version = SWF\u7248\u672c: -header.gfx = GFX: -header.filesize = \u6587\u4ef6\u5927\u5c0f -header.framerate = \u5e27\u7387: -header.framecount = \u5e27\u6570: -header.displayrect = \u663e\u793a\u533a\u57df: -header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips -header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels - -#after version 2.1.2 -contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 -contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c -contextmenu.parseABC = \u89e3\u6790ABC -contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 - -#after version 2.1.3 -menu.deobfuscation = \u53cd\u6df7\u6dc6 -menu.file.deobfuscation.old = \u65e7\u6837\u5f0f -menu.file.deobfuscation.new = \u65b0\u6837\u5f0f - -#after version 2.1.4 -contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 -binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 - -#after version 3.0.0 -button.zoomin.hint = \u653e\u5927 -button.zoomout.hint = \u7f29\u5c0f -button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 -button.zoomnone.hint = \u7f29\u653e\u5230 1:1 -button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f - -editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 - -#Font name which is presented in the SWF Font tag -font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: - -menu.debugger = \u8c03\u8bd5\u5668 -menu.debugger.switch = \u8c03\u8bd5\u5668 -menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 -menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 - -message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 - -contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e - -deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d -deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 - -#after version 4.0.2 -preview.nextframe = \u4e0b\u4e00\u5e27 -preview.prevframe = \u4e0a\u4e00\u5e27 -preview.gotoframe = \u8f6c\u5230\u5e27... - -preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 -preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) -preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 - -error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f - -#after version 4.0.5 -contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 -fit = \u9002\u5408 -button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c - -menu.tools.replace = \u6587\u672c\u66ff\u6362 - -message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f -message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f - -contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 -contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML -contextmenu.importSwfXml = \u5bfc\u5165 SWF XML - -filter.xml = XML - -#after version 4.1.0 -contextmenu.undo = \u64a4\u6d88 - -text.align.left = \u5de6\u5bf9\u9f50 -text.align.right = \u53f3\u5bf9\u9f50 -text.align.center = \u5c45\u4e2d\u5bf9\u9f50 -text.align.justify = \u4e24\u7aef\u5bf9\u9f50 - -text.undo = \u64a4\u6d88\u66f4\u6539 - -menu.file.import.xml = \u5bfc\u5165 SWF XML -menu.file.export.xml = \u5bfc\u51fa SWF XML - -#after version 4.1.1 -text.align.translatex.decrease = \u51cf\u5c11 TranslateX -text.align.translatex.increase = \u589e\u52a0 TranslateX -selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e -selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e -button.ignoreAll = \u5ffd\u7565\u5168\u90e8 -menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class -text.toggleCase = \u5207\u6362\u5916\u58f3 - -#after version 5.0.2 -preview.loop = \u5faa\u73af -menu.file.import.script = \u5bfc\u5165\u811a\u672c -contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e -button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e -button.resolveConstants = \u89e3\u6790\u5e38\u6570 - -#after version 5.1.0 -button.viewConstants = \u67e5\u770b\u5e38\u91cf -work.exported = \u5bfc\u51fa -button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... - -tagInfo.header.name = \u540d\u79f0 -tagInfo.header.value = \u503c -tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b -tagInfo.characterId = \u5b57\u7b26 ID -tagInfo.offset = \u504f\u79fb -tagInfo.length = \u957f\u5ea6 -tagInfo.bounds = \u8fb9\u754c -tagInfo.width = \u5bbd\u5ea6 -tagInfo.height = \u9ad8\u5ea6 -tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 - -button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a -taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f - -tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 - -#after version 5.3.0 -header.uncompressed = \u65e0\u538b\u7f29 -header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 -header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 -header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 - -tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 -tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f -tagInfo.samplingRate = \u91c7\u6837\u7387 -tagInfo.stereo = \u7acb\u4f53\u58f0 -tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf - -filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) -filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 - -import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 -import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 - -error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% -error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 - -#after version 6.0.2 -contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 -menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e - -#after version 6.1.1 -menu.file.start = \u5f00\u59cb -menu.file.start.run = \u8fd0\u884c -menu.file.start.stop = \u505c\u6b62 -menu.file.start.debug = \u8c03\u8bd5 -menu.debugging = \u8c03\u8bd5\u4e2d -menu.debugging.debug = \u8c03\u8bd5 -menu.debugging.debug.stop = \u505c\u6b62 -menu.debugging.debug.pause = \u6682\u505c -menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c -menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 -menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa -menu.debugging.debug.continue = \u7ee7\u7eed -menu.debugging.debug.stack = \u5806\u6808... -menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... - -message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 - -debugpanel.header = \u8c03\u8bd5\u4e2d - -variables.header.registers = \u5bc4\u5b58\u5668 -variables.header.locals = \u672c\u673a -variables.header.arguments = \u53c2\u6570 -variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe -variables.column.name = \u540d\u79f0 -variables.column.type = \u7c7b\u578b -variables.column.value = \u503c - -callStack.header = \u8c03\u7528\u5806\u6808 -callStack.header.file = \u6587\u4ef6 -callStack.header.line = \u884c - -stack.header = \u5806\u53e0 -stack.header.item = \u9879\u76ee - -constantpool.header = \u5e38\u91cf\u6c60 -constantpool.header.id = Id -constantpool.header.value = \u503c - -work.running = \u8fd0\u884c\u884c -work.debugging = \u8c03\u8bd5\u4e2d -work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 -work.breakat = \u65ad\u70b9\u5728\u0020 -work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 - -debuglog.header = \u65e5\u5fd7 -debuglog.button.clear = \u6e05\u9664 - -#after 7.0.1 -work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 - -error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 - -debug.break.reason.unknown = (\u672a\u77e5) -debug.break.reason.breakpoint = (\u65ad\u70b9) -debug.break.reason.watch = (\u89c2\u770b) -debug.break.reason.fault = (\u6545\u969c) -debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) -debug.break.reason.step = (\u6b65\u9aa4) -debug.break.reason.halt = (\u505c\u6b62) -debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) - -menu.file.start.debugpcode = \u8c03\u8bd5 P-code - -#after 7.1.2 -button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... -message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 - -message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f -message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f - -message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 -message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f - -menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f - -#after 8.0.1 -menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a -message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 - -menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 -message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f -export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 - -button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 -button.remove = \u6e05\u9664 -button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb - -generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 -generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ - ------------------\n\ - \u6807\u91cf\u7c7b\u578b:\n\ - %scalar_samples%\ - \u5176\u4ed6\u7c7b\u578b:\n\ - %nonscalar_samples%\ - \n\ - \u6ce8\u610f:\n\ - \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ - %reference_sample%\n\ - \ * Keys in Dictionary entries can be any type\n -contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a - +# Copyright (C) 2010-2016 JPEXS +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +menu.file = \u6587\u4ef6 +menu.file.open = \u6253\u5f00... +menu.file.save = \u4fdd\u5b58 +menu.file.saveas = \u53e6\u5b58\u4e3a... +menu.file.export.fla = \u5bfc\u51fa\u5230 FLA +menu.file.export.all = \u5bfc\u51fa\u6240\u6709 +menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 +menu.file.exit = \u9000\u51fa + +menu.tools = \u5de5\u5177 +menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... +menu.tools.proxy = \u4ee3\u7406 +menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 +menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... +menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 +menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 +menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b + +menu.settings = \u8bbe\u7f6e +menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 +menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 +menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f +menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) +menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 +menu.settings.language = \u66f4\u6539\u8bed\u8a00 +menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 +menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b + +menu.help = \u5e2e\u52a9 +menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... +menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! +menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 +menu.help.about = \u5173\u4e8e... + +contextmenu.remove = \u5220\u9664 + +button.save = \u4fdd\u5b58 +button.edit = \u7f16\u8f91 +button.cancel = \u53d6\u6d88 +button.replace = \u66ff\u6362... + +notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) + +swfpreview = SWF \u9884\u89c8 +swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) + +parameters = \u53c2\u6570 + +rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: + +rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. +rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. + +node.texts = \u6587\u672c +node.images = \u56fe\u50cf +node.movies = \u89c6\u9891 +node.sounds = \u58f0\u97f3 +node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e +node.fonts = \u5b57\u4f53 +node.sprites = \u7cbe\u7075 +node.shapes = \u56fe\u5f62 +node.morphshapes = \u53d8\u5f62\u5f62\u72b6 +node.buttons = \u6309\u94ae +node.frames = \u5e27 +node.scripts = \u811a\u672c + +message.warning = \u8b66\u544a +message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f +message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 +message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f +message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f +message.confirm = \u786e\u8ba4 + +message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 + +message.parallel = \u591a\u7ebf\u7a0b +message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait + +message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 +message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 +message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 +message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 + +work.buffering = \u7f13\u51b2 +work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 +work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae +work.disassembling = \u53cd\u6c47\u7f16 +work.exporting = \u5bfc\u51fa\u4e2d +work.searching = \u641c\u7d22\u4e2d +work.renaming = \u91cd\u547d\u540d\u4e2d +work.exporting.fla = \u5bfc\u51fa FLA \u4e2d +work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d +work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d +work.decompiling = \u53cd\u7f16\u8bd1\u4e2d +work.gettingvariables = \u83b7\u53d6\u53d8\u91cf +work.reading.swf = \u8bfb\u5165 SWF \u4e2d +work.creatingwindow = \u521b\u5efa\u7a97\u4f53 +work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 + +work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 + +message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . +message.search.notfound.title = \u6ca1\u6709\u627e\u5230 + +message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname +message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 +message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 +message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% + +filter.images = \u56fe\u7247 (%extensions%) +filter.fla = %version% \u6587\u4ef6 (*.fla) +filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) +filter.swf = SWF \u6587\u4ef6 (*.swf) + +error = \u9519\u8bef +error.image.invalid = \u65e0\u6548\u56fe\u7247. + +error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c +error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 +error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 +error.export = \u5bfc\u51fa\u65f6\u9519\u8bef + +export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 +export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% + +update.check.title = \u786e\u8ba4\u66f4\u65b0 +update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. + +message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. +message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% + +proxy = \u4ee3\u7406 +proxy.start = \u5f00\u59cb\u4ee3\u7406 +proxy.stop = \u505c\u6b62\u4ee3\u7406 +proxy.show = \u663e\u793a\u4ee3\u7406 +exit = \u9000\u51fa + +panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 +panel.decompiled = AS\u8d44\u6e90 + +search.info = \u641c\u7d22 "%text%" : +search.script = \u811a\u672c + +constants = \u5e38\u91cf +traits = Traits + +pleasewait = \u8bf7\u7a0d\u7b49 + +abc.detail.methodtrait = Method/Getter/Setter Trait +abc.detail.unsupported = - +abc.detail.slotconsttrait = Slot/Const Trait +abc.detail.traitname = \u540d\u79f0: + +abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: +abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: +abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) +abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 + +abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: +abc.detail.methodinfo.parameters = \u53c2\u6570: +abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: + +error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef +error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef + +abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f +abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 +abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 + +abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: + +error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef + +message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. +info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. + +button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 +button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 + +action.edit.experimental = (\u5b9e\u9a8c\u7684) + +message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f + +error.action.save = %error% \u5728 %line% \u884c + +message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f + +#after version 1.6.5u1: + +button.ok = \u786e\u5b9a +button.cancel = \u53d6\u6d88 + +font.name = \u5b57\u4f53\u540d\u79f0: +font.isbold = \u52a0\u7c97: +font.isitalic = \u659c\u4f53: +font.ascent = \u4e0a\u6807: +font.descent = \u4e0b\u6807: +font.leading = Leading: +font.characters = \u5b57\u7b26\u96c6: +font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: +value.unknown = ? + +yes = \u662f +no = \u5426 + +errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 +errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 + +#after version 1.6.6: + +dialog.message.title = \u6d88\u606f +dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 + +button.yes = \u662f +button.no = \u5426 + +FileChooser.openButtonText = \u6253\u5f00 +FileChooser.openButtonToolTipText = \u6253\u5f00 +FileChooser.lookInLabelText = \u6d4f\u89c8: +FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 +FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: +FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: +FileChooser.listViewButtonToolTipText = \u5217\u8868 +FileChooser.listViewButtonAccessibleName = \u5217\u8868 +FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f +FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 +FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 +FileChooser.fileNameHeaderText = \u540d\u79f0 +FileChooser.fileSizeHeaderText = \u5927\u5c0f +FileChooser.fileTypeHeaderText = \u7c7b\u578b +FileChooser.fileDateHeaderText = \u65e5\u671f +FileChooser.fileAttrHeaderText = \u5c5e\u6027 +FileChooser.openDialogTitleText = \u6253\u5f00 +FileChooser.directoryDescriptionText = \u76ee\u5f55 +FileChooser.directoryOpenButtonText = \u6253\u5f00 +FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 +FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 +FileChooser.helpButtonText = \u5e2e\u52a9 +FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 +FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 +FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} +FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) +FileChooser.saveButtonText = \u4fdd\u5b58 +FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 +FileChooser.saveDialogTitleText = \u4fdd\u5b58 +FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: +FileChooser.updateButtonText = \u5237\u65b0 +FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 + +#after version 1.6.6u2: + +FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 +FileChooser.fileDateHeader.textAndMnemonic = Modified +FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 +FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: +FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f +FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b +FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: +FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: +FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 +FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 +FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 +FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: +FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 +FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 +FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: +FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 +FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 +FileChooser.listViewActionLabelText = \u5217\u8868 +FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.refreshActionLabelText = \u5237\u65b0 +FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 +FileChooser.viewMenuLabelText = \u6d4f\u89c8 +FileChooser.fileSizeKiloBytes = {0} KB +FileChooser.fileSizeMegaBytes = {0} MB +FileChooser.fileSizeGigaBytes = {0} GB +FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: + +error.occured = \u53d1\u751f\u9519\u8bef : %error% +button.abort = \u7ec8\u6b62 +button.retry = \u91cd\u8bd5 +button.ignore = \u5ffd\u7565 + +font.source = \u6e90\u5b57\u4f53: + +#after version 1.6.7: + +menu.export = \u5bfc\u51fa +menu.general = \u901a\u7528 +menu.language = \u8bed\u8a00 + +startup.welcometo = \u6b22\u8fce\u4f7f\u7528 +startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 + +error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". + +warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 + +#after version 1.7.0u1: + +menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF +menu.file.reload = \u91cd\u8f7d +message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f + +dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 +button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 + +ColorChooser.okText = \u786e\u5b9a +ColorChooser.cancelText = \u53d6\u6d88 +ColorChooser.resetText = \u91cd\u7f6e +ColorChooser.previewText = \u9884\u89c8 +ColorChooser.swatchesNameText = \u8c03\u8272\u677f +ColorChooser.swatchesRecentText = \u6700\u8fd1: +ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c + +#after version 1.7.1: + +preview.play = \u64ad\u653e +preview.pause = \u6682\u505c +preview.stop = \u505c\u6b62 + +message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f + +menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 + +#after version 1.7.2u2 + +error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 +button.addtrait = \u6dfb\u52a0 Trait +button.font.embed = \u5d4c\u5165... +button.yes.all = \u5168\u662f +button.no.all = \u5168\u5426 +message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f + +filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) +filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b +work.canceled = \u5df2\u53d6\u6d88 +work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b +menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e +menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 + +#after version 1.7.4 +work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d +message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f +contextmenu.closeSwf = \u5173\u95ed SWF +menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 +menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... +filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) + +#after version 1.8.0 +font.updateTexts = \u66f4\u65b0\u6587\u672c + +#after version 1.8.0u1 +menu.file.close = \u5173\u95ed +menu.file.closeAll = \u5168\u90e8\u5173\u95ed +menu.tools.otherTools = \u5176\u4ed6 +menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 +fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: +fontName.copyright = \u5b57\u4f53\u7248\u6743: +button.preview = \u9884\u89c8 +button.reset = \u91cd\u7f6e +errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 +errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 + +decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef + +disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 +disassemblingProgress.reading = \u8bfb\u53d6\u4e2d +disassemblingProgress.deobfuscating = \u6df7\u6dc6 + +contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 + +filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) +filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) +filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) + +open.error = \u9519\u8bef +open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 +open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 + +node.others = \u5176\u4ed6 + +#after version 1.8.1 +menu.tools.search = \u6587\u672c\u67e5\u627e + +#after version 1.8.1u1 +menu.tools.timeline = \u65f6\u95f4\u8f74 + +dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 +button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 + +#default item name, will be used in following sentences +generictag.array.item = \u9879\u76ee +generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% +generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d +generictag.array.remove = \u79fb\u9664 %item% +generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e +generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% + +#after version 2.0.0 +contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 + +filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) +filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) +filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) + +error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 + +button.prev = \u4e0a\u4e00\u9875 +button.next = \u4e0b\u4e00\u9875 + +#after version 2.1.0 +message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 +message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 +message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 + +message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 +message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a + +menu.import = \u5bfc\u5165 +menu.file.import.text = \u5bfc\u5165\u6587\u672c +import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 +error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f + +#after version 2.1.1 +contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 + +abc.action.find-usages = \u67e5\u627e\u5f15\u7528 +abc.action.find-declaration = \u67e5\u627e\u58f0\u660e + +contextmenu.rawEdit = RAW\u7f16\u8f91 +contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 + +menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 + +menu.view = \u67e5\u770b +menu.file.view.resources = \u8d44\u6e90 +menu.file.view.hex = \u4e8c\u8fdb\u5236 + +node.header = \u6587\u4ef6\u5934 + +header.signature = \u6587\u4ef6\u6807\u8bc6: +header.compression = \u538b\u7f29\u6a21\u5f0f: +header.compression.lzma = LZMA +header.compression.zlib = ZLIB +header.compression.none = \u65e0\u538b\u7f29 +header.version = SWF\u7248\u672c: +header.gfx = GFX: +header.filesize = \u6587\u4ef6\u5927\u5c0f +header.framerate = \u5e27\u7387: +header.framecount = \u5e27\u6570: +header.displayrect = \u663e\u793a\u533a\u57df: +header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips +header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels + +#after version 2.1.2 +contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 +contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c +contextmenu.parseABC = \u89e3\u6790ABC +contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 + +#after version 2.1.3 +menu.deobfuscation = \u53cd\u6df7\u6dc6 +menu.file.deobfuscation.old = \u65e7\u6837\u5f0f +menu.file.deobfuscation.new = \u65b0\u6837\u5f0f + +#after version 2.1.4 +contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 +binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 + +#after version 3.0.0 +button.zoomin.hint = \u653e\u5927 +button.zoomout.hint = \u7f29\u5c0f +button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 +button.zoomnone.hint = \u7f29\u653e\u5230 1:1 +button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f + +editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 + +#Font name which is presented in the SWF Font tag +font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: + +menu.debugger = \u8c03\u8bd5\u5668 +menu.debugger.switch = \u8c03\u8bd5\u5668 +menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 +menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 + +message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 + +contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e + +deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d +deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 + +#after version 4.0.2 +preview.nextframe = \u4e0b\u4e00\u5e27 +preview.prevframe = \u4e0a\u4e00\u5e27 +preview.gotoframe = \u8f6c\u5230\u5e27... + +preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 +preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) +preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 + +error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f + +#after version 4.0.5 +contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 +fit = \u9002\u5408 +button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c + +menu.tools.replace = \u6587\u672c\u66ff\u6362 + +message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f +message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f + +contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 +contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML +contextmenu.importSwfXml = \u5bfc\u5165 SWF XML + +filter.xml = XML + +#after version 4.1.0 +contextmenu.undo = \u64a4\u6d88 + +text.align.left = \u5de6\u5bf9\u9f50 +text.align.right = \u53f3\u5bf9\u9f50 +text.align.center = \u5c45\u4e2d\u5bf9\u9f50 +text.align.justify = \u4e24\u7aef\u5bf9\u9f50 + +text.undo = \u64a4\u6d88\u66f4\u6539 + +menu.file.import.xml = \u5bfc\u5165 SWF XML +menu.file.export.xml = \u5bfc\u51fa SWF XML + +#after version 4.1.1 +text.align.translatex.decrease = \u51cf\u5c11 TranslateX +text.align.translatex.increase = \u589e\u52a0 TranslateX +selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e +selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e +button.ignoreAll = \u5ffd\u7565\u5168\u90e8 +menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class +text.toggleCase = \u5207\u6362\u5916\u58f3 + +#after version 5.0.2 +preview.loop = \u5faa\u73af +menu.file.import.script = \u5bfc\u5165\u811a\u672c +contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e +button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e +button.resolveConstants = \u89e3\u6790\u5e38\u6570 + +#after version 5.1.0 +button.viewConstants = \u67e5\u770b\u5e38\u91cf +work.exported = \u5bfc\u51fa +button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... + +tagInfo.header.name = \u540d\u79f0 +tagInfo.header.value = \u503c +tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b +tagInfo.characterId = \u5b57\u7b26 ID +tagInfo.offset = \u504f\u79fb +tagInfo.length = \u957f\u5ea6 +tagInfo.bounds = \u8fb9\u754c +tagInfo.width = \u5bbd\u5ea6 +tagInfo.height = \u9ad8\u5ea6 +tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 + +button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a +taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f + +tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 + +#after version 5.3.0 +header.uncompressed = \u65e0\u538b\u7f29 +header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 +header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 +header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 + +tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 +tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f +tagInfo.samplingRate = \u91c7\u6837\u7387 +tagInfo.stereo = \u7acb\u4f53\u58f0 +tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf + +filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) +filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 + +import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 +import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 + +error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% +error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 + +#after version 6.0.2 +contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 +menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e + +#after version 6.1.1 +menu.file.start = \u5f00\u59cb +menu.file.start.run = \u8fd0\u884c +menu.file.start.stop = \u505c\u6b62 +menu.file.start.debug = \u8c03\u8bd5 +menu.debugging = \u8c03\u8bd5\u4e2d +menu.debugging.debug = \u8c03\u8bd5 +menu.debugging.debug.stop = \u505c\u6b62 +menu.debugging.debug.pause = \u6682\u505c +menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c +menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 +menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa +menu.debugging.debug.continue = \u7ee7\u7eed +menu.debugging.debug.stack = \u5806\u6808... +menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... + +message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 + +debugpanel.header = \u8c03\u8bd5\u4e2d + +variables.header.registers = \u5bc4\u5b58\u5668 +variables.header.locals = \u672c\u673a +variables.header.arguments = \u53c2\u6570 +variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe +variables.column.name = \u540d\u79f0 +variables.column.type = \u7c7b\u578b +variables.column.value = \u503c + +callStack.header = \u8c03\u7528\u5806\u6808 +callStack.header.file = \u6587\u4ef6 +callStack.header.line = \u884c + +stack.header = \u5806\u53e0 +stack.header.item = \u9879\u76ee + +constantpool.header = \u5e38\u91cf\u6c60 +constantpool.header.id = Id +constantpool.header.value = \u503c + +work.running = \u8fd0\u884c\u884c +work.debugging = \u8c03\u8bd5\u4e2d +work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 +work.breakat = \u65ad\u70b9\u5728\u0020 +work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 + +debuglog.header = \u65e5\u5fd7 +debuglog.button.clear = \u6e05\u9664 + +#after 7.0.1 +work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 + +error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 + +debug.break.reason.unknown = (\u672a\u77e5) +debug.break.reason.breakpoint = (\u65ad\u70b9) +debug.break.reason.watch = (\u89c2\u770b) +debug.break.reason.fault = (\u6545\u969c) +debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) +debug.break.reason.step = (\u6b65\u9aa4) +debug.break.reason.halt = (\u505c\u6b62) +debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) + +menu.file.start.debugpcode = \u8c03\u8bd5 P-code + +#after 7.1.2 +button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... +message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 + +message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f +message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f + +message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 +message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f + +menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f + +#after 8.0.1 +menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a +message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 + +menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 +message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f +export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 + +button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 +button.remove = \u6e05\u9664 +button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb + +generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 +generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ + ------------------\n\ + \u6807\u91cf\u7c7b\u578b:\n\ + %scalar_samples%\ + \u5176\u4ed6\u7c7b\u578b:\n\ + %nonscalar_samples%\ + \n\ + \u6ce8\u610f:\n\ + \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ + %reference_sample%\n\ + \ * Keys in Dictionary entries can be any type\n +contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a + diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index 0261f0f6d..1db811dfd 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -1,433 +1,438 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.player; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; -import com.jpexs.decompiler.flash.gui.Main; -import com.jpexs.helpers.CancellableWorker; -import com.jpexs.javactivex.ActiveX; -import com.jpexs.javactivex.ActiveXEvent; -import com.jpexs.javactivex.ActiveXException; -import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; -import com.sun.jna.Platform; -import java.awt.AWTException; -import java.awt.Color; -import java.awt.Component; -import java.awt.Panel; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Robot; -import java.awt.image.BufferedImage; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * - * @author JPEXS - */ -public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { - - private final int setMovieDelay = Configuration.setMovieDelay.get(); - - private final List listeners = new ArrayList<>(); - - private final ShockwaveFlash flash; - - private final Timer timer; - - private boolean stopped = true; - - private boolean closed = false; - - private float frameRate; - - @Override - public boolean loopAvailable() { - return false; - } - - @Override - public boolean screenAvailable() { - return true; - } - - @Override - public boolean zoomAvailable() { - return true; - } - - @Override - public double getZoomToFit() { - //TODO - return 1; - } - - @Override - public Zoom getZoom() { - return null; - } - - private double zoom = 1.0; - - @Override - public synchronized void zoom(Zoom zoom) { - double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; - int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); - if (zoomint == 0) { - zoomint = 1; - } - if (zoomint > 32767) { - zoomint = 32767; - } - if (zoomint == 100) { - zoomint = 0; - } - - flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values - flash.Zoom(zoomint); - } - - public synchronized String getVariable(String name) throws IOException { - return flash.GetVariable(name); - } - - public synchronized void setVariable(String name, String value) throws IOException { - flash.SetVariable(name, value); - } - - public synchronized String call(String callString) throws IOException { - - return flash.CallFunction(callString); - } - - @Override - public synchronized int getCurrentFrame() { - if (flash == null) { - return 0; - } - try { - return flash.getFrameNum(); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized int getTotalFrames() { - if (flash == null) { - return 0; - } - try { - if (flash.getReadyState() == 4) { - return flash.getTotalFrames(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized void setBackground(Color color) { - try { - flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - public FlashPlayerPanel(Component frame) { - if (!Platform.isWindows()) { - throw new FlashUnsupportedException(); - } - - try { - Callable callable = new Callable() { - @Override - public ShockwaveFlash call() throws InterruptedException { - return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); - } - }; - - // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor - flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); - } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { - throw new FlashUnsupportedException(); - } - - flash.setAllowScriptAccess("always"); - try { - flash.setAllowNetworking("all"); - } catch (ActiveXException ex) { - // ignore - } - - flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { - fireMediaDisplayStateChanged(); - }); - - flash.addFlashCallListener((ActiveXEvent axe) -> { - String req = (String) axe.args.get("request"); - Matcher m = Pattern.compile("(.*)").matcher(req); - if (m.matches()) { - String funname = m.group(1); - String msg = m.group(2); - if (funname.equals("alert") || funname.equals("console.log")) { - if (Main.debugDialog != null) { - Main.debugDialog.log(funname + ":" + msg); - } - } - } - }); - - timer = new Timer(); - timer.schedule(new TimerTask() { - private boolean isPlaying = false; - - private int currentFrame = 0; - - @Override - public void run() { - if (closed) { - return; - } - try { - ShockwaveFlash flash1 = flash; - - boolean changed = false; - - if (flash1.getReadyState() >= 3) { - boolean isPlaying = flash1.IsPlaying(); - if (this.isPlaying != isPlaying) { - this.isPlaying = isPlaying; - } - - int currentFrame = flash1.CurrentFrame(); - if (this.currentFrame != currentFrame) { - this.currentFrame = currentFrame; - changed = true; - } - } else { - this.isPlaying = false; - } - - if (changed) { - fireMediaDisplayStateChanged(); - } - } catch (Exception ex) { - // ignore - cancel(); - } - } - }, 100, 100); - } - - public synchronized void stopSWF() { - displaySWF("-", null, 1); - stopped = true; - fireMediaDisplayStateChanged(); - } - - public synchronized boolean isStopped() { - return stopped; - } - - @Override - public BufferedImage printScreen() { - Point screenloc = getLocationOnScreen(); - try { - return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); - } catch (AWTException ex) { - return null; - } - } - - private String movieToPlay = null; - - private Thread playQueue; - - private final Object queueLock = new Object(); - - public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { - - // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors - if (playQueue == null) { - playQueue = new Thread() { - long lastTime; - - @Override - public void run() { - while (true) { - boolean empty; - synchronized (queueLock) { - empty = movieToPlay == null; - if (empty) { - try { - queueLock.wait(); - } catch (InterruptedException ex) { - break; - } - } - } - if (!empty) { - flash.setMovie(movieToPlay); - synchronized (queueLock) { - movieToPlay = null; - } - try { - Thread.sleep(setMovieDelay); - } catch (InterruptedException ex) { - break; - } - } - } - } - }; - playQueue.start(); - } - zoom = 1.0; - this.frameRate = frameRate; - if (bgColor != null) { - setBackground(bgColor); - } - synchronized (queueLock) { - movieToPlay = flashName; - queueLock.notify(); - } - - //play - stopped = false; - fireMediaDisplayStateChanged(); - } - - @Override - public synchronized void close() throws IOException { - timer.cancel(); - closed = true; - } - - @Override - public void pause() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void stop() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void rewind() { - try { - if (flash.getReadyState() >= 3) { - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void play() { - try { - if (flash.getReadyState() >= 3) { - flash.Play(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public boolean isPlaying() { - try { - if (flash.getReadyState() >= 3) { - return flash.IsPlaying(); - } else { - return false; - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - return false; - } - } - - @Override - public void setLoop(boolean loop - ) { - } - - @Override - public void gotoFrame(int frame - ) { - if (frame < 0) { - return; - } - if (frame >= getTotalFrames()) { - return; - } - try { - if (flash.getReadyState() >= 3) { - flash.GotoFrame(frame); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public float getFrameRate() { - return frameRate; - } - - @Override - public boolean isLoaded() { - return !isStopped(); - } - - public void fireMediaDisplayStateChanged() { - for (MediaDisplayListener l : listeners) { - l.mediaDisplayStateChanged(this); - } - } - - @Override - public void addEventListener(MediaDisplayListener listener) { - listeners.add(listener); - } - - @Override - public void removeEventListener(MediaDisplayListener listener) { - listeners.remove(listener); - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.player; + +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; +import com.jpexs.decompiler.flash.gui.Main; +import com.jpexs.helpers.CancellableWorker; +import com.jpexs.javactivex.ActiveX; +import com.jpexs.javactivex.ActiveXEvent; +import com.jpexs.javactivex.ActiveXException; +import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; +import com.sun.jna.Platform; +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Component; +import java.awt.Panel; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { + + private static final Logger logger = Logger.getLogger(FlashPlayerPanel.class.getName()); + + private final int setMovieDelay = Configuration.setMovieDelay.get(); + + private final List listeners = new ArrayList<>(); + + private final ShockwaveFlash flash; + + private final Timer timer; + + private boolean stopped = true; + + private boolean closed = false; + + private float frameRate; + + @Override + public boolean loopAvailable() { + return false; + } + + @Override + public boolean screenAvailable() { + return true; + } + + @Override + public boolean zoomAvailable() { + return true; + } + + @Override + public double getZoomToFit() { + //TODO + return 1; + } + + @Override + public Zoom getZoom() { + return null; + } + + private double zoom = 1.0; + + @Override + public synchronized void zoom(Zoom zoom) { + double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; + int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); + if (zoomint == 0) { + zoomint = 1; + } + if (zoomint > 32767) { + zoomint = 32767; + } + if (zoomint == 100) { + zoomint = 0; + } + + flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values + flash.Zoom(zoomint); + } + + public synchronized String getVariable(String name) throws IOException { + return flash.GetVariable(name); + } + + public synchronized void setVariable(String name, String value) throws IOException { + flash.SetVariable(name, value); + } + + public synchronized String call(String callString) throws IOException { + + return flash.CallFunction(callString); + } + + @Override + public synchronized int getCurrentFrame() { + if (flash == null) { + return 0; + } + try { + return flash.getFrameNum(); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized int getTotalFrames() { + if (flash == null) { + return 0; + } + try { + if (flash.getReadyState() == 4) { + return flash.getTotalFrames(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized void setBackground(Color color) { + try { + flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + public FlashPlayerPanel(Component frame) { + if (!Platform.isWindows()) { + throw new FlashUnsupportedException(); + } + + try { + Callable callable = new Callable() { + @Override + public ShockwaveFlash call() throws InterruptedException { + return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); + } + }; + + // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor + flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); + } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { + logger.log(Level.WARNING, "Cannot initialize flash panel", ex); + throw new FlashUnsupportedException(); + } + + flash.setAllowScriptAccess("always"); + try { + flash.setAllowNetworking("all"); + } catch (ActiveXException ex) { + // ignore + } + + flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { + fireMediaDisplayStateChanged(); + }); + + flash.addFlashCallListener((ActiveXEvent axe) -> { + String req = (String) axe.args.get("request"); + Matcher m = Pattern.compile("(.*)").matcher(req); + if (m.matches()) { + String funname = m.group(1); + String msg = m.group(2); + if (funname.equals("alert") || funname.equals("console.log")) { + if (Main.debugDialog != null) { + Main.debugDialog.log(funname + ":" + msg); + } + } + } + }); + + timer = new Timer(); + timer.schedule(new TimerTask() { + private boolean isPlaying = false; + + private int currentFrame = 0; + + @Override + public void run() { + if (closed) { + return; + } + try { + ShockwaveFlash flash1 = flash; + + boolean changed = false; + + if (flash1.getReadyState() >= 3) { + boolean isPlaying = flash1.IsPlaying(); + if (this.isPlaying != isPlaying) { + this.isPlaying = isPlaying; + } + + int currentFrame = flash1.CurrentFrame(); + if (this.currentFrame != currentFrame) { + this.currentFrame = currentFrame; + changed = true; + } + } else { + this.isPlaying = false; + } + + if (changed) { + fireMediaDisplayStateChanged(); + } + } catch (Exception ex) { + // ignore + cancel(); + } + } + }, 100, 100); + } + + public synchronized void stopSWF() { + displaySWF("-", null, 1); + stopped = true; + fireMediaDisplayStateChanged(); + } + + public synchronized boolean isStopped() { + return stopped; + } + + @Override + public BufferedImage printScreen() { + Point screenloc = getLocationOnScreen(); + try { + return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); + } catch (AWTException ex) { + return null; + } + } + + private String movieToPlay = null; + + private Thread playQueue; + + private final Object queueLock = new Object(); + + public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { + + // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors + if (playQueue == null) { + playQueue = new Thread() { + long lastTime; + + @Override + public void run() { + while (true) { + boolean empty; + synchronized (queueLock) { + empty = movieToPlay == null; + if (empty) { + try { + queueLock.wait(); + } catch (InterruptedException ex) { + break; + } + } + } + if (!empty) { + flash.setMovie(movieToPlay); + synchronized (queueLock) { + movieToPlay = null; + } + try { + Thread.sleep(setMovieDelay); + } catch (InterruptedException ex) { + break; + } + } + } + } + }; + playQueue.start(); + } + zoom = 1.0; + this.frameRate = frameRate; + if (bgColor != null) { + setBackground(bgColor); + } + synchronized (queueLock) { + movieToPlay = flashName; + queueLock.notify(); + } + + //play + stopped = false; + fireMediaDisplayStateChanged(); + } + + @Override + public synchronized void close() throws IOException { + timer.cancel(); + closed = true; + } + + @Override + public void pause() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void stop() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void rewind() { + try { + if (flash.getReadyState() >= 3) { + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void play() { + try { + if (flash.getReadyState() >= 3) { + flash.Play(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public boolean isPlaying() { + try { + if (flash.getReadyState() >= 3) { + return flash.IsPlaying(); + } else { + return false; + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + return false; + } + } + + @Override + public void setLoop(boolean loop + ) { + } + + @Override + public void gotoFrame(int frame + ) { + if (frame < 0) { + return; + } + if (frame >= getTotalFrames()) { + return; + } + try { + if (flash.getReadyState() >= 3) { + flash.GotoFrame(frame); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public float getFrameRate() { + return frameRate; + } + + @Override + public boolean isLoaded() { + return !isStopped(); + } + + public void fireMediaDisplayStateChanged() { + for (MediaDisplayListener l : listeners) { + l.mediaDisplayStateChanged(this); + } + } + + @Override + public void addEventListener(MediaDisplayListener listener) { + listeners.add(listener); + } + + @Override + public void removeEventListener(MediaDisplayListener listener) { + listeners.remove(listener); + } +} From 7f0ba33355dddc4b2397d5a2a1eeab2475a1600c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20Kurucz?= Date: Sat, 6 May 2017 01:43:25 +0200 Subject: [PATCH 044/114] Prevent impossible pushshort pcode generation edit actionscript --- .../decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java index 52a8ee326..d618f30be 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/IntegerValueAVM2Item.java @@ -137,7 +137,7 @@ public class IntegerValueAVM2Item extends NumberValueAVM2Item implements Integer if (value >= -128 && value <= 127) { ins = new AVM2Instruction(0, AVM2Instructions.PushByte, new int[]{(int) (long) value}); } else if (value >= -32768 && value <= 32767) { - ins = new AVM2Instruction(0, AVM2Instructions.PushShort, new int[]{((int) (long) value) & 0xffff}); + ins = new AVM2Instruction(0, AVM2Instructions.PushShort, new int[]{((int) (long) value)}); } else { ins = new AVM2Instruction(0, AVM2Instructions.PushInt, new int[]{((AVM2SourceGenerator) generator).abcIndex.getSelectedAbc().constants.getIntId(value, true)}); } From b7ec1ac83079f12fa2fa9086622bd232de337378 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 22 Jun 2017 13:15:43 +0200 Subject: [PATCH 045/114] #1401 SVG export: duplicate pattern IDs fixed --- CHANGELOG.md | 1 + .../morphshape/SVGMorphShapeExporter.java | 923 ++++----- .../exporters/shape/SVGShapeExporter.java | 526 ++--- .../decompiler/flash/tags/base/ImageTag.java | 562 ++--- .../flash/tags/base/MorphShapeTag.java | 654 +++--- .../decompiler/flash/tags/base/ShapeTag.java | 426 ++-- .../decompiler/flash/tags/base/TextTag.java | 1560 +++++++------- .../decompiler/flash/gui/DebuggerHandler.java | 1804 ++++++++--------- 8 files changed, 3231 insertions(+), 3225 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04351b801..e34f12ffa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to this project will be documented in this file. - [#1348] Cannot properly export frame with cyrillic symbols to SVG - [#1354] Various FLA export problem fixes - [#1367] Raw edit conditional type fix. +- [#1401] SVG export: duplicate pattern IDs fixed ## [10.0.0] - 2016-12-24 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java index 13d886e37..72680fc31 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java @@ -1,460 +1,463 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.morphshape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.GRADIENT; -import com.jpexs.decompiler.flash.types.GRADRECORD; -import com.jpexs.decompiler.flash.types.LINESTYLE2; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS, Claus Wahlers - */ -public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { - - protected Element path; - - protected int lastPatternId; - - private final Color defaultColor; - - private final SWF swf; - - private final SVGExporter exporter; - - public SVGMorphShapeExporter(SWF swf, SHAPE shape, SHAPE endShape, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { - super(shape, endShape, colorTransform, zoom); - this.swf = swf; - this.defaultColor = defaultColor; - this.exporter = exporter; - } - - @Override - public void beginFill(RGB color, RGB colorEnd) { - if (color == null) { - color = new RGB(defaultColor == null ? Color.black : defaultColor); - } - if (colorEnd == null) { - colorEnd = new RGB(defaultColor == null ? Color.black : defaultColor); - } - finalizePath(); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", color.toHexRGB()); - path.setAttribute("fill-rule", "evenodd"); - path.appendChild(createAnimateElement("fill", color.toHexRGB(), colorEnd.toHexRGB())); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - } - - @Override - public void beginGradientFill(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { - finalizePath(); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", "url(#gradient" + id + ")"); - path.setAttribute("fill-rule", "evenodd"); - exporter.addToDefs(gradient); - } - - @Override - public void beginBitmapFill(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform) { - finalizePath(); - ImageTag image = swf.getImage(bitmapId); - if (image != null) { - SerializableImage img = image.getImageCached(); - if (img != null) { - if (colorTransform != null) { - colorTransform.apply(img); - } - - int width = img.getWidth(); - int height = img.getHeight(); - lastPatternId++; - String patternId = "PatternID_" + lastPatternId; - ImageFormat format = image.getImageFormat(); - byte[] imageData = Helper.readStream(image.getImageData()); - String base64ImgData = Helper.byteArrayToBase64String(imageData); - path.setAttribute("style", "fill:url(#" + patternId + ")"); - Element pattern = exporter.createElement("pattern"); - pattern.setAttribute("id", patternId); - pattern.setAttribute("patternUnits", "userSpaceOnUse"); - pattern.setAttribute("overflow", "visible"); - pattern.setAttribute("width", "" + width); - pattern.setAttribute("height", "" + height); - pattern.setAttribute("viewBox", "0 0 " + width + " " + height); - if (matrix != null) { - matrix = matrix.clone(); - matrix.rotateSkew0 *= zoom / SWF.unitDivisor; - matrix.rotateSkew1 *= zoom / SWF.unitDivisor; - matrix.scaleX *= zoom / SWF.unitDivisor; - matrix.scaleY *= zoom / SWF.unitDivisor; - matrixEnd = matrixEnd.clone(); - matrixEnd.rotateSkew0 *= zoom / SWF.unitDivisor; - matrixEnd.rotateSkew1 *= zoom / SWF.unitDivisor; - matrixEnd.scaleX *= zoom / SWF.unitDivisor; - matrixEnd.scaleY *= zoom / SWF.unitDivisor; - addMatrixAnimation(pattern, "patternTransform", matrix, matrixEnd); - } - Element imageElement = exporter.createElement("image"); - imageElement.setAttribute("width", "" + width); - imageElement.setAttribute("height", "" + height); - imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); - pattern.appendChild(imageElement); - exporter.addToGroup(pattern); - } - } - } - - @Override - public void lineStyle(double thickness, double thicknessEnd, RGB color, RGB colorEnd, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { - finalizePath(); - thickness *= zoom / SWF.unitDivisor; - thicknessEnd *= zoom / SWF.unitDivisor; - path.setAttribute("fill", "none"); - if (color != null) { - path.setAttribute("stroke", color.toHexRGB()); - path.appendChild(createAnimateElement("stroke", color.toHexRGB(), colorEnd.toHexRGB())); - } - path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); - path.appendChild(createAnimateElement("stroke-width", thickness, thicknessEnd)); - - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - switch (startCaps) { - case LINESTYLE2.NO_CAP: - path.setAttribute("stroke-linecap", "butt"); - break; - case LINESTYLE2.SQUARE_CAP: - path.setAttribute("stroke-linecap", "square"); - break; - default: - path.setAttribute("stroke-linecap", "round"); - break; - } - switch (joints) { - case LINESTYLE2.BEVEL_JOIN: - path.setAttribute("stroke-linejoin", "bevel"); - break; - case LINESTYLE2.ROUND_JOIN: - path.setAttribute("stroke-linejoin", "round"); - break; - default: - path.setAttribute("stroke-linejoin", "miter"); - if (miterLimit >= 1 && miterLimit != 4f) { - path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); - } - break; - } - } - - @Override - public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { - path.removeAttribute("stroke-opacity"); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "url(#gradient" + id + ")"); - path.setAttribute("fill", "none"); - exporter.addToDefs(gradient); - } - - private Element createAnimateElement(String attributeName, Object startValue, Object endValue) { - Element animate = exporter.createElement("animate"); - animate.setAttribute("dur", "2s"); // todo - animate.setAttribute("repeatCount", "indefinite"); - animate.setAttribute("attributeName", attributeName); - animate.setAttribute("values", startValue + ";" + endValue); - return animate; - } - - @Override - protected void finalizePath() { - if (path != null && pathData != null && pathData.length() > 0) { - path.setAttribute("d", pathData.toString().trim()); - path.appendChild(createAnimateElement("d", pathData.toString().trim(), pathDataEnd.toString().trim())); - exporter.addToGroup(path); - } - path = exporter.createElement("path"); - super.finalizePath(); - } - - private void addMatrixAnimation(Element element, String attribute, Matrix matrix, Matrix matrixEnd) { - final int animationLength = 2; // todo - final String animationLengthStr = animationLength + "s"; - - element.setAttribute(attribute, matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); - - // QR decomposition - double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); - double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); - double a = matrix.scaleX; - double b = matrix.rotateSkew0; - double c = matrix.rotateSkew1; - double d = matrix.scaleY; - double r = Math.sqrt(a * a + b * b); - double det = a * d - b * c; - double rotate = roundPixels400(Math.signum(b) * Math.acos(a / r) * 180 / Math.PI); - double scaleX = roundPixels400(r); - double scaleY = roundPixels400(det / r); - double skewX = roundPixels400(Math.atan((a * c + b * d) / (r * r)) * 180 / Math.PI); - - double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); - double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); - a = matrixEnd.scaleX; - b = matrixEnd.rotateSkew0; - c = matrixEnd.rotateSkew1; - d = matrixEnd.scaleY; - double rEnd = Math.sqrt(a * a + b * b); - double detEnd = a * d - b * c; - double rotateEnd = roundPixels400(Math.signum(b) * Math.acos(a / rEnd) * 180 / Math.PI); - double scaleXEnd = roundPixels400(rEnd); - double scaleYEnd = roundPixels400(detEnd / rEnd); - double skewXEnd = roundPixels400(Math.atan((a * c + b * d) / (rEnd * rEnd)) * 180 / Math.PI); - - Element animateClear = exporter.createElement("animateTransform"); - animateClear.setAttribute("dur", animationLengthStr); - animateClear.setAttribute("repeatCount", "indefinite"); - animateClear.setAttribute("attributeName", attribute); - animateClear.setAttribute("type", "scale"); - animateClear.setAttribute("additive", "replace"); - animateClear.setAttribute("from", "1"); - animateClear.setAttribute("to", "1"); - - Element animateTranslate = exporter.createElement("animateTransform"); - animateTranslate.setAttribute("dur", animationLengthStr); - animateTranslate.setAttribute("repeatCount", "indefinite"); - animateTranslate.setAttribute("attributeName", attribute); - animateTranslate.setAttribute("type", "translate"); - animateTranslate.setAttribute("additive", "sum"); - animateTranslate.setAttribute("from", translateX + " " + translateY); - animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); - - Element animateRotate = exporter.createElement("animateTransform"); - animateRotate.setAttribute("dur", animationLengthStr); - animateRotate.setAttribute("repeatCount", "indefinite"); - animateRotate.setAttribute("attributeName", attribute); - animateRotate.setAttribute("type", "rotate"); - animateRotate.setAttribute("additive", "sum"); - animateRotate.setAttribute("from", Double.toString(rotate)); - animateRotate.setAttribute("to", Double.toString(rotateEnd)); - - Element animateScale = exporter.createElement("animateTransform"); - animateScale.setAttribute("dur", animationLengthStr); - animateScale.setAttribute("repeatCount", "indefinite"); - animateScale.setAttribute("attributeName", attribute); - animateScale.setAttribute("type", "scale"); - animateScale.setAttribute("additive", "sum"); - animateScale.setAttribute("from", scaleX + " " + scaleY); - animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); - - Element animateSkewX = exporter.createElement("animateTransform"); - animateSkewX.setAttribute("dur", animationLengthStr); - animateSkewX.setAttribute("repeatCount", "indefinite"); - animateSkewX.setAttribute("attributeName", attribute); - animateSkewX.setAttribute("type", "skewX"); - animateSkewX.setAttribute("additive", "sum"); - animateSkewX.setAttribute("from", Double.toString(skewX)); - animateSkewX.setAttribute("to", Double.toString(skewXEnd)); - - element.appendChild(animateClear); - element.appendChild(animateTranslate); - element.appendChild(animateRotate); - element.appendChild(animateScale); - element.appendChild(animateSkewX); - - /* - // LDU decomposition - - double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); - double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); - double a = matrix.scaleX; - double b = matrix.rotateSkew0; - double c = matrix.rotateSkew1; - double d = matrix.scaleY; - double det = a * d - b * c; - double skewY = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); - double scaleX = roundPixels400(a); - double scaleY = roundPixels400(det / a); - double skewX = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); - - double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); - double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); - a = matrixEnd.scaleX; - b = matrixEnd.rotateSkew0; - c = matrixEnd.rotateSkew1; - d = matrixEnd.scaleY; - double detEnd = a * d - b * c; - double skewYEnd = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); - double scaleXEnd = roundPixels400(a); - double scaleYEnd = roundPixels400(detEnd / a); - double skewXEnd = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); - - Element animateClear = exporter.createElement("animateTransform"); - animateClear.setAttribute("dur", animationLengthStr); - animateClear.setAttribute("repeatCount", "indefinite"); - animateClear.setAttribute("attributeName", attribute); - animateClear.setAttribute("type", "scale"); - animateClear.setAttribute("additive", "replace"); - animateClear.setAttribute("from", "1"); - animateClear.setAttribute("to", "1"); - - Element animateTranslate = exporter.createElement("animateTransform"); - animateTranslate.setAttribute("dur", animationLengthStr); - animateTranslate.setAttribute("repeatCount", "indefinite"); - animateTranslate.setAttribute("attributeName", attribute); - animateTranslate.setAttribute("type", "translate"); - animateTranslate.setAttribute("additive", "sum"); - animateTranslate.setAttribute("from", translateX + " " + translateY); - animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); - - Element animateSkewY = exporter.createElement("animateTransform"); - animateSkewY.setAttribute("dur", animationLengthStr); - animateSkewY.setAttribute("repeatCount", "indefinite"); - animateSkewY.setAttribute("attributeName", attribute); - animateSkewY.setAttribute("type", "skewY"); - animateSkewY.setAttribute("additive", "sum"); - animateSkewY.setAttribute("from", Double.toString(skewY)); - animateSkewY.setAttribute("to", Double.toString(skewYEnd)); - - Element animateScale = exporter.createElement("animateTransform"); - animateScale.setAttribute("dur", animationLengthStr); - animateScale.setAttribute("repeatCount", "indefinite"); - animateScale.setAttribute("attributeName", attribute); - animateScale.setAttribute("type", "scale"); - animateScale.setAttribute("additive", "sum"); - animateScale.setAttribute("from", scaleX + " " + scaleY); - animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); - - Element animateSkewX = exporter.createElement("animateTransform"); - animateSkewX.setAttribute("dur", animationLengthStr); - animateSkewX.setAttribute("repeatCount", "indefinite"); - animateSkewX.setAttribute("attributeName", attribute); - animateSkewX.setAttribute("type", "skewX"); - animateSkewX.setAttribute("additive", "sum"); - animateSkewX.setAttribute("from", Double.toString(skewX)); - animateSkewX.setAttribute("to", Double.toString(skewXEnd)); - - element.appendChild(animateClear); - element.appendChild(animateTranslate); - element.appendChild(animateSkewY); - element.appendChild(animateScale); - element.appendChild(animateSkewX);*/ - } - - protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio) { - gradient.setAttribute("gradientUnits", "userSpaceOnUse"); - if (type == FILLSTYLE.LINEAR_GRADIENT) { - gradient.setAttribute("x1", "-819.2"); - gradient.setAttribute("x2", "819.2"); - } else { - gradient.setAttribute("r", "819.2"); - gradient.setAttribute("cx", "0"); - gradient.setAttribute("cy", "0"); - if (focalPointRatio != 0) { - gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); - gradient.setAttribute("fy", "0"); - } - } - switch (spreadMethod) { - case GRADIENT.SPREAD_PAD_MODE: - gradient.setAttribute("spreadMethod", "pad"); - break; - case GRADIENT.SPREAD_REFLECT_MODE: - gradient.setAttribute("spreadMethod", "reflect"); - break; - case GRADIENT.SPREAD_REPEAT_MODE: - gradient.setAttribute("spreadMethod", "repeat"); - break; - } - if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { - gradient.setAttribute("color-interpolation", "linearRGB"); - } - if (matrix != null) { - addMatrixAnimation(gradient, "gradientTransform", matrix, matrixEnd); - } - for (int i = 0; i < gradientRecords.length; i++) { - GRADRECORD record = gradientRecords[i]; - GRADRECORD recordEnd = gradientRecordsEnd[i]; - Element gradientEntry = exporter.createElement("stop"); - gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); - gradientEntry.appendChild(createAnimateElement("offset", record.ratio / 255.0, recordEnd.ratio / 255.0)); - RGB color = record.color; - RGB colorEnd = recordEnd.color; - //if(colors.get(i) != 0) { - gradientEntry.setAttribute("stop-color", color.toHexRGB()); - gradientEntry.appendChild(createAnimateElement("stop-color", color.toHexRGB(), colorEnd.toHexRGB())); - //} - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - gradientEntry.appendChild(createAnimateElement("stop-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - gradient.appendChild(gradientEntry); - } - } - - protected double roundPixels400(double pixels) { - return Math.round(pixels * 10000) / 10000.0; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.morphshape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.GRADIENT; +import com.jpexs.decompiler.flash.types.GRADRECORD; +import com.jpexs.decompiler.flash.types.LINESTYLE2; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS, Claus Wahlers + */ +public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { + + protected Element path; + + protected int id; + + protected int lastPatternId; + + private final Color defaultColor; + + private final SWF swf; + + private final SVGExporter exporter; + + public SVGMorphShapeExporter(SWF swf, SHAPE shape, SHAPE endShape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { + super(shape, endShape, colorTransform, zoom); + this.swf = swf; + this.id = id; + this.defaultColor = defaultColor; + this.exporter = exporter; + } + + @Override + public void beginFill(RGB color, RGB colorEnd) { + if (color == null) { + color = new RGB(defaultColor == null ? Color.black : defaultColor); + } + if (colorEnd == null) { + colorEnd = new RGB(defaultColor == null ? Color.black : defaultColor); + } + finalizePath(); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", color.toHexRGB()); + path.setAttribute("fill-rule", "evenodd"); + path.appendChild(createAnimateElement("fill", color.toHexRGB(), colorEnd.toHexRGB())); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + } + + @Override + public void beginGradientFill(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { + finalizePath(); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", "url(#gradient" + id + ")"); + path.setAttribute("fill-rule", "evenodd"); + exporter.addToDefs(gradient); + } + + @Override + public void beginBitmapFill(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform) { + finalizePath(); + ImageTag image = swf.getImage(bitmapId); + if (image != null) { + SerializableImage img = image.getImageCached(); + if (img != null) { + if (colorTransform != null) { + colorTransform.apply(img); + } + + int width = img.getWidth(); + int height = img.getHeight(); + lastPatternId++; + String patternId = "PatternID_" + id + "_" + lastPatternId; + ImageFormat format = image.getImageFormat(); + byte[] imageData = Helper.readStream(image.getImageData()); + String base64ImgData = Helper.byteArrayToBase64String(imageData); + path.setAttribute("style", "fill:url(#" + patternId + ")"); + Element pattern = exporter.createElement("pattern"); + pattern.setAttribute("id", patternId); + pattern.setAttribute("patternUnits", "userSpaceOnUse"); + pattern.setAttribute("overflow", "visible"); + pattern.setAttribute("width", "" + width); + pattern.setAttribute("height", "" + height); + pattern.setAttribute("viewBox", "0 0 " + width + " " + height); + if (matrix != null) { + matrix = matrix.clone(); + matrix.rotateSkew0 *= zoom / SWF.unitDivisor; + matrix.rotateSkew1 *= zoom / SWF.unitDivisor; + matrix.scaleX *= zoom / SWF.unitDivisor; + matrix.scaleY *= zoom / SWF.unitDivisor; + matrixEnd = matrixEnd.clone(); + matrixEnd.rotateSkew0 *= zoom / SWF.unitDivisor; + matrixEnd.rotateSkew1 *= zoom / SWF.unitDivisor; + matrixEnd.scaleX *= zoom / SWF.unitDivisor; + matrixEnd.scaleY *= zoom / SWF.unitDivisor; + addMatrixAnimation(pattern, "patternTransform", matrix, matrixEnd); + } + Element imageElement = exporter.createElement("image"); + imageElement.setAttribute("width", "" + width); + imageElement.setAttribute("height", "" + height); + imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); + pattern.appendChild(imageElement); + exporter.addToGroup(pattern); + } + } + } + + @Override + public void lineStyle(double thickness, double thicknessEnd, RGB color, RGB colorEnd, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { + finalizePath(); + thickness *= zoom / SWF.unitDivisor; + thicknessEnd *= zoom / SWF.unitDivisor; + path.setAttribute("fill", "none"); + if (color != null) { + path.setAttribute("stroke", color.toHexRGB()); + path.appendChild(createAnimateElement("stroke", color.toHexRGB(), colorEnd.toHexRGB())); + } + path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); + path.appendChild(createAnimateElement("stroke-width", thickness, thicknessEnd)); + + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + switch (startCaps) { + case LINESTYLE2.NO_CAP: + path.setAttribute("stroke-linecap", "butt"); + break; + case LINESTYLE2.SQUARE_CAP: + path.setAttribute("stroke-linecap", "square"); + break; + default: + path.setAttribute("stroke-linecap", "round"); + break; + } + switch (joints) { + case LINESTYLE2.BEVEL_JOIN: + path.setAttribute("stroke-linejoin", "bevel"); + break; + case LINESTYLE2.ROUND_JOIN: + path.setAttribute("stroke-linejoin", "round"); + break; + default: + path.setAttribute("stroke-linejoin", "miter"); + if (miterLimit >= 1 && miterLimit != 4f) { + path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); + } + break; + } + } + + @Override + public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { + path.removeAttribute("stroke-opacity"); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "url(#gradient" + id + ")"); + path.setAttribute("fill", "none"); + exporter.addToDefs(gradient); + } + + private Element createAnimateElement(String attributeName, Object startValue, Object endValue) { + Element animate = exporter.createElement("animate"); + animate.setAttribute("dur", "2s"); // todo + animate.setAttribute("repeatCount", "indefinite"); + animate.setAttribute("attributeName", attributeName); + animate.setAttribute("values", startValue + ";" + endValue); + return animate; + } + + @Override + protected void finalizePath() { + if (path != null && pathData != null && pathData.length() > 0) { + path.setAttribute("d", pathData.toString().trim()); + path.appendChild(createAnimateElement("d", pathData.toString().trim(), pathDataEnd.toString().trim())); + exporter.addToGroup(path); + } + path = exporter.createElement("path"); + super.finalizePath(); + } + + private void addMatrixAnimation(Element element, String attribute, Matrix matrix, Matrix matrixEnd) { + final int animationLength = 2; // todo + final String animationLengthStr = animationLength + "s"; + + element.setAttribute(attribute, matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); + + // QR decomposition + double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); + double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); + double a = matrix.scaleX; + double b = matrix.rotateSkew0; + double c = matrix.rotateSkew1; + double d = matrix.scaleY; + double r = Math.sqrt(a * a + b * b); + double det = a * d - b * c; + double rotate = roundPixels400(Math.signum(b) * Math.acos(a / r) * 180 / Math.PI); + double scaleX = roundPixels400(r); + double scaleY = roundPixels400(det / r); + double skewX = roundPixels400(Math.atan((a * c + b * d) / (r * r)) * 180 / Math.PI); + + double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); + double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); + a = matrixEnd.scaleX; + b = matrixEnd.rotateSkew0; + c = matrixEnd.rotateSkew1; + d = matrixEnd.scaleY; + double rEnd = Math.sqrt(a * a + b * b); + double detEnd = a * d - b * c; + double rotateEnd = roundPixels400(Math.signum(b) * Math.acos(a / rEnd) * 180 / Math.PI); + double scaleXEnd = roundPixels400(rEnd); + double scaleYEnd = roundPixels400(detEnd / rEnd); + double skewXEnd = roundPixels400(Math.atan((a * c + b * d) / (rEnd * rEnd)) * 180 / Math.PI); + + Element animateClear = exporter.createElement("animateTransform"); + animateClear.setAttribute("dur", animationLengthStr); + animateClear.setAttribute("repeatCount", "indefinite"); + animateClear.setAttribute("attributeName", attribute); + animateClear.setAttribute("type", "scale"); + animateClear.setAttribute("additive", "replace"); + animateClear.setAttribute("from", "1"); + animateClear.setAttribute("to", "1"); + + Element animateTranslate = exporter.createElement("animateTransform"); + animateTranslate.setAttribute("dur", animationLengthStr); + animateTranslate.setAttribute("repeatCount", "indefinite"); + animateTranslate.setAttribute("attributeName", attribute); + animateTranslate.setAttribute("type", "translate"); + animateTranslate.setAttribute("additive", "sum"); + animateTranslate.setAttribute("from", translateX + " " + translateY); + animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); + + Element animateRotate = exporter.createElement("animateTransform"); + animateRotate.setAttribute("dur", animationLengthStr); + animateRotate.setAttribute("repeatCount", "indefinite"); + animateRotate.setAttribute("attributeName", attribute); + animateRotate.setAttribute("type", "rotate"); + animateRotate.setAttribute("additive", "sum"); + animateRotate.setAttribute("from", Double.toString(rotate)); + animateRotate.setAttribute("to", Double.toString(rotateEnd)); + + Element animateScale = exporter.createElement("animateTransform"); + animateScale.setAttribute("dur", animationLengthStr); + animateScale.setAttribute("repeatCount", "indefinite"); + animateScale.setAttribute("attributeName", attribute); + animateScale.setAttribute("type", "scale"); + animateScale.setAttribute("additive", "sum"); + animateScale.setAttribute("from", scaleX + " " + scaleY); + animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); + + Element animateSkewX = exporter.createElement("animateTransform"); + animateSkewX.setAttribute("dur", animationLengthStr); + animateSkewX.setAttribute("repeatCount", "indefinite"); + animateSkewX.setAttribute("attributeName", attribute); + animateSkewX.setAttribute("type", "skewX"); + animateSkewX.setAttribute("additive", "sum"); + animateSkewX.setAttribute("from", Double.toString(skewX)); + animateSkewX.setAttribute("to", Double.toString(skewXEnd)); + + element.appendChild(animateClear); + element.appendChild(animateTranslate); + element.appendChild(animateRotate); + element.appendChild(animateScale); + element.appendChild(animateSkewX); + + /* + // LDU decomposition + + double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); + double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); + double a = matrix.scaleX; + double b = matrix.rotateSkew0; + double c = matrix.rotateSkew1; + double d = matrix.scaleY; + double det = a * d - b * c; + double skewY = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); + double scaleX = roundPixels400(a); + double scaleY = roundPixels400(det / a); + double skewX = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); + + double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); + double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); + a = matrixEnd.scaleX; + b = matrixEnd.rotateSkew0; + c = matrixEnd.rotateSkew1; + d = matrixEnd.scaleY; + double detEnd = a * d - b * c; + double skewYEnd = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); + double scaleXEnd = roundPixels400(a); + double scaleYEnd = roundPixels400(detEnd / a); + double skewXEnd = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); + + Element animateClear = exporter.createElement("animateTransform"); + animateClear.setAttribute("dur", animationLengthStr); + animateClear.setAttribute("repeatCount", "indefinite"); + animateClear.setAttribute("attributeName", attribute); + animateClear.setAttribute("type", "scale"); + animateClear.setAttribute("additive", "replace"); + animateClear.setAttribute("from", "1"); + animateClear.setAttribute("to", "1"); + + Element animateTranslate = exporter.createElement("animateTransform"); + animateTranslate.setAttribute("dur", animationLengthStr); + animateTranslate.setAttribute("repeatCount", "indefinite"); + animateTranslate.setAttribute("attributeName", attribute); + animateTranslate.setAttribute("type", "translate"); + animateTranslate.setAttribute("additive", "sum"); + animateTranslate.setAttribute("from", translateX + " " + translateY); + animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); + + Element animateSkewY = exporter.createElement("animateTransform"); + animateSkewY.setAttribute("dur", animationLengthStr); + animateSkewY.setAttribute("repeatCount", "indefinite"); + animateSkewY.setAttribute("attributeName", attribute); + animateSkewY.setAttribute("type", "skewY"); + animateSkewY.setAttribute("additive", "sum"); + animateSkewY.setAttribute("from", Double.toString(skewY)); + animateSkewY.setAttribute("to", Double.toString(skewYEnd)); + + Element animateScale = exporter.createElement("animateTransform"); + animateScale.setAttribute("dur", animationLengthStr); + animateScale.setAttribute("repeatCount", "indefinite"); + animateScale.setAttribute("attributeName", attribute); + animateScale.setAttribute("type", "scale"); + animateScale.setAttribute("additive", "sum"); + animateScale.setAttribute("from", scaleX + " " + scaleY); + animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); + + Element animateSkewX = exporter.createElement("animateTransform"); + animateSkewX.setAttribute("dur", animationLengthStr); + animateSkewX.setAttribute("repeatCount", "indefinite"); + animateSkewX.setAttribute("attributeName", attribute); + animateSkewX.setAttribute("type", "skewX"); + animateSkewX.setAttribute("additive", "sum"); + animateSkewX.setAttribute("from", Double.toString(skewX)); + animateSkewX.setAttribute("to", Double.toString(skewXEnd)); + + element.appendChild(animateClear); + element.appendChild(animateTranslate); + element.appendChild(animateSkewY); + element.appendChild(animateScale); + element.appendChild(animateSkewX);*/ + } + + protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio) { + gradient.setAttribute("gradientUnits", "userSpaceOnUse"); + if (type == FILLSTYLE.LINEAR_GRADIENT) { + gradient.setAttribute("x1", "-819.2"); + gradient.setAttribute("x2", "819.2"); + } else { + gradient.setAttribute("r", "819.2"); + gradient.setAttribute("cx", "0"); + gradient.setAttribute("cy", "0"); + if (focalPointRatio != 0) { + gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); + gradient.setAttribute("fy", "0"); + } + } + switch (spreadMethod) { + case GRADIENT.SPREAD_PAD_MODE: + gradient.setAttribute("spreadMethod", "pad"); + break; + case GRADIENT.SPREAD_REFLECT_MODE: + gradient.setAttribute("spreadMethod", "reflect"); + break; + case GRADIENT.SPREAD_REPEAT_MODE: + gradient.setAttribute("spreadMethod", "repeat"); + break; + } + if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { + gradient.setAttribute("color-interpolation", "linearRGB"); + } + if (matrix != null) { + addMatrixAnimation(gradient, "gradientTransform", matrix, matrixEnd); + } + for (int i = 0; i < gradientRecords.length; i++) { + GRADRECORD record = gradientRecords[i]; + GRADRECORD recordEnd = gradientRecordsEnd[i]; + Element gradientEntry = exporter.createElement("stop"); + gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); + gradientEntry.appendChild(createAnimateElement("offset", record.ratio / 255.0, recordEnd.ratio / 255.0)); + RGB color = record.color; + RGB colorEnd = recordEnd.color; + //if(colors.get(i) != 0) { + gradientEntry.setAttribute("stop-color", color.toHexRGB()); + gradientEntry.appendChild(createAnimateElement("stop-color", color.toHexRGB(), colorEnd.toHexRGB())); + //} + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + gradientEntry.appendChild(createAnimateElement("stop-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + gradient.appendChild(gradientEntry); + } + } + + protected double roundPixels400(double pixels) { + return Math.round(pixels * 10000) / 10000.0; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java index 7d8539dcb..252012bab 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java @@ -1,262 +1,264 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.shape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.GRADIENT; -import com.jpexs.decompiler.flash.types.GRADRECORD; -import com.jpexs.decompiler.flash.types.LINESTYLE2; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS, Claus Wahlers - */ -public class SVGShapeExporter extends DefaultSVGShapeExporter { - - protected Element path; - - protected int lastPatternId; - - private final Color defaultColor; - - private final SWF swf; - - private final SVGExporter exporter; - - public SVGShapeExporter(SWF swf, SHAPE shape, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { - super(swf, shape, colorTransform, zoom); - this.swf = swf; - this.defaultColor = defaultColor; - this.exporter = exporter; - } - - @Override - public void beginFill(RGB color) { - if (color == null && defaultColor != null) { - color = new RGB(defaultColor); - } - finalizePath(); - path.setAttribute("stroke", "none"); - if (color != null) { - path.setAttribute("fill", color.toHexRGB()); - } - path.setAttribute("fill-rule", "evenodd"); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - } - - @Override - public void beginGradientFill(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - finalizePath(); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - String gradientId = "gradient" + id; - gradient.setAttribute("id", gradientId); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", "url(#" + gradientId + ")"); - path.setAttribute("fill-rule", "evenodd"); - exporter.addToDefs(gradient); - } - - @Override - public void beginBitmapFill(int bitmapId, Matrix matrix, boolean repeat, boolean smooth, ColorTransform colorTransform) { - finalizePath(); - ImageTag image = swf.getImage(bitmapId); - if (image != null) { - SerializableImage img = image.getImageCached(); - if (img != null) { - if (colorTransform != null) { - colorTransform.apply(img); - } - - int width = img.getWidth(); - int height = img.getHeight(); - lastPatternId++; - String patternId = "PatternID_"; - patternId += lastPatternId; - ImageFormat format = image.getImageFormat(); - byte[] imageData = Helper.readStream(image.getImageData()); - String base64ImgData = Helper.byteArrayToBase64String(imageData); - path.setAttribute("style", "fill:url(#" + patternId + ")"); - Element pattern = exporter.createElement("pattern"); - pattern.setAttribute("id", patternId); - pattern.setAttribute("patternUnits", "userSpaceOnUse"); - pattern.setAttribute("overflow", "visible"); - pattern.setAttribute("width", "" + width); - pattern.setAttribute("height", "" + height); - pattern.setAttribute("viewBox", "0 0 " + width + " " + height); - if (matrix != null) { - pattern.setAttribute("patternTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, SWF.unitDivisor / zoom)); - } - Element imageElement = exporter.createElement("image"); - imageElement.setAttribute("width", "" + width); - imageElement.setAttribute("height", "" + height); - imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); - pattern.appendChild(imageElement); - exporter.addToGroup(pattern); - return; - } - } - - path.setAttribute("fill", "#ff0000"); - } - - @Override - public void lineStyle(double thickness, RGB color, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { - finalizePath(); - thickness *= zoom / SWF.unitDivisor; - path.setAttribute("fill", "none"); - if (color != null) { - path.setAttribute("stroke", color.toHexRGB()); - } - path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - switch (startCaps) { - case LINESTYLE2.NO_CAP: - path.setAttribute("stroke-linecap", "butt"); - break; - case LINESTYLE2.SQUARE_CAP: - path.setAttribute("stroke-linecap", "square"); - break; - default: - path.setAttribute("stroke-linecap", "round"); - break; - } - switch (joints) { - case LINESTYLE2.BEVEL_JOIN: - path.setAttribute("stroke-linejoin", "bevel"); - break; - case LINESTYLE2.ROUND_JOIN: - path.setAttribute("stroke-linejoin", "round"); - break; - default: - path.setAttribute("stroke-linejoin", "miter"); - if (miterLimit >= 1 && miterLimit != 4f) { - path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); - } - break; - } - } - - @Override - public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - path.removeAttribute("stroke-opacity"); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "url(#gradient" + id + ")"); - path.setAttribute("fill", "none"); - exporter.addToDefs(gradient); - } - - @Override - protected void finalizePath() { - if (path != null && pathData != null && pathData.length() > 0) { - path.setAttribute("d", pathData.toString().trim()); - exporter.addToGroup(path); - } - path = exporter.createElement("path"); - super.finalizePath(); - } - - protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - gradient.setAttribute("gradientUnits", "userSpaceOnUse"); - if (type == FILLSTYLE.LINEAR_GRADIENT) { - gradient.setAttribute("x1", "-819.2"); - gradient.setAttribute("x2", "819.2"); - } else { - gradient.setAttribute("r", "819.2"); - gradient.setAttribute("cx", "0"); - gradient.setAttribute("cy", "0"); - if (focalPointRatio != 0) { - gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); - gradient.setAttribute("fy", "0"); - } - } - switch (spreadMethod) { - case GRADIENT.SPREAD_PAD_MODE: - gradient.setAttribute("spreadMethod", "pad"); - break; - case GRADIENT.SPREAD_REFLECT_MODE: - gradient.setAttribute("spreadMethod", "reflect"); - break; - case GRADIENT.SPREAD_REPEAT_MODE: - gradient.setAttribute("spreadMethod", "repeat"); - break; - } - if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { - gradient.setAttribute("color-interpolation", "linearRGB"); - } - if (matrix != null) { - gradient.setAttribute("gradientTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); - } - for (int i = 0; i < gradientRecords.length; i++) { - GRADRECORD record = gradientRecords[i]; - Element gradientEntry = exporter.createElement("stop"); - gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); - RGB color = record.color; - //if(colors.get(i) != 0) { - gradientEntry.setAttribute("stop-color", color.toHexRGB()); - //} - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - gradient.appendChild(gradientEntry); - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.shape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.GRADIENT; +import com.jpexs.decompiler.flash.types.GRADRECORD; +import com.jpexs.decompiler.flash.types.LINESTYLE2; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS, Claus Wahlers + */ +public class SVGShapeExporter extends DefaultSVGShapeExporter { + + protected Element path; + + protected int id; + + protected int lastPatternId; + + private final Color defaultColor; + + private final SWF swf; + + private final SVGExporter exporter; + + public SVGShapeExporter(SWF swf, SHAPE shape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { + super(swf, shape, colorTransform, zoom); + this.swf = swf; + this.id = id; + this.defaultColor = defaultColor; + this.exporter = exporter; + } + + @Override + public void beginFill(RGB color) { + if (color == null && defaultColor != null) { + color = new RGB(defaultColor); + } + finalizePath(); + path.setAttribute("stroke", "none"); + if (color != null) { + path.setAttribute("fill", color.toHexRGB()); + } + path.setAttribute("fill-rule", "evenodd"); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + } + + @Override + public void beginGradientFill(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + finalizePath(); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + String gradientId = "gradient" + id; + gradient.setAttribute("id", gradientId); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", "url(#" + gradientId + ")"); + path.setAttribute("fill-rule", "evenodd"); + exporter.addToDefs(gradient); + } + + @Override + public void beginBitmapFill(int bitmapId, Matrix matrix, boolean repeat, boolean smooth, ColorTransform colorTransform) { + finalizePath(); + ImageTag image = swf.getImage(bitmapId); + if (image != null) { + SerializableImage img = image.getImageCached(); + if (img != null) { + if (colorTransform != null) { + colorTransform.apply(img); + } + + int width = img.getWidth(); + int height = img.getHeight(); + lastPatternId++; + String patternId = "PatternID_" + id + "_" + lastPatternId; + ImageFormat format = image.getImageFormat(); + byte[] imageData = Helper.readStream(image.getImageData()); + String base64ImgData = Helper.byteArrayToBase64String(imageData); + path.setAttribute("style", "fill:url(#" + patternId + ")"); + Element pattern = exporter.createElement("pattern"); + pattern.setAttribute("id", patternId); + pattern.setAttribute("patternUnits", "userSpaceOnUse"); + pattern.setAttribute("overflow", "visible"); + pattern.setAttribute("width", "" + width); + pattern.setAttribute("height", "" + height); + pattern.setAttribute("viewBox", "0 0 " + width + " " + height); + if (matrix != null) { + pattern.setAttribute("patternTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, SWF.unitDivisor / zoom)); + } + Element imageElement = exporter.createElement("image"); + imageElement.setAttribute("width", "" + width); + imageElement.setAttribute("height", "" + height); + imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); + pattern.appendChild(imageElement); + exporter.addToGroup(pattern); + return; + } + } + + path.setAttribute("fill", "#ff0000"); + } + + @Override + public void lineStyle(double thickness, RGB color, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { + finalizePath(); + thickness *= zoom / SWF.unitDivisor; + path.setAttribute("fill", "none"); + if (color != null) { + path.setAttribute("stroke", color.toHexRGB()); + } + path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + switch (startCaps) { + case LINESTYLE2.NO_CAP: + path.setAttribute("stroke-linecap", "butt"); + break; + case LINESTYLE2.SQUARE_CAP: + path.setAttribute("stroke-linecap", "square"); + break; + default: + path.setAttribute("stroke-linecap", "round"); + break; + } + switch (joints) { + case LINESTYLE2.BEVEL_JOIN: + path.setAttribute("stroke-linejoin", "bevel"); + break; + case LINESTYLE2.ROUND_JOIN: + path.setAttribute("stroke-linejoin", "round"); + break; + default: + path.setAttribute("stroke-linejoin", "miter"); + if (miterLimit >= 1 && miterLimit != 4f) { + path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); + } + break; + } + } + + @Override + public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + path.removeAttribute("stroke-opacity"); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "url(#gradient" + id + ")"); + path.setAttribute("fill", "none"); + exporter.addToDefs(gradient); + } + + @Override + protected void finalizePath() { + if (path != null && pathData != null && pathData.length() > 0) { + path.setAttribute("d", pathData.toString().trim()); + exporter.addToGroup(path); + } + path = exporter.createElement("path"); + super.finalizePath(); + } + + protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + gradient.setAttribute("gradientUnits", "userSpaceOnUse"); + if (type == FILLSTYLE.LINEAR_GRADIENT) { + gradient.setAttribute("x1", "-819.2"); + gradient.setAttribute("x2", "819.2"); + } else { + gradient.setAttribute("r", "819.2"); + gradient.setAttribute("cx", "0"); + gradient.setAttribute("cy", "0"); + if (focalPointRatio != 0) { + gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); + gradient.setAttribute("fy", "0"); + } + } + switch (spreadMethod) { + case GRADIENT.SPREAD_PAD_MODE: + gradient.setAttribute("spreadMethod", "pad"); + break; + case GRADIENT.SPREAD_REFLECT_MODE: + gradient.setAttribute("spreadMethod", "reflect"); + break; + case GRADIENT.SPREAD_REPEAT_MODE: + gradient.setAttribute("spreadMethod", "repeat"); + break; + } + if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { + gradient.setAttribute("color-interpolation", "linearRGB"); + } + if (matrix != null) { + gradient.setAttribute("gradientTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); + } + for (int i = 0; i < gradientRecords.length; i++) { + GRADRECORD record = gradientRecords[i]; + Element gradientEntry = exporter.createElement("stop"); + gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); + RGB color = record.color; + //if(colors.get(i) != 0) { + gradientEntry.setAttribute("stop-color", color.toHexRGB()); + //} + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + gradient.appendChild(gradientEntry); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java index bf3f8b40c..b5e9386e8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java @@ -1,281 +1,281 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.ImageHelper; -import com.jpexs.decompiler.flash.tags.TagInfo; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.LINESTYLE; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MATRIX; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Dimension; -import java.awt.Shape; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Set; - -/** - * - * @author JPEXS - */ -public abstract class ImageTag extends DrawableTag { - - @SWFType(BasicType.UI16) - public int characterID; - - protected SerializableImage cachedImage; - - public ImageTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract InputStream getOriginalImageData(); - - protected abstract SerializableImage getImage(); - - public abstract Dimension getImageDimension(); - - public abstract void setImage(byte[] data) throws IOException; - - public abstract ImageFormat getImageFormat(); - - public abstract ImageFormat getOriginalImageFormat(); - - public boolean importSupported() { - return true; - } - - public static ImageFormat getImageFormat(byte[] data) { - return getImageFormat(new ByteArrayRange(data)); - } - - public static ImageFormat getImageFormat(ByteArrayRange data) { - if (hasErrorHeader(data)) { - return ImageFormat.JPEG; - } - - if (data.getLength() > 2 && ((data.get(0) & 0xff) == 0xff) && ((data.get(1) & 0xff) == 0xd8)) { - return ImageFormat.JPEG; - } - - if (data.getLength() > 6 && ((data.get(0) & 0xff) == 0x47) && ((data.get(1) & 0xff) == 0x49) && ((data.get(2) & 0xff) == 0x46) && ((data.get(3) & 0xff) == 0x38) && ((data.get(4) & 0xff) == 0x39) && ((data.get(5) & 0xff) == 0x61)) { - return ImageFormat.GIF; - } - - if (data.getLength() > 8 && ((data.get(0) & 0xff) == 0x89) && ((data.get(1) & 0xff) == 0x50) && ((data.get(2) & 0xff) == 0x4e) && ((data.get(3) & 0xff) == 0x47) && ((data.get(4) & 0xff) == 0x0d) && ((data.get(5) & 0xff) == 0x0a) && ((data.get(6) & 0xff) == 0x1a) && ((data.get(7) & 0xff) == 0x0a)) { - return ImageFormat.PNG; - } - - return ImageFormat.UNKNOWN; - } - - public SerializableImage getImageCached() { - if (cachedImage != null) { - return cachedImage; - } - - SerializableImage image = getImage(); - if (Configuration.cacheImages.get()) { - cachedImage = image; - } - - return image; - } - - public InputStream getImageData() { - InputStream is = getOriginalImageData(); - if (is != null) { - return is; - } - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageHelper.write(getImage().getBufferedImage(), getImageFormat(), baos); - return new ByteArrayInputStream(baos.toByteArray()); - } - - public static boolean hasErrorHeader(byte[] data) { - return hasErrorHeader(new ByteArrayRange(data)); - } - - public static boolean hasErrorHeader(ByteArrayRange data) { - if (data.getLength() > 4) { - if ((data.get(0) & 0xff) == 0xff && (data.get(1) & 0xff) == 0xd9 - && (data.get(2) & 0xff) == 0xff && (data.get(3) & 0xff) == 0xd8) { - return true; - } - } - return false; - } - - private SHAPEWITHSTYLE getShape() { - RECT rect = getRect(); - return getShape(rect, false); - } - - public SHAPEWITHSTYLE getShape(RECT rect, boolean fill) { - boolean translated = rect.Xmin != 0 || rect.Ymin != 0; - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = new FILLSTYLEARRAY(); - shape.fillStyles.fillStyles = new FILLSTYLE[1]; - FILLSTYLE fillStyle = new FILLSTYLE(); - fillStyle.fillStyleType = Configuration.shapeImportUseNonSmoothedFill.get() - ? FILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP : FILLSTYLE.REPEATING_BITMAP; - fillStyle.bitmapId = getCharacterId(); - MATRIX matrix = new MATRIX(); - matrix.hasScale = true; - if (fill) { - RECT imageRect = getRect(); - matrix.scaleX = (int) ((((long) SWF.unitDivisor) << 16) * rect.getWidth() / imageRect.getWidth()); - matrix.scaleY = (int) ((((long) SWF.unitDivisor) << 16) * rect.getHeight() / imageRect.getHeight()); - } else { - matrix.scaleX = ((int) SWF.unitDivisor) << 16; - matrix.scaleY = matrix.scaleX; - } - if (translated) { - matrix.translateX = rect.Xmin; - matrix.translateY = rect.Ymin; - } - fillStyle.bitmapMatrix = matrix; - shape.fillStyles.fillStyles[0] = fillStyle; - - shape.lineStyles = new LINESTYLEARRAY(); - shape.lineStyles.lineStyles = new LINESTYLE[0]; - shape.shapeRecords = new ArrayList<>(); - StyleChangeRecord style = new StyleChangeRecord(); - style.stateFillStyle0 = true; - style.fillStyle0 = 1; - style.stateMoveTo = true; - if (translated) { - style.moveDeltaX = rect.Xmin; - style.moveDeltaY = rect.Ymin; - } - shape.shapeRecords.add(style); - StraightEdgeRecord top = new StraightEdgeRecord(); - top.generalLineFlag = true; - top.deltaX = rect.getWidth(); - StraightEdgeRecord right = new StraightEdgeRecord(); - right.generalLineFlag = true; - right.deltaY = rect.getHeight(); - StraightEdgeRecord bottom = new StraightEdgeRecord(); - bottom.generalLineFlag = true; - bottom.deltaX = -rect.getWidth(); - StraightEdgeRecord left = new StraightEdgeRecord(); - left.generalLineFlag = true; - left.deltaY = -rect.getHeight(); - shape.shapeRecords.add(top); - shape.shapeRecords.add(right); - shape.shapeRecords.add(bottom); - shape.shapeRecords.add(left); - shape.shapeRecords.add(new EndShapeRecord()); - return shape; - } - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - @Override - public RECT getRect(Set added) { - Dimension dimension = getImageDimension(); - int widthInTwips = (int) (dimension.getWidth() * SWF.unitDivisor); - int heightInTwips = (int) (dimension.getHeight() * SWF.unitDivisor); - return new RECT(0, widthInTwips, 0, heightInTwips); - } - - @Override - public int getUsedParameters() { - return 0; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShape().getOutline(swf, stroked)); - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - BitmapExporter.export(swf, getShape(), null, image, transformation, strokeTransformation, colorTransform); - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShape(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShape(), null, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - } - - @Override - public int getNumFrames() { - return 1; - } - - @Override - public boolean isSingleFrame() { - return true; - } - - public void clearCache() { - cachedImage = null; - } - - @Override - public void getTagInfo(TagInfo tagInfo) { - super.getTagInfo(tagInfo); - Dimension dimension = getImageDimension(); - tagInfo.addInfo("general", "width", dimension.getWidth()); - tagInfo.addInfo("general", "height", dimension.getHeight()); - } - - @Override - public int getCharacterId() { - return characterID; - } - - @Override - public void setCharacterId(int characterId) { - this.characterID = characterId; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.ImageHelper; +import com.jpexs.decompiler.flash.tags.TagInfo; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.LINESTYLE; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MATRIX; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Dimension; +import java.awt.Shape; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public abstract class ImageTag extends DrawableTag { + + @SWFType(BasicType.UI16) + public int characterID; + + protected SerializableImage cachedImage; + + public ImageTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract InputStream getOriginalImageData(); + + protected abstract SerializableImage getImage(); + + public abstract Dimension getImageDimension(); + + public abstract void setImage(byte[] data) throws IOException; + + public abstract ImageFormat getImageFormat(); + + public abstract ImageFormat getOriginalImageFormat(); + + public boolean importSupported() { + return true; + } + + public static ImageFormat getImageFormat(byte[] data) { + return getImageFormat(new ByteArrayRange(data)); + } + + public static ImageFormat getImageFormat(ByteArrayRange data) { + if (hasErrorHeader(data)) { + return ImageFormat.JPEG; + } + + if (data.getLength() > 2 && ((data.get(0) & 0xff) == 0xff) && ((data.get(1) & 0xff) == 0xd8)) { + return ImageFormat.JPEG; + } + + if (data.getLength() > 6 && ((data.get(0) & 0xff) == 0x47) && ((data.get(1) & 0xff) == 0x49) && ((data.get(2) & 0xff) == 0x46) && ((data.get(3) & 0xff) == 0x38) && ((data.get(4) & 0xff) == 0x39) && ((data.get(5) & 0xff) == 0x61)) { + return ImageFormat.GIF; + } + + if (data.getLength() > 8 && ((data.get(0) & 0xff) == 0x89) && ((data.get(1) & 0xff) == 0x50) && ((data.get(2) & 0xff) == 0x4e) && ((data.get(3) & 0xff) == 0x47) && ((data.get(4) & 0xff) == 0x0d) && ((data.get(5) & 0xff) == 0x0a) && ((data.get(6) & 0xff) == 0x1a) && ((data.get(7) & 0xff) == 0x0a)) { + return ImageFormat.PNG; + } + + return ImageFormat.UNKNOWN; + } + + public SerializableImage getImageCached() { + if (cachedImage != null) { + return cachedImage; + } + + SerializableImage image = getImage(); + if (Configuration.cacheImages.get()) { + cachedImage = image; + } + + return image; + } + + public InputStream getImageData() { + InputStream is = getOriginalImageData(); + if (is != null) { + return is; + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageHelper.write(getImage().getBufferedImage(), getImageFormat(), baos); + return new ByteArrayInputStream(baos.toByteArray()); + } + + public static boolean hasErrorHeader(byte[] data) { + return hasErrorHeader(new ByteArrayRange(data)); + } + + public static boolean hasErrorHeader(ByteArrayRange data) { + if (data.getLength() > 4) { + if ((data.get(0) & 0xff) == 0xff && (data.get(1) & 0xff) == 0xd9 + && (data.get(2) & 0xff) == 0xff && (data.get(3) & 0xff) == 0xd8) { + return true; + } + } + return false; + } + + private SHAPEWITHSTYLE getShape() { + RECT rect = getRect(); + return getShape(rect, false); + } + + public SHAPEWITHSTYLE getShape(RECT rect, boolean fill) { + boolean translated = rect.Xmin != 0 || rect.Ymin != 0; + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = new FILLSTYLEARRAY(); + shape.fillStyles.fillStyles = new FILLSTYLE[1]; + FILLSTYLE fillStyle = new FILLSTYLE(); + fillStyle.fillStyleType = Configuration.shapeImportUseNonSmoothedFill.get() + ? FILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP : FILLSTYLE.REPEATING_BITMAP; + fillStyle.bitmapId = getCharacterId(); + MATRIX matrix = new MATRIX(); + matrix.hasScale = true; + if (fill) { + RECT imageRect = getRect(); + matrix.scaleX = (int) ((((long) SWF.unitDivisor) << 16) * rect.getWidth() / imageRect.getWidth()); + matrix.scaleY = (int) ((((long) SWF.unitDivisor) << 16) * rect.getHeight() / imageRect.getHeight()); + } else { + matrix.scaleX = ((int) SWF.unitDivisor) << 16; + matrix.scaleY = matrix.scaleX; + } + if (translated) { + matrix.translateX = rect.Xmin; + matrix.translateY = rect.Ymin; + } + fillStyle.bitmapMatrix = matrix; + shape.fillStyles.fillStyles[0] = fillStyle; + + shape.lineStyles = new LINESTYLEARRAY(); + shape.lineStyles.lineStyles = new LINESTYLE[0]; + shape.shapeRecords = new ArrayList<>(); + StyleChangeRecord style = new StyleChangeRecord(); + style.stateFillStyle0 = true; + style.fillStyle0 = 1; + style.stateMoveTo = true; + if (translated) { + style.moveDeltaX = rect.Xmin; + style.moveDeltaY = rect.Ymin; + } + shape.shapeRecords.add(style); + StraightEdgeRecord top = new StraightEdgeRecord(); + top.generalLineFlag = true; + top.deltaX = rect.getWidth(); + StraightEdgeRecord right = new StraightEdgeRecord(); + right.generalLineFlag = true; + right.deltaY = rect.getHeight(); + StraightEdgeRecord bottom = new StraightEdgeRecord(); + bottom.generalLineFlag = true; + bottom.deltaX = -rect.getWidth(); + StraightEdgeRecord left = new StraightEdgeRecord(); + left.generalLineFlag = true; + left.deltaY = -rect.getHeight(); + shape.shapeRecords.add(top); + shape.shapeRecords.add(right); + shape.shapeRecords.add(bottom); + shape.shapeRecords.add(left); + shape.shapeRecords.add(new EndShapeRecord()); + return shape; + } + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + @Override + public RECT getRect(Set added) { + Dimension dimension = getImageDimension(); + int widthInTwips = (int) (dimension.getWidth() * SWF.unitDivisor); + int heightInTwips = (int) (dimension.getHeight() * SWF.unitDivisor); + return new RECT(0, widthInTwips, 0, heightInTwips); + } + + @Override + public int getUsedParameters() { + return 0; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShape().getOutline(swf, stroked)); + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + BitmapExporter.export(swf, getShape(), null, image, transformation, strokeTransformation, colorTransform); + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShape(), getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShape(), null, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + } + + @Override + public int getNumFrames() { + return 1; + } + + @Override + public boolean isSingleFrame() { + return true; + } + + public void clearCache() { + cachedImage = null; + } + + @Override + public void getTagInfo(TagInfo tagInfo) { + super.getTagInfo(tagInfo); + Dimension dimension = getImageDimension(); + tagInfo.addInfo("general", "width", dimension.getWidth()); + tagInfo.addInfo("general", "height", dimension.getHeight()); + } + + @Override + public int getCharacterId() { + return characterID; + } + + @Override + public void setCharacterId(int characterId) { + this.characterID = characterId; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java index 23276fc5b..a1061bed5 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java @@ -1,327 +1,327 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.morphshape.CanvasMorphShapeExporter; -import com.jpexs.decompiler.flash.exporters.morphshape.SVGMorphShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MORPHFILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.MORPHLINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.decompiler.flash.types.shaperecords.CurvedEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Shape; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * - * @author JPEXS - */ -public abstract class MorphShapeTag extends DrawableTag { - - public static final int MAX_RATIO = 65535; - - @SWFType(BasicType.UI16) - public int characterId; - - public RECT startBounds; - - public RECT endBounds; - - public MORPHFILLSTYLEARRAY morphFillStyles; - - public MORPHLINESTYLEARRAY morphLineStyles; - - public SHAPE startEdges; - - public SHAPE endEdges; - - public MorphShapeTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract int getShapeNum(); - - @Override - public RECT getRect() { - return getRect(new HashSet<>()); - } - - @Override - public void getNeededCharacters(Set needed) { - morphFillStyles.getNeededCharacters(needed); - startEdges.getNeededCharacters(needed); - endEdges.getNeededCharacters(needed); - } - - @Override - public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { - boolean modified = false; - modified |= morphFillStyles.replaceCharacter(oldCharacterId, newCharacterId); - modified |= startEdges.replaceCharacter(oldCharacterId, newCharacterId); - modified |= endEdges.replaceCharacter(oldCharacterId, newCharacterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public boolean removeCharacter(int characterId) { - boolean modified = false; - modified |= morphFillStyles.removeCharacter(characterId); - modified |= startEdges.removeCharacter(characterId); - modified |= endEdges.removeCharacter(characterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public int getCharacterId() { - return characterId; - } - - @Override - public void setCharacterId(int characterId) { - this.characterId = characterId; - } - - @Override - public RECT getRect(Set added) { - RECT rect = new RECT(); - rect.Xmin = Math.min(startBounds.Xmin, endBounds.Xmin); - rect.Ymin = Math.min(startBounds.Ymin, endBounds.Ymin); - rect.Xmax = Math.max(startBounds.Xmax, endBounds.Xmax); - rect.Ymax = Math.max(startBounds.Ymax, endBounds.Ymax); - return rect; - } - - public RECT getStartBounds() { - return startBounds; - } - - public RECT getEndBounds() { - return endBounds; - } - - public MORPHFILLSTYLEARRAY getFillStyles() { - return morphFillStyles; - } - - public MORPHLINESTYLEARRAY getLineStyles() { - return morphLineStyles; - } - - public SHAPE getStartEdges() { - return startEdges; - } - - public SHAPE getEndEdges() { - return endEdges; - } - - public SHAPEWITHSTYLE getShapeAtRatio(int ratio) { - List finalRecords = new ArrayList<>(); - FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(ratio); - LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), ratio); - - int startPosX = 0, startPosY = 0; - int endPosX = 0, endPosY = 0; - int posX = 0, posY = 0; - - for (int startIndex = 0, endIndex = 0; - startIndex < startEdges.shapeRecords.size() - && endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) { - - SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex); - SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex); - if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) { - StyleChangeRecord scr1; - if (edge1 instanceof StyleChangeRecord) { - scr1 = (StyleChangeRecord) edge1; - if (scr1.stateMoveTo) { - startPosX = scr1.moveDeltaX; - startPosY = scr1.moveDeltaY; - } - } else { - scr1 = new StyleChangeRecord(); - startIndex--; - } - StyleChangeRecord scr2; - if (edge2 instanceof StyleChangeRecord) { - scr2 = (StyleChangeRecord) edge2; - if (scr2.stateMoveTo) { - endPosX = scr2.moveDeltaX; - endPosY = scr2.moveDeltaY; - } - } else { - scr2 = new StyleChangeRecord(); - endIndex--; - } - StyleChangeRecord scr = scr1.clone(); - if (scr1.stateMoveTo || scr2.stateMoveTo) { - scr.moveDeltaX = startPosX + (endPosX - startPosX) * ratio / MAX_RATIO; - scr.moveDeltaY = startPosY + (endPosY - startPosY) * ratio / MAX_RATIO; - scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY; - } - finalRecords.add(scr); - continue; - } - - if (edge1 instanceof EndShapeRecord) { - finalRecords.add(edge1); - break; - } - if (edge2 instanceof EndShapeRecord) { - finalRecords.add(edge2); - break; - } - - if (edge1 instanceof CurvedEdgeRecord || edge2 instanceof CurvedEdgeRecord) { - CurvedEdgeRecord cer1 = null; - if (edge1 instanceof CurvedEdgeRecord) { - cer1 = (CurvedEdgeRecord) edge1; - } else if (edge1 instanceof StraightEdgeRecord) { - cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1); - } - CurvedEdgeRecord cer2 = null; - if (edge2 instanceof CurvedEdgeRecord) { - cer2 = (CurvedEdgeRecord) edge2; - } else if (edge2 instanceof StraightEdgeRecord) { - cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2); - } - if ((cer2 == null) || (cer1 == null)) { - continue; - } - CurvedEdgeRecord cer = new CurvedEdgeRecord(); - cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * ratio / MAX_RATIO; - cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * ratio / MAX_RATIO; - cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / MAX_RATIO; - cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / MAX_RATIO; - startPosX += cer1.controlDeltaX + cer1.anchorDeltaX; - startPosY += cer1.controlDeltaY + cer1.anchorDeltaY; - endPosX += cer2.controlDeltaX + cer2.anchorDeltaX; - endPosY += cer2.controlDeltaY + cer2.anchorDeltaY; - posX += cer.controlDeltaX + cer.anchorDeltaX; - posY += cer.controlDeltaY + cer.anchorDeltaY; - finalRecords.add(cer); - } else { - StraightEdgeRecord ser1 = null; - if (edge1 instanceof StraightEdgeRecord) { - ser1 = (StraightEdgeRecord) edge1; - } - StraightEdgeRecord ser2 = null; - if (edge2 instanceof StraightEdgeRecord) { - ser2 = (StraightEdgeRecord) edge2; - } - if ((ser2 == null) || (ser1 == null)) { - continue; - } - StraightEdgeRecord ser = new StraightEdgeRecord(); - ser.generalLineFlag = true; - ser.vertLineFlag = false; - ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * ratio / MAX_RATIO; - ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * ratio / MAX_RATIO; - startPosX += ser1.deltaX; - startPosY += ser1.deltaY; - endPosX += ser2.deltaX; - endPosY += ser2.deltaY; - posX += ser.deltaX; - posY += ser.deltaX; - finalRecords.add(ser); - } - } - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = fillStyles; - shape.lineStyles = lineStyles; - shape.shapeRecords = finalRecords; - return shape; - } - - @Override - public int getUsedParameters() { - return PARAMETER_RATIO; - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - SHAPEWITHSTYLE shape = getShapeAtRatio(ratio); - // morphShape using shapeNum=3, morphShape2 using shapeNum=4 - // todo: Currently the generated image is not cached, because the cache - // key contains the hashCode of the finalRecord object, and it is always - // recreated - BitmapExporter.export(swf, shape, null, image, transformation, strokeTransformation, colorTransform); - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { - if (ratio == -2) { - SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); - SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); - SVGMorphShapeExporter shapeExporter = new SVGMorphShapeExporter(swf, beginShapes, endShapes, exporter, null, colorTransform, 1); - shapeExporter.export(); - } else { - SHAPEWITHSTYLE shapes = getShapeAtRatio(ratio); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shapes, exporter, null, colorTransform, 1); - shapeExporter.export(); - } - } - - @Override - public int getNumFrames() { - return 65536; - } - - @Override - public boolean isSingleFrame() { - // Morpshape is a single frame specified with the ratio - return true; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline(swf, stroked)); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasMorphShapeExporter cmse = new CanvasMorphShapeExporter(swf, getShapeAtRatio(0), getShapeAtRatio(MAX_RATIO), null, unitDivisor, 0, 0); - cmse.export(); - result.append(cmse.getShapeData()); - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.morphshape.CanvasMorphShapeExporter; +import com.jpexs.decompiler.flash.exporters.morphshape.SVGMorphShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MORPHFILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.MORPHLINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.flash.types.shaperecords.CurvedEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Shape; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public abstract class MorphShapeTag extends DrawableTag { + + public static final int MAX_RATIO = 65535; + + @SWFType(BasicType.UI16) + public int characterId; + + public RECT startBounds; + + public RECT endBounds; + + public MORPHFILLSTYLEARRAY morphFillStyles; + + public MORPHLINESTYLEARRAY morphLineStyles; + + public SHAPE startEdges; + + public SHAPE endEdges; + + public MorphShapeTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract int getShapeNum(); + + @Override + public RECT getRect() { + return getRect(new HashSet<>()); + } + + @Override + public void getNeededCharacters(Set needed) { + morphFillStyles.getNeededCharacters(needed); + startEdges.getNeededCharacters(needed); + endEdges.getNeededCharacters(needed); + } + + @Override + public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { + boolean modified = false; + modified |= morphFillStyles.replaceCharacter(oldCharacterId, newCharacterId); + modified |= startEdges.replaceCharacter(oldCharacterId, newCharacterId); + modified |= endEdges.replaceCharacter(oldCharacterId, newCharacterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public boolean removeCharacter(int characterId) { + boolean modified = false; + modified |= morphFillStyles.removeCharacter(characterId); + modified |= startEdges.removeCharacter(characterId); + modified |= endEdges.removeCharacter(characterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public int getCharacterId() { + return characterId; + } + + @Override + public void setCharacterId(int characterId) { + this.characterId = characterId; + } + + @Override + public RECT getRect(Set added) { + RECT rect = new RECT(); + rect.Xmin = Math.min(startBounds.Xmin, endBounds.Xmin); + rect.Ymin = Math.min(startBounds.Ymin, endBounds.Ymin); + rect.Xmax = Math.max(startBounds.Xmax, endBounds.Xmax); + rect.Ymax = Math.max(startBounds.Ymax, endBounds.Ymax); + return rect; + } + + public RECT getStartBounds() { + return startBounds; + } + + public RECT getEndBounds() { + return endBounds; + } + + public MORPHFILLSTYLEARRAY getFillStyles() { + return morphFillStyles; + } + + public MORPHLINESTYLEARRAY getLineStyles() { + return morphLineStyles; + } + + public SHAPE getStartEdges() { + return startEdges; + } + + public SHAPE getEndEdges() { + return endEdges; + } + + public SHAPEWITHSTYLE getShapeAtRatio(int ratio) { + List finalRecords = new ArrayList<>(); + FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(ratio); + LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), ratio); + + int startPosX = 0, startPosY = 0; + int endPosX = 0, endPosY = 0; + int posX = 0, posY = 0; + + for (int startIndex = 0, endIndex = 0; + startIndex < startEdges.shapeRecords.size() + && endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) { + + SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex); + SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex); + if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) { + StyleChangeRecord scr1; + if (edge1 instanceof StyleChangeRecord) { + scr1 = (StyleChangeRecord) edge1; + if (scr1.stateMoveTo) { + startPosX = scr1.moveDeltaX; + startPosY = scr1.moveDeltaY; + } + } else { + scr1 = new StyleChangeRecord(); + startIndex--; + } + StyleChangeRecord scr2; + if (edge2 instanceof StyleChangeRecord) { + scr2 = (StyleChangeRecord) edge2; + if (scr2.stateMoveTo) { + endPosX = scr2.moveDeltaX; + endPosY = scr2.moveDeltaY; + } + } else { + scr2 = new StyleChangeRecord(); + endIndex--; + } + StyleChangeRecord scr = scr1.clone(); + if (scr1.stateMoveTo || scr2.stateMoveTo) { + scr.moveDeltaX = startPosX + (endPosX - startPosX) * ratio / MAX_RATIO; + scr.moveDeltaY = startPosY + (endPosY - startPosY) * ratio / MAX_RATIO; + scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY; + } + finalRecords.add(scr); + continue; + } + + if (edge1 instanceof EndShapeRecord) { + finalRecords.add(edge1); + break; + } + if (edge2 instanceof EndShapeRecord) { + finalRecords.add(edge2); + break; + } + + if (edge1 instanceof CurvedEdgeRecord || edge2 instanceof CurvedEdgeRecord) { + CurvedEdgeRecord cer1 = null; + if (edge1 instanceof CurvedEdgeRecord) { + cer1 = (CurvedEdgeRecord) edge1; + } else if (edge1 instanceof StraightEdgeRecord) { + cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1); + } + CurvedEdgeRecord cer2 = null; + if (edge2 instanceof CurvedEdgeRecord) { + cer2 = (CurvedEdgeRecord) edge2; + } else if (edge2 instanceof StraightEdgeRecord) { + cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2); + } + if ((cer2 == null) || (cer1 == null)) { + continue; + } + CurvedEdgeRecord cer = new CurvedEdgeRecord(); + cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * ratio / MAX_RATIO; + cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * ratio / MAX_RATIO; + cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / MAX_RATIO; + cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / MAX_RATIO; + startPosX += cer1.controlDeltaX + cer1.anchorDeltaX; + startPosY += cer1.controlDeltaY + cer1.anchorDeltaY; + endPosX += cer2.controlDeltaX + cer2.anchorDeltaX; + endPosY += cer2.controlDeltaY + cer2.anchorDeltaY; + posX += cer.controlDeltaX + cer.anchorDeltaX; + posY += cer.controlDeltaY + cer.anchorDeltaY; + finalRecords.add(cer); + } else { + StraightEdgeRecord ser1 = null; + if (edge1 instanceof StraightEdgeRecord) { + ser1 = (StraightEdgeRecord) edge1; + } + StraightEdgeRecord ser2 = null; + if (edge2 instanceof StraightEdgeRecord) { + ser2 = (StraightEdgeRecord) edge2; + } + if ((ser2 == null) || (ser1 == null)) { + continue; + } + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.generalLineFlag = true; + ser.vertLineFlag = false; + ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * ratio / MAX_RATIO; + ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * ratio / MAX_RATIO; + startPosX += ser1.deltaX; + startPosY += ser1.deltaY; + endPosX += ser2.deltaX; + endPosY += ser2.deltaY; + posX += ser.deltaX; + posY += ser.deltaX; + finalRecords.add(ser); + } + } + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = fillStyles; + shape.lineStyles = lineStyles; + shape.shapeRecords = finalRecords; + return shape; + } + + @Override + public int getUsedParameters() { + return PARAMETER_RATIO; + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + SHAPEWITHSTYLE shape = getShapeAtRatio(ratio); + // morphShape using shapeNum=3, morphShape2 using shapeNum=4 + // todo: Currently the generated image is not cached, because the cache + // key contains the hashCode of the finalRecord object, and it is always + // recreated + BitmapExporter.export(swf, shape, null, image, transformation, strokeTransformation, colorTransform); + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { + if (ratio == -2) { + SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); + SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); + SVGMorphShapeExporter shapeExporter = new SVGMorphShapeExporter(swf, beginShapes, endShapes, getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } else { + SHAPEWITHSTYLE shapes = getShapeAtRatio(ratio); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shapes, getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + } + + @Override + public int getNumFrames() { + return 65536; + } + + @Override + public boolean isSingleFrame() { + // Morpshape is a single frame specified with the ratio + return true; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline(swf, stroked)); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasMorphShapeExporter cmse = new CanvasMorphShapeExporter(swf, getShapeAtRatio(0), getShapeAtRatio(MAX_RATIO), null, unitDivisor, 0, 0); + cmse.export(); + result.append(cmse.getShapeData()); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java index 531426565..e8aacc204 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java @@ -1,213 +1,213 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFInputStream; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.PathExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.LazyObject; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Shape; -import java.awt.geom.AffineTransform; -import java.awt.geom.GeneralPath; -import java.awt.geom.PathIterator; -import java.io.IOException; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public abstract class ShapeTag extends DrawableTag implements LazyObject { - - @SWFType(BasicType.UI16) - public int shapeId; - - public RECT shapeBounds; - - public SHAPEWITHSTYLE shapes; - - protected ByteArrayRange shapeData; - - private final int markerSize = 10; - - public ShapeTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - @Override - public void load() { - getShapes(); - } - - public abstract int getShapeNum(); - - public SHAPEWITHSTYLE getShapes() { - if (shapes == null && shapeData != null) { - try { - SWFInputStream sis = new SWFInputStream(swf, shapeData.getArray(), 0, shapeData.getPos() + shapeData.getLength()); - sis.seek(shapeData.getPos()); - shapes = sis.readSHAPEWITHSTYLE(getShapeNum(), false, "shapes"); - shapeData = null; // not needed anymore, give it to GC - } catch (IOException ex) { - Logger.getLogger(ShapeTag.class.getName()).log(Level.SEVERE, null, ex); - } - } - - return shapes; - } - - @Override - public void getNeededCharacters(Set needed) { - SHAPEWITHSTYLE shapes = getShapes(); - if (shapes != null) { - getShapes().getNeededCharacters(needed); - } - } - - @Override - public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { - boolean modified = getShapes().replaceCharacter(oldCharacterId, newCharacterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public boolean removeCharacter(int characterId) { - boolean modified = getShapes().removeCharacter(characterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public RECT getRect(Set added) { - return shapeBounds; - } - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - @Override - public int getUsedParameters() { - return 0; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShapes().getOutline(swf, stroked)); - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - BitmapExporter.export(swf, getShapes(), null, image, transformation, strokeTransformation, colorTransform); - if (Configuration._debugMode.get()) { // show control points - List paths = PathExporter.export(swf, getShapes()); - double[] coords = new double[6]; - AffineTransform at = transformation.toTransform(); - at.preConcatenate(AffineTransform.getScaleInstance(1 / SWF.unitDivisor, 1 / SWF.unitDivisor)); - - // get the graphics from the inner image object, because it creates a new Graphics object - Graphics2D graphics = (Graphics2D) image.getBufferedImage().getGraphics(); - graphics.setPaint(Color.black); - for (GeneralPath path : paths) { - PathIterator iterator = path.getPathIterator(at); - while (!iterator.isDone()) { - int type = iterator.currentSegment(coords); - double x = coords[0]; - double y = coords[1]; - switch (type) { - case PathIterator.SEG_MOVETO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_LINETO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_QUADTO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - x = coords[2]; - y = coords[3]; - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_CUBICTO: - System.out.print("CUBICTO NOT SUPPORTED. "); - break; - case PathIterator.SEG_CLOSE: - System.out.print("CLOSE NOT SUPPORTED. "); - break; - } - iterator.next(); - } - } - } - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShapes(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShapes(), null, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - } - - @Override - public int getNumFrames() { - return 1; - } - - @Override - public boolean isSingleFrame() { - return true; - } - - @Override - public int getCharacterId() { - return shapeId; - } - - @Override - public void setCharacterId(int characterId) { - this.shapeId = characterId; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFInputStream; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.PathExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.LazyObject; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public abstract class ShapeTag extends DrawableTag implements LazyObject { + + @SWFType(BasicType.UI16) + public int shapeId; + + public RECT shapeBounds; + + public SHAPEWITHSTYLE shapes; + + protected ByteArrayRange shapeData; + + private final int markerSize = 10; + + public ShapeTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + @Override + public void load() { + getShapes(); + } + + public abstract int getShapeNum(); + + public SHAPEWITHSTYLE getShapes() { + if (shapes == null && shapeData != null) { + try { + SWFInputStream sis = new SWFInputStream(swf, shapeData.getArray(), 0, shapeData.getPos() + shapeData.getLength()); + sis.seek(shapeData.getPos()); + shapes = sis.readSHAPEWITHSTYLE(getShapeNum(), false, "shapes"); + shapeData = null; // not needed anymore, give it to GC + } catch (IOException ex) { + Logger.getLogger(ShapeTag.class.getName()).log(Level.SEVERE, null, ex); + } + } + + return shapes; + } + + @Override + public void getNeededCharacters(Set needed) { + SHAPEWITHSTYLE shapes = getShapes(); + if (shapes != null) { + getShapes().getNeededCharacters(needed); + } + } + + @Override + public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { + boolean modified = getShapes().replaceCharacter(oldCharacterId, newCharacterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public boolean removeCharacter(int characterId) { + boolean modified = getShapes().removeCharacter(characterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public RECT getRect(Set added) { + return shapeBounds; + } + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + @Override + public int getUsedParameters() { + return 0; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShapes().getOutline(swf, stroked)); + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + BitmapExporter.export(swf, getShapes(), null, image, transformation, strokeTransformation, colorTransform); + if (Configuration._debugMode.get()) { // show control points + List paths = PathExporter.export(swf, getShapes()); + double[] coords = new double[6]; + AffineTransform at = transformation.toTransform(); + at.preConcatenate(AffineTransform.getScaleInstance(1 / SWF.unitDivisor, 1 / SWF.unitDivisor)); + + // get the graphics from the inner image object, because it creates a new Graphics object + Graphics2D graphics = (Graphics2D) image.getBufferedImage().getGraphics(); + graphics.setPaint(Color.black); + for (GeneralPath path : paths) { + PathIterator iterator = path.getPathIterator(at); + while (!iterator.isDone()) { + int type = iterator.currentSegment(coords); + double x = coords[0]; + double y = coords[1]; + switch (type) { + case PathIterator.SEG_MOVETO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_LINETO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_QUADTO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + x = coords[2]; + y = coords[3]; + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_CUBICTO: + System.out.print("CUBICTO NOT SUPPORTED. "); + break; + case PathIterator.SEG_CLOSE: + System.out.print("CLOSE NOT SUPPORTED. "); + break; + } + iterator.next(); + } + } + } + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShapes(), getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShapes(), null, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + } + + @Override + public int getNumFrames() { + return 1; + } + + @Override + public boolean isSingleFrame() { + return true; + } + + @Override + public int getCharacterId() { + return shapeId; + } + + @Override + public void setCharacterId(int characterId) { + this.shapeId = characterId; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index 8908be962..a5229a614 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -1,780 +1,780 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.FontExporter; -import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.HighlightedText; -import com.jpexs.decompiler.flash.importers.TextImportResizeTextBoundsMode; -import com.jpexs.decompiler.flash.tags.text.JustifyAlignGlyphEntry; -import com.jpexs.decompiler.flash.tags.text.TextAlign; -import com.jpexs.decompiler.flash.tags.text.TextParseException; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.DynamicTextGlyphEntry; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.GLYPHENTRY; -import com.jpexs.decompiler.flash.types.LINESTYLE; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MATRIX; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.TEXTRECORD; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.font.LineMetrics; -import java.awt.font.TextAttribute; -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS - */ -public abstract class TextTag extends DrawableTag { - - public TextTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract MATRIX getTextMatrix(); - - public abstract List getTexts(); - - public abstract List getFontIds(); - - public abstract HighlightedText getFormattedText(boolean ignoreLetterSpacing); - - // use the texts from the "texts" argument when it is not null - public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; - - public abstract void updateTextBounds(); - - public abstract boolean alignText(TextAlign textAlign); - - public abstract boolean translateText(int diff); - - public abstract RECT getBounds(); - - public abstract void setBounds(RECT r); - - public abstract ExportRectangle calculateTextBounds(); - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - private static void updateRect(RECT ret, int x, int y) { - if (x < ret.Xmin) { - ret.Xmin = x; - } - if (x > ret.Xmax) { - ret.Xmax = x; - } - if (y < ret.Ymin) { - ret.Ymin = y; - } - if (y > ret.Ymax) { - ret.Ymax = y; - } - } - - public static void alignText(SWF swf, List textRecords, TextAlign textAlign) { - // Remove Justify align entries - for (TEXTRECORD tr : textRecords) { - for (int i = 0; i < tr.glyphEntries.size(); i++) { - GLYPHENTRY ge = tr.glyphEntries.get(i); - if (ge instanceof JustifyAlignGlyphEntry) { - JustifyAlignGlyphEntry jge = (JustifyAlignGlyphEntry) ge; - ge = new GLYPHENTRY(); - ge.glyphAdvance = jge.originalAdvance; - ge.glyphIndex = jge.glyphIndex; - tr.glyphEntries.set(i, ge); - } - } - } - - int xMin = Integer.MAX_VALUE; - int maxWidth = 0; - for (TEXTRECORD tr : textRecords) { - int xOffset = tr.styleFlagsHasXOffset ? tr.xOffset : 0; - if (xOffset < xMin) { - xMin = xOffset; - } - - int width = tr.getTotalAdvance(); - - if (width > maxWidth) { - maxWidth = width; - } - } - - FontTag font = null; - - for (TEXTRECORD tr : textRecords) { - if (tr.styleFlagsHasFont) { - FontTag font2 = swf.getFont(tr.fontId); - if (font2 != null) { - font = font2; - } - } - - int width = tr.getTotalAdvance(); - switch (textAlign) { - case LEFT: - tr.xOffset = xMin; - tr.styleFlagsHasXOffset = true; - break; - case CENTER: - tr.xOffset = xMin + (maxWidth - width) / 2; - tr.styleFlagsHasXOffset = true; - break; - case RIGHT: - tr.xOffset = xMin + maxWidth - width; - tr.styleFlagsHasXOffset = true; - break; - case JUSTIFY: - tr.xOffset = xMin; - tr.styleFlagsHasXOffset = true; - - if (font != null) { - int diff = maxWidth - width; - if (diff > 0) { - int spaces = 0; - int spaces2 = 0; - int state = 0; - List glyphEntries = new ArrayList<>(); - List glyphEntries2 = new ArrayList<>(); - for (GLYPHENTRY ge : tr.glyphEntries) { - char ch = font.glyphToChar(ge.glyphIndex); - boolean whitespace = Character.isWhitespace(ch); - switch (state) { - case 0: - if (!whitespace) { - state = 1; - } - break; - case 1: - if (whitespace) { - spaces2++; - glyphEntries2.add(ge); - } else { - spaces += spaces2; - spaces2 = 0; - glyphEntries.addAll(glyphEntries2); - glyphEntries2.clear(); - } - break; - } - } - - if (spaces > 0 && glyphEntries.size() > 0) { - int fix = diff / spaces; - int remaining = diff - fix * spaces; - for (GLYPHENTRY ge : glyphEntries) { - int diff2 = fix; - if (remaining-- > 0) { - diff2++; - } - - JustifyAlignGlyphEntry jge = new JustifyAlignGlyphEntry(); - jge.originalAdvance = ge.glyphAdvance; - jge.glyphAdvance = ge.glyphAdvance + diff2; - jge.glyphIndex = ge.glyphIndex; - int idx = tr.glyphEntries.indexOf(ge); - tr.glyphEntries.set(idx, jge); - } - } - } - } - break; - } - } - } - - public static Map getTextRecordsAttributes(List list, SWF swf) { - Map att = new HashMap<>(); - RECT textBounds = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE); - FontTag font = null; - int x = 0; - int y = 0; - int textHeight = 12; - int lineSpacing = 0; - double leading = 0; - double ascent = 0; - double descent = 0; - double lineDistance = 0; - - List glyphs = null; - boolean firstLine = true; - double top = 0; - List allLeftMargins = new ArrayList<>(); - List allLetterSpacings = new ArrayList<>(); - FontMetrics fontMetrics; - BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); - Graphics graphics = bi.getGraphics(); - Font aFont = null; - int currentLeftMargin; - for (int r = 0; r < list.size(); r++) { - TEXTRECORD rec = list.get(r); - if (rec.styleFlagsHasFont) { - FontTag font2 = swf.getFont(rec.fontId); - if (font2 != null) { - font = font2; - } - textHeight = rec.textHeight; - if (font == null) { - Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Font with id=" + rec.fontId + " was not found."); - continue; - } - - glyphs = font.getGlyphShapeTable(); - - if (!font.hasLayout()) { - String fontName = FontTag.getFontNameWithFallback(font.getFontNameIntag()); - aFont = new Font(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor)); - - Map attr = new HashMap<>(); - - attr.put(TextAttribute.KERNING, TextAttribute.KERNING_ON); - attr.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); - aFont = aFont.deriveFont(attr); - - fontMetrics = graphics.getFontMetrics(aFont); - LineMetrics lm = fontMetrics.getLineMetrics("A", graphics); - ascent = lm.getAscent(); - descent = lm.getDescent(); - leading = lm.getLeading(); - lineDistance = ascent + descent; - } else { - leading = ((double) font.getLeading() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - ascent = ((double) font.getAscent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - descent = ((double) font.getDescent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - lineDistance = ascent + descent; - } - } - currentLeftMargin = 0; - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - currentLeftMargin = x; - } - if (rec.styleFlagsHasYOffset) { - if (!firstLine) { - top += ascent + descent; - int topint = (int) (Math.round(top) * SWF.unitDivisor); - lineSpacing = rec.yOffset - topint; - top += lineSpacing / SWF.unitDivisor; - } else { - top = ascent; - } - y = rec.yOffset; - } - - firstLine = false; - allLeftMargins.add(currentLeftMargin); - - if (glyphs == null) { - Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Glyphs not found."); - continue; - } - - int letterSpacing = Integer.MAX_VALUE; - for (int e = 0; e < rec.glyphEntries.size(); e++) { - GLYPHENTRY entry = rec.glyphEntries.get(e); - GLYPHENTRY nextEntry = null; - if (e < rec.glyphEntries.size() - 1) { - nextEntry = rec.glyphEntries.get(e + 1); - } - RECT rect = SHAPERECORD.getBounds(glyphs.get(entry.glyphIndex).shapeRecords); - rect.Xmax = (int) Math.round(((double) rect.Xmax * textHeight) / (font.getDivider() * 1024)); - rect.Xmin = (int) Math.round(((double) rect.Xmin * textHeight) / (font.getDivider() * 1024)); - rect.Ymax = (int) Math.round(((double) rect.Ymax * textHeight) / (font.getDivider() * 1024)); - rect.Ymin = (int) Math.round(((double) rect.Ymin * textHeight) / (font.getDivider() * 1024)); - updateRect(textBounds, x + rect.Xmin, y + rect.Ymin); - updateRect(textBounds, x + rect.Xmax, y + rect.Ymax); - int adv = entry.glyphAdvance; - - int defaultAdvance; - if (font.hasLayout()) { - int kerningAdjustment = 0; - if (nextEntry != null) { - kerningAdjustment = font.getGlyphKerningAdjustment(entry.glyphIndex, nextEntry.glyphIndex); - } - defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); - } else { - defaultAdvance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(aFont, font.glyphToChar(entry.glyphIndex), nextEntry == null ? null : font.glyphToChar(nextEntry.glyphIndex))); - } - int newLetterSpacing = adv - defaultAdvance; - if (e == 0 || e == rec.glyphEntries.size() - 1) { - if (rec.glyphEntries.size() == 1) { - letterSpacing = 0; - } - } else if (newLetterSpacing < letterSpacing) { - letterSpacing = newLetterSpacing; - } - x += adv; - } - allLetterSpacings.add(letterSpacing); - } - att.put("indent", 0); //? - att.put("rightMargin", 0); //? - att.put("lineSpacing", lineSpacing); - att.put("textBounds", textBounds); - att.put("allLeftMargins", allLeftMargins); - att.put("allLetterSpacings", allLetterSpacings); - return att; - } - - public static SHAPE getBorderShape(RGB borderColor, RGB fillColor, RECT rect) { - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = new FILLSTYLEARRAY(); - if (fillColor != null) { - shape.fillStyles.fillStyles = new FILLSTYLE[1]; - FILLSTYLE fillStyle = new FILLSTYLE(); - fillStyle.fillStyleType = FILLSTYLE.SOLID; - fillStyle.color = fillColor; - shape.fillStyles.fillStyles[0] = fillStyle; - } else { - shape.fillStyles.fillStyles = new FILLSTYLE[0]; - } - shape.lineStyles = new LINESTYLEARRAY(); - shape.lineStyles.lineStyles = new LINESTYLE[1]; - LINESTYLE lineStyle = new LINESTYLE(); - lineStyle.color = borderColor; - lineStyle.width = 20; - shape.lineStyles.lineStyles[0] = lineStyle; - shape.shapeRecords = new ArrayList<>(); - StyleChangeRecord style = new StyleChangeRecord(); - style.lineStyle = 1; - style.stateLineStyle = true; - if (fillColor != null) { - style.stateFillStyle0 = true; - style.fillStyle0 = 1; - } - style.stateMoveTo = true; - shape.shapeRecords.add(style); - StraightEdgeRecord top = new StraightEdgeRecord(); - top.generalLineFlag = true; - top.deltaX = rect.getWidth(); - StraightEdgeRecord right = new StraightEdgeRecord(); - right.generalLineFlag = true; - right.deltaY = rect.getHeight(); - StraightEdgeRecord bottom = new StraightEdgeRecord(); - bottom.generalLineFlag = true; - bottom.deltaX = -rect.getWidth(); - StraightEdgeRecord left = new StraightEdgeRecord(); - left.generalLineFlag = true; - left.deltaY = -rect.getHeight(); - shape.shapeRecords.add(top); - shape.shapeRecords.add(right); - shape.shapeRecords.add(bottom); - shape.shapeRecords.add(left); - shape.shapeRecords.add(new EndShapeRecord()); - return shape; - } - - public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { - Graphics2D g = (Graphics2D) image.getGraphics(); - Matrix mat = transformation.clone(); - mat = mat.concatenate(new Matrix(textMatrix)); - BitmapExporter.export(swf, getBorderShape(borderColor, fillColor, rect), null, image, mat, mat, colorTransform); - } - - public static void drawBorderHtmlCanvas(SWF swf, StringBuilder result, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double unitDivisor) { - Matrix mat = new Matrix(textMatrix); - result.append("\tctx.save();\r\n"); - result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); - SHAPE shape = getBorderShape(borderColor, fillColor, rect); - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, shape, colorTransform, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - result.append("\tctx.restore();\r\n"); - } - - public static void drawBorderSVG(SWF swf, SVGExporter exporter, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { - exporter.createSubGroup(new Matrix(textMatrix), null); - SHAPE shape = getBorderShape(borderColor, fillColor, rect); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, exporter, null, colorTransform, zoom); - shapeExporter.export(); - exporter.endGroup(); - } - - public static void staticTextToImage(SWF swf, List textRecords, int numText, SerializableImage image, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { - int textColor = 0; - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = null; - Matrix mat0 = transformation.clone(); - mat0 = mat0.concatenate(new Matrix(textMatrix)); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - FontTag font2 = swf.getFont(rec.fontId); - if (font2 != null) { - font = font2; - } - glyphs = font == null ? null : font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double divider = font == null ? 1 : font.getDivider(); - double rat = textHeight / 1024.0 / divider; - - Matrix matScale = Matrix.getScaleInstance(rat); - Color textColor2 = new Color(textColor, true); - for (GLYPHENTRY entry : rec.glyphEntries) { - matScale.translateX = x; - matScale.translateY = y; - - Matrix mat = mat0.concatenate(matScale); - SHAPE shape = null; - if (entry.glyphIndex != -1 && glyphs != null) { - // shapeNum: 1 - shape = glyphs.get(entry.glyphIndex); - } else if (entry instanceof DynamicTextGlyphEntry) { - DynamicTextGlyphEntry dynamicEntry = (DynamicTextGlyphEntry) entry; - if (dynamicEntry.fontFace != null) { - FontTag fnt = swf.getFontByName(dynamicEntry.fontFace); - if (fnt != null && entry.glyphIndex != -1) { - shape = fnt.getGlyphShapeTable().get(entry.glyphIndex); - } else { - shape = SHAPERECORD.fontCharacterToSHAPE(new Font(dynamicEntry.fontFace, dynamicEntry.fontStyle, 12), (int) Math.round(divider * 1024), dynamicEntry.character); - } - } - } - - if (shape != null) { - BitmapExporter.export(swf, shape, textColor2, image, mat, mat, colorTransform); - if (SHAPERECORD.DRAW_BOUNDING_BOX) { - RGB borderColor = new RGBA(Color.black); - RGB fillColor = new RGBA(new Color(255, 255, 255, 0)); - RECT bounds = shape.getBounds(); - mat = Matrix.getTranslateInstance(bounds.Xmin, bounds.Ymin).preConcatenate(mat); - TextTag.drawBorder(swf, image, borderColor, fillColor, bounds, new MATRIX(), mat, colorTransform); - } - } - - x += entry.glyphAdvance; - } - } - } - - public static ExportRectangle calculateTextBounds(SWF swf, List textRecords, MATRIX textMatrix) { - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = null; - ExportRectangle result = null; - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - glyphs = font == null ? null : font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double rat = textHeight / 1024.0 / (font == null ? 1 : font.getDivider()); - - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = new Matrix(); - mat = mat.concatenate(new Matrix(textMatrix)); - Matrix matTr = Matrix.getTranslateInstance(x, y); - mat = mat.concatenate(matTr); - mat = mat.concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1 && glyphs != null) { - // shapeNum: 1 - SHAPE shape = glyphs.get(entry.glyphIndex); - RECT glyphBounds = shape.getBounds(); - int glyphWidth = glyphBounds.getWidth(); - int glyphHeight = glyphBounds.getHeight(); - glyphBounds.Xmin -= glyphWidth / 2; - glyphBounds.Ymin -= glyphHeight / 2; - glyphBounds.Xmax += glyphWidth; - glyphBounds.Ymax += glyphHeight; - if (glyphBounds.Xmax > glyphBounds.Xmin && glyphBounds.Ymax > glyphBounds.Ymin) { - ExportRectangle rect = mat.transform(new ExportRectangle(glyphBounds)); - if (result == null) { - result = rect; - } else { - result.xMin = Math.min(result.xMin, rect.xMin); - result.yMin = Math.min(result.yMin, rect.yMin); - result.xMax = Math.max(result.xMax, rect.xMax); - result.yMax = Math.max(result.yMax, rect.yMax); - } - } - x += entry.glyphAdvance; - } - } - } - - return result; - } - - protected void updateTextBounds(RECT textBounds) { - TextImportResizeTextBoundsMode resizeMode = Configuration.textImportResizeTextBoundsMode.get(); - if (resizeMode != null && (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY) || resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK))) { - ExportRectangle newBounds = calculateTextBounds(); - if (newBounds != null) { - int xMin = (int) Math.floor(newBounds.xMin); - int yMin = (int) Math.floor(newBounds.yMin); - int xMax = (int) Math.ceil(newBounds.xMax); - int yMax = (int) Math.ceil(newBounds.yMax); - if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY)) { - textBounds.Xmin = Math.min(xMin, textBounds.Xmin); - textBounds.Ymin = Math.min(yMin, textBounds.Ymin); - textBounds.Xmax = Math.max(xMax, textBounds.Xmax); - textBounds.Ymax = Math.max(yMax, textBounds.Ymax); - } else if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK)) { - textBounds.Xmin = xMin; - textBounds.Ymin = yMin; - textBounds.Xmax = xMax; - textBounds.Ymax = yMax; - } - } - } - } - - public static void staticTextToHtmlCanvas(double unitDivisor, SWF swf, List textRecords, int numText, StringBuilder result, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { - int textColor = 0; - FontTag font = null; - int fontId = -1; - int textHeight = 12; - int x = 0; - int y = 0; - - List glyphs = new ArrayList<>(); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - fontId = rec.fontId; - glyphs = font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double rat = textHeight / 1024.0 / font.getDivider(); - - result.append("\tvar textColor = ").append(CanvasShapeExporter.color(textColor)).append(";\r\n"); - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x, y))).concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1) { - // shapeNum: 1 - result.append("\tctx.save();\r\n"); - result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); - result.append("\tfont").append(fontId).append("(ctx,\"").append(("" + font.glyphToChar(entry.glyphIndex)).replace("\\", "\\\\").replace("\"", "\\\"")).append("\",textColor);\r\n"); - result.append("\tctx.restore();\r\n"); - x += entry.glyphAdvance; - } - } - } - } - - public static void staticTextToSVG(SWF swf, List textRecords, int numText, SVGExporter exporter, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { - int textColor = 0; - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = new ArrayList<>(); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - glyphs = font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - int offsetX = 0; - int offsetY = 0; - if (rec.styleFlagsHasXOffset) { - offsetX = rec.xOffset; - x = offsetX; - } - if (rec.styleFlagsHasYOffset) { - offsetY = rec.yOffset; - y = offsetY; - } - - double rat = textHeight / 1024.0 / font.getDivider(); - - exporter.createSubGroup(new Matrix(textMatrix), null); - if (exporter.useTextTag) { - StringBuilder text = new StringBuilder(); - int totalAdvance = 0; - for (GLYPHENTRY entry : rec.glyphEntries) { - if (entry.glyphIndex != -1) { - char ch = font.glyphToChar(entry.glyphIndex); - text.append(ch); - totalAdvance += entry.glyphAdvance; - } - } - - boolean hasOffset = offsetX != 0 || offsetY != 0; - if (hasOffset) { - exporter.createSubGroup(Matrix.getTranslateInstance(offsetX, offsetY), null); - } - - Element textElement = exporter.createElement("text"); - textElement.setAttribute("font-size", Double.toString(rat * 1024)); - textElement.setAttribute("font-family", font.getFontNameIntag()); - textElement.setAttribute("textLength", Double.toString(totalAdvance / SWF.unitDivisor)); - textElement.setAttribute("lengthAdjust", "spacing"); - textElement.setTextContent(text.toString()); - - RGBA colorA = new RGBA(textColor); - textElement.setAttribute("fill", colorA.toHexRGB()); - if (colorA.alpha != 255) { - textElement.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - - exporter.addToGroup(textElement); - FontExportMode fontExportMode = FontExportMode.WOFF; - exporter.addStyle(font.getFontNameIntag(), new FontExporter().exportFont(font, fontExportMode), fontExportMode); - - if (hasOffset) { - exporter.endGroup(); - } - } else { - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = Matrix.getTranslateInstance(x, y).concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1) { - // shapeNum: 1 - SHAPE shape = glyphs.get(entry.glyphIndex); - char ch = font.glyphToChar(entry.glyphIndex); - - String charId = null; - Map chs; - if (exporter.exportedChars.containsKey(font)) { - chs = exporter.exportedChars.get(font); - if (chs.containsKey(entry.glyphIndex)) { - charId = chs.get(entry.glyphIndex); - } - } else { - chs = new HashMap<>(); - exporter.exportedChars.put(font, chs); - } - - if (charId == null) { - charId = exporter.getUniqueId(Helper.getValidHtmlId("font_" + font.getFontNameIntag() + "_" + ch)); - exporter.createDefGroup(null, charId); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, exporter, null, colorTransform, zoom); - shapeExporter.export(); - exporter.endGroup(); - chs.put(entry.glyphIndex, charId); - } - - Element charImage = exporter.addUse(mat, bounds, charId, null); - RGBA colorA = new RGBA(textColor); - charImage.setAttribute("fill", colorA.toHexRGB()); - if (colorA.alpha != 255) { - charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - - x += entry.glyphAdvance; - } - } - } - exporter.endGroup(); - } - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - RECT r = getBounds(); - Shape shp = new Rectangle.Double(r.Xmin, r.Ymin, r.getWidth(), r.getHeight()); - return transformation.toTransform().createTransformedShape(shp); //TODO: match character shapes (?) - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.FontExporter; +import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.importers.TextImportResizeTextBoundsMode; +import com.jpexs.decompiler.flash.tags.text.JustifyAlignGlyphEntry; +import com.jpexs.decompiler.flash.tags.text.TextAlign; +import com.jpexs.decompiler.flash.tags.text.TextParseException; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.DynamicTextGlyphEntry; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.GLYPHENTRY; +import com.jpexs.decompiler.flash.types.LINESTYLE; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MATRIX; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.TEXTRECORD; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.font.LineMetrics; +import java.awt.font.TextAttribute; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS + */ +public abstract class TextTag extends DrawableTag { + + public TextTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract MATRIX getTextMatrix(); + + public abstract List getTexts(); + + public abstract List getFontIds(); + + public abstract HighlightedText getFormattedText(boolean ignoreLetterSpacing); + + // use the texts from the "texts" argument when it is not null + public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; + + public abstract void updateTextBounds(); + + public abstract boolean alignText(TextAlign textAlign); + + public abstract boolean translateText(int diff); + + public abstract RECT getBounds(); + + public abstract void setBounds(RECT r); + + public abstract ExportRectangle calculateTextBounds(); + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + private static void updateRect(RECT ret, int x, int y) { + if (x < ret.Xmin) { + ret.Xmin = x; + } + if (x > ret.Xmax) { + ret.Xmax = x; + } + if (y < ret.Ymin) { + ret.Ymin = y; + } + if (y > ret.Ymax) { + ret.Ymax = y; + } + } + + public static void alignText(SWF swf, List textRecords, TextAlign textAlign) { + // Remove Justify align entries + for (TEXTRECORD tr : textRecords) { + for (int i = 0; i < tr.glyphEntries.size(); i++) { + GLYPHENTRY ge = tr.glyphEntries.get(i); + if (ge instanceof JustifyAlignGlyphEntry) { + JustifyAlignGlyphEntry jge = (JustifyAlignGlyphEntry) ge; + ge = new GLYPHENTRY(); + ge.glyphAdvance = jge.originalAdvance; + ge.glyphIndex = jge.glyphIndex; + tr.glyphEntries.set(i, ge); + } + } + } + + int xMin = Integer.MAX_VALUE; + int maxWidth = 0; + for (TEXTRECORD tr : textRecords) { + int xOffset = tr.styleFlagsHasXOffset ? tr.xOffset : 0; + if (xOffset < xMin) { + xMin = xOffset; + } + + int width = tr.getTotalAdvance(); + + if (width > maxWidth) { + maxWidth = width; + } + } + + FontTag font = null; + + for (TEXTRECORD tr : textRecords) { + if (tr.styleFlagsHasFont) { + FontTag font2 = swf.getFont(tr.fontId); + if (font2 != null) { + font = font2; + } + } + + int width = tr.getTotalAdvance(); + switch (textAlign) { + case LEFT: + tr.xOffset = xMin; + tr.styleFlagsHasXOffset = true; + break; + case CENTER: + tr.xOffset = xMin + (maxWidth - width) / 2; + tr.styleFlagsHasXOffset = true; + break; + case RIGHT: + tr.xOffset = xMin + maxWidth - width; + tr.styleFlagsHasXOffset = true; + break; + case JUSTIFY: + tr.xOffset = xMin; + tr.styleFlagsHasXOffset = true; + + if (font != null) { + int diff = maxWidth - width; + if (diff > 0) { + int spaces = 0; + int spaces2 = 0; + int state = 0; + List glyphEntries = new ArrayList<>(); + List glyphEntries2 = new ArrayList<>(); + for (GLYPHENTRY ge : tr.glyphEntries) { + char ch = font.glyphToChar(ge.glyphIndex); + boolean whitespace = Character.isWhitespace(ch); + switch (state) { + case 0: + if (!whitespace) { + state = 1; + } + break; + case 1: + if (whitespace) { + spaces2++; + glyphEntries2.add(ge); + } else { + spaces += spaces2; + spaces2 = 0; + glyphEntries.addAll(glyphEntries2); + glyphEntries2.clear(); + } + break; + } + } + + if (spaces > 0 && glyphEntries.size() > 0) { + int fix = diff / spaces; + int remaining = diff - fix * spaces; + for (GLYPHENTRY ge : glyphEntries) { + int diff2 = fix; + if (remaining-- > 0) { + diff2++; + } + + JustifyAlignGlyphEntry jge = new JustifyAlignGlyphEntry(); + jge.originalAdvance = ge.glyphAdvance; + jge.glyphAdvance = ge.glyphAdvance + diff2; + jge.glyphIndex = ge.glyphIndex; + int idx = tr.glyphEntries.indexOf(ge); + tr.glyphEntries.set(idx, jge); + } + } + } + } + break; + } + } + } + + public static Map getTextRecordsAttributes(List list, SWF swf) { + Map att = new HashMap<>(); + RECT textBounds = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE); + FontTag font = null; + int x = 0; + int y = 0; + int textHeight = 12; + int lineSpacing = 0; + double leading = 0; + double ascent = 0; + double descent = 0; + double lineDistance = 0; + + List glyphs = null; + boolean firstLine = true; + double top = 0; + List allLeftMargins = new ArrayList<>(); + List allLetterSpacings = new ArrayList<>(); + FontMetrics fontMetrics; + BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + Graphics graphics = bi.getGraphics(); + Font aFont = null; + int currentLeftMargin; + for (int r = 0; r < list.size(); r++) { + TEXTRECORD rec = list.get(r); + if (rec.styleFlagsHasFont) { + FontTag font2 = swf.getFont(rec.fontId); + if (font2 != null) { + font = font2; + } + textHeight = rec.textHeight; + if (font == null) { + Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Font with id=" + rec.fontId + " was not found."); + continue; + } + + glyphs = font.getGlyphShapeTable(); + + if (!font.hasLayout()) { + String fontName = FontTag.getFontNameWithFallback(font.getFontNameIntag()); + aFont = new Font(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor)); + + Map attr = new HashMap<>(); + + attr.put(TextAttribute.KERNING, TextAttribute.KERNING_ON); + attr.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); + aFont = aFont.deriveFont(attr); + + fontMetrics = graphics.getFontMetrics(aFont); + LineMetrics lm = fontMetrics.getLineMetrics("A", graphics); + ascent = lm.getAscent(); + descent = lm.getDescent(); + leading = lm.getLeading(); + lineDistance = ascent + descent; + } else { + leading = ((double) font.getLeading() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + ascent = ((double) font.getAscent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + descent = ((double) font.getDescent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + lineDistance = ascent + descent; + } + } + currentLeftMargin = 0; + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + currentLeftMargin = x; + } + if (rec.styleFlagsHasYOffset) { + if (!firstLine) { + top += ascent + descent; + int topint = (int) (Math.round(top) * SWF.unitDivisor); + lineSpacing = rec.yOffset - topint; + top += lineSpacing / SWF.unitDivisor; + } else { + top = ascent; + } + y = rec.yOffset; + } + + firstLine = false; + allLeftMargins.add(currentLeftMargin); + + if (glyphs == null) { + Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Glyphs not found."); + continue; + } + + int letterSpacing = Integer.MAX_VALUE; + for (int e = 0; e < rec.glyphEntries.size(); e++) { + GLYPHENTRY entry = rec.glyphEntries.get(e); + GLYPHENTRY nextEntry = null; + if (e < rec.glyphEntries.size() - 1) { + nextEntry = rec.glyphEntries.get(e + 1); + } + RECT rect = SHAPERECORD.getBounds(glyphs.get(entry.glyphIndex).shapeRecords); + rect.Xmax = (int) Math.round(((double) rect.Xmax * textHeight) / (font.getDivider() * 1024)); + rect.Xmin = (int) Math.round(((double) rect.Xmin * textHeight) / (font.getDivider() * 1024)); + rect.Ymax = (int) Math.round(((double) rect.Ymax * textHeight) / (font.getDivider() * 1024)); + rect.Ymin = (int) Math.round(((double) rect.Ymin * textHeight) / (font.getDivider() * 1024)); + updateRect(textBounds, x + rect.Xmin, y + rect.Ymin); + updateRect(textBounds, x + rect.Xmax, y + rect.Ymax); + int adv = entry.glyphAdvance; + + int defaultAdvance; + if (font.hasLayout()) { + int kerningAdjustment = 0; + if (nextEntry != null) { + kerningAdjustment = font.getGlyphKerningAdjustment(entry.glyphIndex, nextEntry.glyphIndex); + } + defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); + } else { + defaultAdvance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(aFont, font.glyphToChar(entry.glyphIndex), nextEntry == null ? null : font.glyphToChar(nextEntry.glyphIndex))); + } + int newLetterSpacing = adv - defaultAdvance; + if (e == 0 || e == rec.glyphEntries.size() - 1) { + if (rec.glyphEntries.size() == 1) { + letterSpacing = 0; + } + } else if (newLetterSpacing < letterSpacing) { + letterSpacing = newLetterSpacing; + } + x += adv; + } + allLetterSpacings.add(letterSpacing); + } + att.put("indent", 0); //? + att.put("rightMargin", 0); //? + att.put("lineSpacing", lineSpacing); + att.put("textBounds", textBounds); + att.put("allLeftMargins", allLeftMargins); + att.put("allLetterSpacings", allLetterSpacings); + return att; + } + + public static SHAPE getBorderShape(RGB borderColor, RGB fillColor, RECT rect) { + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = new FILLSTYLEARRAY(); + if (fillColor != null) { + shape.fillStyles.fillStyles = new FILLSTYLE[1]; + FILLSTYLE fillStyle = new FILLSTYLE(); + fillStyle.fillStyleType = FILLSTYLE.SOLID; + fillStyle.color = fillColor; + shape.fillStyles.fillStyles[0] = fillStyle; + } else { + shape.fillStyles.fillStyles = new FILLSTYLE[0]; + } + shape.lineStyles = new LINESTYLEARRAY(); + shape.lineStyles.lineStyles = new LINESTYLE[1]; + LINESTYLE lineStyle = new LINESTYLE(); + lineStyle.color = borderColor; + lineStyle.width = 20; + shape.lineStyles.lineStyles[0] = lineStyle; + shape.shapeRecords = new ArrayList<>(); + StyleChangeRecord style = new StyleChangeRecord(); + style.lineStyle = 1; + style.stateLineStyle = true; + if (fillColor != null) { + style.stateFillStyle0 = true; + style.fillStyle0 = 1; + } + style.stateMoveTo = true; + shape.shapeRecords.add(style); + StraightEdgeRecord top = new StraightEdgeRecord(); + top.generalLineFlag = true; + top.deltaX = rect.getWidth(); + StraightEdgeRecord right = new StraightEdgeRecord(); + right.generalLineFlag = true; + right.deltaY = rect.getHeight(); + StraightEdgeRecord bottom = new StraightEdgeRecord(); + bottom.generalLineFlag = true; + bottom.deltaX = -rect.getWidth(); + StraightEdgeRecord left = new StraightEdgeRecord(); + left.generalLineFlag = true; + left.deltaY = -rect.getHeight(); + shape.shapeRecords.add(top); + shape.shapeRecords.add(right); + shape.shapeRecords.add(bottom); + shape.shapeRecords.add(left); + shape.shapeRecords.add(new EndShapeRecord()); + return shape; + } + + public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { + Graphics2D g = (Graphics2D) image.getGraphics(); + Matrix mat = transformation.clone(); + mat = mat.concatenate(new Matrix(textMatrix)); + BitmapExporter.export(swf, getBorderShape(borderColor, fillColor, rect), null, image, mat, mat, colorTransform); + } + + public static void drawBorderHtmlCanvas(SWF swf, StringBuilder result, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double unitDivisor) { + Matrix mat = new Matrix(textMatrix); + result.append("\tctx.save();\r\n"); + result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); + SHAPE shape = getBorderShape(borderColor, fillColor, rect); + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, shape, colorTransform, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + result.append("\tctx.restore();\r\n"); + } + + public static void drawBorderSVG(SWF swf, SVGExporter exporter, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { + exporter.createSubGroup(new Matrix(textMatrix), null); + SHAPE shape = getBorderShape(borderColor, fillColor, rect); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); + shapeExporter.export(); + exporter.endGroup(); + } + + public static void staticTextToImage(SWF swf, List textRecords, int numText, SerializableImage image, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { + int textColor = 0; + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = null; + Matrix mat0 = transformation.clone(); + mat0 = mat0.concatenate(new Matrix(textMatrix)); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + FontTag font2 = swf.getFont(rec.fontId); + if (font2 != null) { + font = font2; + } + glyphs = font == null ? null : font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double divider = font == null ? 1 : font.getDivider(); + double rat = textHeight / 1024.0 / divider; + + Matrix matScale = Matrix.getScaleInstance(rat); + Color textColor2 = new Color(textColor, true); + for (GLYPHENTRY entry : rec.glyphEntries) { + matScale.translateX = x; + matScale.translateY = y; + + Matrix mat = mat0.concatenate(matScale); + SHAPE shape = null; + if (entry.glyphIndex != -1 && glyphs != null) { + // shapeNum: 1 + shape = glyphs.get(entry.glyphIndex); + } else if (entry instanceof DynamicTextGlyphEntry) { + DynamicTextGlyphEntry dynamicEntry = (DynamicTextGlyphEntry) entry; + if (dynamicEntry.fontFace != null) { + FontTag fnt = swf.getFontByName(dynamicEntry.fontFace); + if (fnt != null && entry.glyphIndex != -1) { + shape = fnt.getGlyphShapeTable().get(entry.glyphIndex); + } else { + shape = SHAPERECORD.fontCharacterToSHAPE(new Font(dynamicEntry.fontFace, dynamicEntry.fontStyle, 12), (int) Math.round(divider * 1024), dynamicEntry.character); + } + } + } + + if (shape != null) { + BitmapExporter.export(swf, shape, textColor2, image, mat, mat, colorTransform); + if (SHAPERECORD.DRAW_BOUNDING_BOX) { + RGB borderColor = new RGBA(Color.black); + RGB fillColor = new RGBA(new Color(255, 255, 255, 0)); + RECT bounds = shape.getBounds(); + mat = Matrix.getTranslateInstance(bounds.Xmin, bounds.Ymin).preConcatenate(mat); + TextTag.drawBorder(swf, image, borderColor, fillColor, bounds, new MATRIX(), mat, colorTransform); + } + } + + x += entry.glyphAdvance; + } + } + } + + public static ExportRectangle calculateTextBounds(SWF swf, List textRecords, MATRIX textMatrix) { + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = null; + ExportRectangle result = null; + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + glyphs = font == null ? null : font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double rat = textHeight / 1024.0 / (font == null ? 1 : font.getDivider()); + + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = new Matrix(); + mat = mat.concatenate(new Matrix(textMatrix)); + Matrix matTr = Matrix.getTranslateInstance(x, y); + mat = mat.concatenate(matTr); + mat = mat.concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1 && glyphs != null) { + // shapeNum: 1 + SHAPE shape = glyphs.get(entry.glyphIndex); + RECT glyphBounds = shape.getBounds(); + int glyphWidth = glyphBounds.getWidth(); + int glyphHeight = glyphBounds.getHeight(); + glyphBounds.Xmin -= glyphWidth / 2; + glyphBounds.Ymin -= glyphHeight / 2; + glyphBounds.Xmax += glyphWidth; + glyphBounds.Ymax += glyphHeight; + if (glyphBounds.Xmax > glyphBounds.Xmin && glyphBounds.Ymax > glyphBounds.Ymin) { + ExportRectangle rect = mat.transform(new ExportRectangle(glyphBounds)); + if (result == null) { + result = rect; + } else { + result.xMin = Math.min(result.xMin, rect.xMin); + result.yMin = Math.min(result.yMin, rect.yMin); + result.xMax = Math.max(result.xMax, rect.xMax); + result.yMax = Math.max(result.yMax, rect.yMax); + } + } + x += entry.glyphAdvance; + } + } + } + + return result; + } + + protected void updateTextBounds(RECT textBounds) { + TextImportResizeTextBoundsMode resizeMode = Configuration.textImportResizeTextBoundsMode.get(); + if (resizeMode != null && (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY) || resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK))) { + ExportRectangle newBounds = calculateTextBounds(); + if (newBounds != null) { + int xMin = (int) Math.floor(newBounds.xMin); + int yMin = (int) Math.floor(newBounds.yMin); + int xMax = (int) Math.ceil(newBounds.xMax); + int yMax = (int) Math.ceil(newBounds.yMax); + if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY)) { + textBounds.Xmin = Math.min(xMin, textBounds.Xmin); + textBounds.Ymin = Math.min(yMin, textBounds.Ymin); + textBounds.Xmax = Math.max(xMax, textBounds.Xmax); + textBounds.Ymax = Math.max(yMax, textBounds.Ymax); + } else if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK)) { + textBounds.Xmin = xMin; + textBounds.Ymin = yMin; + textBounds.Xmax = xMax; + textBounds.Ymax = yMax; + } + } + } + } + + public static void staticTextToHtmlCanvas(double unitDivisor, SWF swf, List textRecords, int numText, StringBuilder result, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { + int textColor = 0; + FontTag font = null; + int fontId = -1; + int textHeight = 12; + int x = 0; + int y = 0; + + List glyphs = new ArrayList<>(); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + fontId = rec.fontId; + glyphs = font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double rat = textHeight / 1024.0 / font.getDivider(); + + result.append("\tvar textColor = ").append(CanvasShapeExporter.color(textColor)).append(";\r\n"); + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x, y))).concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1) { + // shapeNum: 1 + result.append("\tctx.save();\r\n"); + result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); + result.append("\tfont").append(fontId).append("(ctx,\"").append(("" + font.glyphToChar(entry.glyphIndex)).replace("\\", "\\\\").replace("\"", "\\\"")).append("\",textColor);\r\n"); + result.append("\tctx.restore();\r\n"); + x += entry.glyphAdvance; + } + } + } + } + + public static void staticTextToSVG(SWF swf, List textRecords, int numText, SVGExporter exporter, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { + int textColor = 0; + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = new ArrayList<>(); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + glyphs = font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + int offsetX = 0; + int offsetY = 0; + if (rec.styleFlagsHasXOffset) { + offsetX = rec.xOffset; + x = offsetX; + } + if (rec.styleFlagsHasYOffset) { + offsetY = rec.yOffset; + y = offsetY; + } + + double rat = textHeight / 1024.0 / font.getDivider(); + + exporter.createSubGroup(new Matrix(textMatrix), null); + if (exporter.useTextTag) { + StringBuilder text = new StringBuilder(); + int totalAdvance = 0; + for (GLYPHENTRY entry : rec.glyphEntries) { + if (entry.glyphIndex != -1) { + char ch = font.glyphToChar(entry.glyphIndex); + text.append(ch); + totalAdvance += entry.glyphAdvance; + } + } + + boolean hasOffset = offsetX != 0 || offsetY != 0; + if (hasOffset) { + exporter.createSubGroup(Matrix.getTranslateInstance(offsetX, offsetY), null); + } + + Element textElement = exporter.createElement("text"); + textElement.setAttribute("font-size", Double.toString(rat * 1024)); + textElement.setAttribute("font-family", font.getFontNameIntag()); + textElement.setAttribute("textLength", Double.toString(totalAdvance / SWF.unitDivisor)); + textElement.setAttribute("lengthAdjust", "spacing"); + textElement.setTextContent(text.toString()); + + RGBA colorA = new RGBA(textColor); + textElement.setAttribute("fill", colorA.toHexRGB()); + if (colorA.alpha != 255) { + textElement.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + + exporter.addToGroup(textElement); + FontExportMode fontExportMode = FontExportMode.WOFF; + exporter.addStyle(font.getFontNameIntag(), new FontExporter().exportFont(font, fontExportMode), fontExportMode); + + if (hasOffset) { + exporter.endGroup(); + } + } else { + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = Matrix.getTranslateInstance(x, y).concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1) { + // shapeNum: 1 + SHAPE shape = glyphs.get(entry.glyphIndex); + char ch = font.glyphToChar(entry.glyphIndex); + + String charId = null; + Map chs; + if (exporter.exportedChars.containsKey(font)) { + chs = exporter.exportedChars.get(font); + if (chs.containsKey(entry.glyphIndex)) { + charId = chs.get(entry.glyphIndex); + } + } else { + chs = new HashMap<>(); + exporter.exportedChars.put(font, chs); + } + + if (charId == null) { + charId = exporter.getUniqueId(Helper.getValidHtmlId("font_" + font.getFontNameIntag() + "_" + ch)); + exporter.createDefGroup(null, charId); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); + shapeExporter.export(); + exporter.endGroup(); + chs.put(entry.glyphIndex, charId); + } + + Element charImage = exporter.addUse(mat, bounds, charId, null); + RGBA colorA = new RGBA(textColor); + charImage.setAttribute("fill", colorA.toHexRGB()); + if (colorA.alpha != 255) { + charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + + x += entry.glyphAdvance; + } + } + } + exporter.endGroup(); + } + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + RECT r = getBounds(); + Shape shp = new Rectangle.Double(r.Xmin, r.Ymin, r.getWidth(), r.getHeight()); + return transformation.toTransform().createTransformedShape(shp); //TODO: match character shapes (?) + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index ce311cd28..b9dcbc0ff 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -1,902 +1,902 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.debugger.flash.DebugConnectionListener; -import com.jpexs.debugger.flash.DebugMessageListener; -import com.jpexs.debugger.flash.Debugger; -import com.jpexs.debugger.flash.DebuggerCommands; -import com.jpexs.debugger.flash.DebuggerConnection; -import com.jpexs.debugger.flash.Variable; -import com.jpexs.debugger.flash.VariableFlags; -import com.jpexs.debugger.flash.VariableType; -import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; -import com.jpexs.debugger.flash.messages.in.InBreakAt; -import com.jpexs.debugger.flash.messages.in.InBreakAtExt; -import com.jpexs.debugger.flash.messages.in.InBreakReason; -import com.jpexs.debugger.flash.messages.in.InCallFunction; -import com.jpexs.debugger.flash.messages.in.InConstantPool; -import com.jpexs.debugger.flash.messages.in.InContinue; -import com.jpexs.debugger.flash.messages.in.InFrame; -import com.jpexs.debugger.flash.messages.in.InGetSwd; -import com.jpexs.debugger.flash.messages.in.InGetSwf; -import com.jpexs.debugger.flash.messages.in.InGetVariable; -import com.jpexs.debugger.flash.messages.in.InNumScript; -import com.jpexs.debugger.flash.messages.in.InProcessTag; -import com.jpexs.debugger.flash.messages.in.InScript; -import com.jpexs.debugger.flash.messages.in.InSetBreakpoint; -import com.jpexs.debugger.flash.messages.in.InSwfInfo; -import com.jpexs.debugger.flash.messages.in.InTrace; -import com.jpexs.debugger.flash.messages.in.InVersion; -import com.jpexs.debugger.flash.messages.out.OutAddWatch2; -import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; -import com.jpexs.debugger.flash.messages.out.OutGetSwd; -import com.jpexs.debugger.flash.messages.out.OutGetSwf; -import com.jpexs.debugger.flash.messages.out.OutPlay; -import com.jpexs.debugger.flash.messages.out.OutProcessedTag; -import com.jpexs.debugger.flash.messages.out.OutRewind; -import com.jpexs.debugger.flash.messages.out.OutSwfInfo; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.graph.DottedChain; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.logging.ConsoleHandler; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * - * @author JPEXS - */ -public class DebuggerHandler implements DebugConnectionListener { - - private boolean connected = false; - - private DebuggerCommands commands = null; - - private List swfs = new ArrayList<>(); - - private boolean paused = true; - - private Map modulePaths = new HashMap<>(); - - private Map moduleToSwfIndex = new HashMap<>(); - - private Map scriptToModule = new HashMap<>(); - - private Map moduleToTraitIndex = new HashMap<>(); - - private Map moduleToClassIndex = new HashMap<>(); - - private Map moduleToMethodIndex = new HashMap<>(); - - private Map> toAddBPointMap = new HashMap<>(); - - private Map> confirmedPointMap = new HashMap<>(); - - private Map> invalidBreakPointMap = new HashMap<>(); - - private Map> toRemoveBPointMap = new HashMap<>(); - - private int breakIp = -1; - - private String breakScriptName = null; - - public static class ActionScriptException extends Exception { - - private String errorClass; - - public ActionScriptException(String errorClass, String message) { - super(message); - this.errorClass = errorClass; - } - - public ActionScriptException(String errorClsMessage) { - this(errorClsMessage.substring(0, errorClsMessage.indexOf(": ")), errorClsMessage.substring(errorClsMessage.indexOf(": ") + 2)); - } - - public String getErrorClass() { - return errorClass; - } - } - - public int getBreakIp() { - if (!isPaused()) { - return -1; - } - return breakIp; - } - - public String getBreakScriptName() { - if (!isPaused()) { - return "-"; - } - return breakScriptName; - } - - public InGetVariable getVariable(long parentId, String varName, boolean children) { - try { - return commands.getVariable(parentId, varName, true, children); - } catch (IOException ex) { - return null; - } - } - - public void setVariable(long parentId, String varName, int valueType, Object value) { - try { - String svalue = ""; - switch (valueType) { - case VariableType.STRING: - svalue = "" + value; - break; - case VariableType.NUMBER: - svalue = "" + value; - break; - case VariableType.BOOLEAN: - svalue = ((Boolean) value) ? "true" : "false"; - break; - case VariableType.UNDEFINED: - svalue = "undefined"; - break; - case VariableType.NULL: - svalue = "undefined"; - break; - } - commands.setVariable(parentId, varName, valueType, svalue); - } catch (IOException ex) { - //ignore - } - } - - public synchronized void removeBreakPoint(String scriptName, int line) { - if (isBreakpointInvalid(scriptName, line)) { - invalidBreakPointMap.get(scriptName).remove(line); - if (invalidBreakPointMap.get(scriptName).isEmpty()) { - invalidBreakPointMap.remove(scriptName); - } - return; - } - if (isBreakpointToAdd(scriptName, line)) { - toAddBPointMap.get(scriptName).remove(line); - if (toAddBPointMap.get(scriptName).isEmpty()) { - toAddBPointMap.remove(scriptName); - } - } else if (isBreakpointConfirmed(scriptName, line)) { - if (!toRemoveBPointMap.containsKey(scriptName)) { - toRemoveBPointMap.put(scriptName, new TreeSet<>()); - } - toRemoveBPointMap.get(scriptName).add(line); - } - try { - sendBreakPoints(false); - } catch (IOException ex) { - //ignore - } - } - - private int watchTag = 1; - - public synchronized com.jpexs.debugger.flash.DebuggerCommands.Watch addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { - int tag = watchTag++; - try { - return commands.addWatch(v_id, v.name, (watchRead ? OutAddWatch2.FLAG_READ : 0) | (watchWrite ? OutAddWatch2.FLAG_WRITE : 0), tag); - } catch (IOException ex) { - return null; - } - } - - public synchronized Set getBreakPoints(String scriptName, boolean onlyValid) { - Set lines = new TreeSet<>(); - if (confirmedPointMap.containsKey(scriptName)) { - lines.addAll(confirmedPointMap.get(scriptName)); - } - if (toAddBPointMap.containsKey(scriptName)) { - lines.addAll(toAddBPointMap.get(scriptName)); - } - if (!onlyValid && invalidBreakPointMap.containsKey(scriptName)) { - lines.addAll(invalidBreakPointMap.get(scriptName)); - } - return lines; - } - - public synchronized void clearBreakPoints() { - for (String scriptName : confirmedPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); - } - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - confirmedPointMap.clear(); - invalidBreakPointMap.clear(); - } - - public synchronized Map> getAllBreakPoints(boolean validOnly) { - Map> ret = new HashMap<>(); - for (String scriptName : confirmedPointMap.keySet()) { - Set lines = new TreeSet<>(); - lines.addAll(confirmedPointMap.get(scriptName)); - ret.put(scriptName, lines); - } - for (String scriptName : toAddBPointMap.keySet()) { - if (!ret.containsKey(scriptName)) { - ret.put(scriptName, new TreeSet<>()); - } - ret.get(scriptName).addAll(toAddBPointMap.get(scriptName)); - } - if (!validOnly) { - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!ret.containsKey(scriptName)) { - ret.put(scriptName, new TreeSet<>()); - } - ret.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - } - return ret; - } - - public boolean addBreakPoint(String scriptName, int line) { - synchronized (this) { - Logger.getLogger(DebuggerHandler.class - .getName()).log(Level.FINE, "adding bp " + scriptName + ":" + line); - if (isBreakpointToRemove(scriptName, line)) { - toRemoveBPointMap.get(scriptName).remove(line); - if (toRemoveBPointMap.get(scriptName).isEmpty()) { - toRemoveBPointMap.remove(scriptName); - - } - } - - if (isBreakpointConfirmed(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already confirmed"); - return true; - - } - if (isBreakpointInvalid(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already invalid"); - return false; - } - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).add(line); - Logger - .getLogger(DebuggerHandler.class - .getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " added to todo"); - } - try { - sendBreakPoints(false); - } catch (IOException ex) { - //ignored - } - - return true; - } - - public synchronized boolean isBreakpointConfirmed(String scriptName, int line) { - return confirmedPointMap.containsKey(scriptName) && confirmedPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointToAdd(String scriptName, int line) { - return toAddBPointMap.containsKey(scriptName) && toAddBPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointToRemove(String scriptName, int line) { - return toRemoveBPointMap.containsKey(scriptName) && toRemoveBPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointInvalid(String scriptName, int line) { - return invalidBreakPointMap.containsKey(scriptName) && invalidBreakPointMap.get(scriptName).contains(line); - } - - private synchronized void markBreakPointInvalid(String scriptName, int line) { - if (!invalidBreakPointMap.containsKey(scriptName)) { - invalidBreakPointMap.put(scriptName, new TreeSet<>()); - } - invalidBreakPointMap.get(scriptName).add(line); - } - - private InFrame frame; - - private InConstantPool pool; - - private InBreakAtExt breakInfo; - - private InBreakReason breakReason; - - private final List breakListeners = new ArrayList<>(); - - private final List traceListeners = new ArrayList<>(); - - private final List clisteners = new ArrayList<>(); - - public String moduleToString(int file) { - if (!modulePaths.containsKey(file)) { - return "unknown"; - } - return modulePaths.get(file); - } - - public synchronized InBreakAtExt getBreakInfo() { - if (!paused) { - return null; - } - return breakInfo; - } - - public synchronized InBreakReason getBreakReason() { - if (!paused) { - return null; - } - return breakReason; - } - - public static interface ConnectionListener { - - public void connected(); - - public void disconnected(); - } - - public static interface TraceListener { - - public void trace(String... val); - } - - public static interface BreakListener { - - public void breakAt(String scriptName, int line, int classIndex, int traitIndex, int methodIndex); - - public void doContinue(); - } - - public void addBreakListener(BreakListener l) { - breakListeners.add(l); - } - - public void addTraceListener(TraceListener l) { - traceListeners.add(l); - } - - public void removeTraceListener(TraceListener l) { - traceListeners.remove(l); - } - - public void removeBreakListener(BreakListener l) { - breakListeners.remove(l); - } - - public void addConnectionListener(ConnectionListener l) { - clisteners.add(l); - } - - public void removeConnectionListener(ConnectionListener l) { - clisteners.remove(l); - } - - public synchronized void refreshFrame() { - if (!paused) { - return; - } - try { - frame = commands.getFrame(0); - pool = commands.getConstantPool(0); - } catch (IOException ex) { - //ignore - } - } - - public synchronized InFrame getFrame() { - if (!paused) { - return null; - } - return frame; - } - - public synchronized int moduleIdOf(String pack) { - if (scriptToModule.containsKey(pack)) { - return scriptToModule.get(pack); - } - return -1; - } - - public boolean isPaused() { - if (!isConnected()) { - return false; - } - synchronized (this) { - return paused; - } - } - - public List getSwfs() { - return swfs; - } - - public void disconnect() { - frame = null; - pool = null; - breakInfo = null; - breakReason = null; - connected = false; - if (commands != null) { - commands.disconnect(); - } - commands = null; - synchronized (this) { - for (String scriptName : confirmedPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); - } - confirmedPointMap.clear(); - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - invalidBreakPointMap.clear(); - } - for (ConnectionListener l : clisteners) { - l.disconnected(); - } - } - - public synchronized boolean isConnected() { - return connected; - } - - public DebuggerCommands getCommands() throws IOException { - if (!isConnected() || commands == null) { - throw new IOException("Not connected"); - } - return commands; - } - - private static void enlog(Class cls) { - Level level = Level.FINEST; - - Logger mylog = Logger.getLogger(cls.getName()); - mylog.setLevel(level); - ConsoleHandler ch = new ConsoleHandler(); - ch.setLevel(level); - mylog.addHandler(ch); - } - - @Override - public void failedListen(IOException ex) { - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - disconnect(); - Main.stopRun(); - Main.stopWork(); - View.showMessageDialog(Main.getMainFrame().getPanel(), AppStrings.translate("error.debug.listen").replace("%port%", "" + Debugger.DEBUG_PORT)); - Main.getMainFrame().getPanel().updateMenu(); - } - }); - - } - - @Override - public void connected(DebuggerConnection con) { - clearBreakPoints(); - - Main.startWork(AppStrings.translate("work.debugging"), null); - - synchronized (this) { - paused = false; - } - - Main.getMainFrame().getPanel().updateMenu(); - - //enlog(DebuggerConnection.class); - //enlog(DebuggerCommands.class); - //enlog(DebuggerHandler.class); - try { - con.getMessage(InVersion.class); - } catch (IOException ex) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.SEVERE, null, ex); - } - - //Respon to InProcessTag with OutProcessedTag - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InProcessTag message) { - try { - con.writeMessage(new OutProcessedTag(con)); - } catch (IOException ex) { - //disconnect(); - //ignore - } - } - }); - - swfs.clear(); - - Map moduleNames = new HashMap<>(); - - final Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); - final Pattern patAS3PCode = Pattern.compile("^#PCODE abc:([0-9]+),script:([0-9]+),class:(-?[0-9]+),trait:(-?[0-9]+),method:([0-9]+),body:([0-9]+);(.*)$"); - - try { - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InNumScript t) { - con.dropMessage(t); - } - }); - - modulePaths = new HashMap<>(); - scriptToModule = new HashMap<>(); - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InScript sc) { - moduleNames.put(sc.module, sc.name); - moduleToSwfIndex.put(sc.module, sc.swfIndex); - int file = sc.module; - String name = sc.name; - String[] parts = name.split(";"); - - Matcher m; - if ((m = patAS3.matcher(name)).matches()) { - String clsNameWithSuffix = m.group(3); - String pkg = m.group(2).replace("\\", "."); - m = patAS3PCode.matcher(name); - - if (m.matches()) { - moduleToClassIndex.put(file, Integer.parseInt(m.group(3))); - moduleToTraitIndex.put(file, Integer.parseInt(m.group(4))); - moduleToMethodIndex.put(file, Integer.parseInt(m.group(5))); - name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); - name = "#PCODE abc:" + m.group(1) + ",body:" + m.group(6) + ";" + name; - } else { - name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); - } - } - modulePaths.put(file, name); - scriptToModule.put(name, file); - con.dropMessage(sc); - } - }); - - /*int numScript = con.getMessage(InNumScript.class).num; - for (int i = 0; i < numScript; i++) { - InScript sc = con.getMessage(InScript.class); - moduleNames.put(sc.module, sc.name); - }*/ - //Pattern patMainFrame = Pattern.compile("^Actions for Scene ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); - //Pattern patSymbol = Pattern.compile("^Actions for Symbol ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); - //Pattern patAS2 = Pattern.compile("^([^:]+): .*\\.as$"); - //con.getMessage(InSetBreakpoint.class); - commands = new DebuggerCommands(con); - - commands.stopWarning(); - commands.setStopOnFault(); - commands.setEnumerateOverride(); - commands.setNotifyFailure(); - commands.setInvokeSetters(); - commands.setSwfLoadNotify(); - commands.setGetterTimeout(1500); - commands.setSetterTimeout(5000); - - boolean isAS3 = (Main.getMainFrame().getPanel().getCurrentSwf().isAS3()); - con.isAS3 = isAS3; - - //Widelines - only AS3, it hangs in AS1/2 and SWD does not support UI32 lines - if (isAS3) { - con.wideLines = commands.getOption("wide_line_player", "false").equals("true"); - if (con.wideLines) { - commands.setOption("wide_line_debugger", "on"); - } - } - commands.squelch(true); - - con.writeMessage(new OutSwfInfo(con, 0)); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InSwfInfo t) { - for (InSwfInfo.SwfInfo s : t.swfInfos) { - swfs.add(s); - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - try { - con.sendMessage(new OutGetSwf(con, (int) s.index), InGetSwf.class); - con.sendMessage(new OutGetSwd(con, (int) s.index), InGetSwd.class); - } catch (IOException ex) { - //ignore - } - } - }); - } - con.dropMessage(t); - } - }); - - InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); - synchronized (this) { - for (int i = 0; i < isb.files.size(); i++) { - String sname = moduleNames.get(isb.files.get(i)); - if (!confirmedPointMap.containsKey(sname)) { - confirmedPointMap.put(sname, new TreeSet<>()); - } - if (toAddBPointMap.containsKey(sname)) { - toAddBPointMap.get(sname).remove(isb.lines.get(i)); - if (toAddBPointMap.get(sname).isEmpty()) { - toAddBPointMap.remove(sname); - } - } - confirmedPointMap.get(sname).add(isb.lines.get(i)); - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{sname, isb.lines.get(i)}); - } - } - - synchronized (this) { - connected = true; - } - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InAskBreakpoints message) { - - } - }); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InContinue msg) { - synchronized (DebuggerHandler.this) { - paused = false; - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "continued"); - } - for (BreakListener bl : breakListeners) { - bl.doContinue(); - } - } - }); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InBreakAt message) { - synchronized (DebuggerHandler.this) { - paused = true; - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "paused"); - - } - - try { - breakInfo = con.getMessage(InBreakAtExt.class); - breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); - - String newBreakScriptName = "unknown"; - if (modulePaths.containsKey(message.file)) { - newBreakScriptName = modulePaths.get(message.file); - - } else if (breakReason.reason != InBreakReason.REASON_SCRIPT_LOADED) { - Logger.getLogger(DebuggerCommands.class.getName()).log(Level.SEVERE, "Invalid file: " + message.file); - return; - } - - final String[] reasonNames = new String[]{"unknown", "breakpoint", "watch", "fault", "stopRequest", "step", "halt", "scriptLoaded"}; - String reason = breakReason.reason < reasonNames.length ? reasonNames[breakReason.reason] : reasonNames[0]; - - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "break at {0}:{1}, reason: {2}", new Object[]{newBreakScriptName, message.line, reason}); - - sendBreakPoints(false); - synchronized (DebuggerHandler.this) { - breakScriptName = newBreakScriptName; - breakIp = message.line; - } - - if (breakReason.reason == InBreakReason.REASON_SCRIPT_LOADED) { - if (!Configuration.debugHalt.get()) { - commands.sendContinue(); - return; - } - Main.startWork(AppStrings.translate("work.halted"), null); - } else { - Main.startWork(AppStrings.translate("work.breakat") + newBreakScriptName + ":" + message.line + " " + AppStrings.translate("debug.break.reason." + reason), null); - } - frame = commands.getFrame(0); - pool = commands.getConstantPool(0); - - for (BreakListener l : breakListeners) { - l.breakAt(newBreakScriptName, message.line, - moduleToClassIndex.containsKey(message.file) ? moduleToClassIndex.get(message.file) : -1, - moduleToTraitIndex.containsKey(message.file) ? moduleToTraitIndex.get(message.file) : -1, - moduleToMethodIndex.containsKey(message.file) ? moduleToMethodIndex.get(message.file) : -1 - ); - } - - } catch (IOException ex) { - //ignore - } - - } - }); - - for (ConnectionListener l : clisteners) { - l.connected(); - } - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InTrace tr) { - for (TraceListener l : traceListeners) { - l.trace(tr.text); - } - } - }); - - if (!isAS3) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINER, "End of connect - sending continue"); - con.writeMessage(new OutRewind(con)); - con.writeMessage(new OutPlay(con)); - commands.sendContinue(); - } - - } catch (IOException ex) { - - synchronized (this) { - connected = false; - } - } - } - - private void sendBreakPoints(boolean force) throws IOException { - if (!force && !isPaused()) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "not sending bps, not paused"); - return; - } - synchronized (this) { - for (String scriptName : toRemoveBPointMap.keySet()) { - int file = moduleIdOf(scriptName); - if (file > -1) { - for (int line : toRemoveBPointMap.get(scriptName)) { - if (isBreakpointConfirmed(scriptName, line)) { - commands.removeBreakPoint(file, line); - confirmedPointMap.get(scriptName).remove(line); - if (confirmedPointMap.get(scriptName).isEmpty()) { - confirmedPointMap.remove(scriptName); - } - } - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} removed", new Object[]{scriptName, line}); - } - } - } - toRemoveBPointMap.clear(); - - for (String scriptName : toAddBPointMap.keySet()) { - int file = moduleIdOf(scriptName); - if (file > -1) { - for (int line : toAddBPointMap.get(scriptName)) { - if (commands.addBreakPoint(file, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{scriptName, line}); - if (!confirmedPointMap.containsKey(scriptName)) { - confirmedPointMap.put(scriptName, new TreeSet<>()); - } - confirmedPointMap.get(scriptName).add(line); - } else { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} unable to submit", new Object[]{scriptName, line}); - markBreakPointInvalid(scriptName, line); - } - } - } else { - for (int line : toAddBPointMap.get(scriptName)) { - markBreakPointInvalid(scriptName, line); - } - } - } - toAddBPointMap.clear(); - - } - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "sending bps finished"); - - } - - public synchronized InConstantPool getConstantPool() { - if (!paused) { - return null; - } - return pool; - } - - public synchronized InCallFunction callMethod(Variable object, String methodName, List args) throws ActionScriptException { - return callFunction(false, methodName, object, args); - } - - public synchronized InCallFunction callMethod(String object, String methodName, List args) throws ActionScriptException { - InGetVariable igv = getVariable(0, object, false); - return callMethod(igv.parent, methodName, args); - } - - private static String typeAsStr(Object value) { - if (value == null) { - return "null"; - } - if ((value instanceof Long) || (value instanceof Integer)) { - return "int"; - } - if (value instanceof Number) { - return "Number"; - } - if (value instanceof String) { - return "String"; - } - if (value instanceof Variable) { - Variable v = (Variable) value; - return v.getTypeAsStr(); - } - return "String"; - } - - private static String valueAsStr(Object value) { - if (value == null) { - return "null"; - } - if (value instanceof Double) { - double doubleValue = ((Double) value).doubleValue(); - long longValue = (long) doubleValue; - if (doubleValue == longValue) { - return Long.toString(longValue); - } - } - - if (value instanceof Variable) { - Variable v = (Variable) value; - return valueAsStr(v.value); - } - return "" + value; - } - - public synchronized InCallFunction callFunction(boolean isConstructor, String funcName, Variable thisValue, List args) throws ActionScriptException { - List argTypes = new ArrayList<>(); - List argValues = new ArrayList<>(); - for (Object value : args) { - argTypes.add(typeAsStr(value)); - argValues.add(valueAsStr(value)); - } - String thisType = typeAsStr(thisValue); - String thisValueStr = valueAsStr(thisValue); - try { - InCallFunction icf = commands.callFunction(isConstructor, funcName, thisType, thisValueStr, argTypes, argValues); - if (!icf.variables.isEmpty()) { - if ((icf.variables.get(0).flags & VariableFlags.IS_EXCEPTION) > 0) { - throw new ActionScriptException("" + icf.variables.get(0).value); - } - } - return icf; - } catch (IOException e) { - - } - return null; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.debugger.flash.DebugConnectionListener; +import com.jpexs.debugger.flash.DebugMessageListener; +import com.jpexs.debugger.flash.Debugger; +import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.debugger.flash.DebuggerConnection; +import com.jpexs.debugger.flash.Variable; +import com.jpexs.debugger.flash.VariableFlags; +import com.jpexs.debugger.flash.VariableType; +import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; +import com.jpexs.debugger.flash.messages.in.InBreakAt; +import com.jpexs.debugger.flash.messages.in.InBreakAtExt; +import com.jpexs.debugger.flash.messages.in.InBreakReason; +import com.jpexs.debugger.flash.messages.in.InCallFunction; +import com.jpexs.debugger.flash.messages.in.InConstantPool; +import com.jpexs.debugger.flash.messages.in.InContinue; +import com.jpexs.debugger.flash.messages.in.InFrame; +import com.jpexs.debugger.flash.messages.in.InGetSwd; +import com.jpexs.debugger.flash.messages.in.InGetSwf; +import com.jpexs.debugger.flash.messages.in.InGetVariable; +import com.jpexs.debugger.flash.messages.in.InNumScript; +import com.jpexs.debugger.flash.messages.in.InProcessTag; +import com.jpexs.debugger.flash.messages.in.InScript; +import com.jpexs.debugger.flash.messages.in.InSetBreakpoint; +import com.jpexs.debugger.flash.messages.in.InSwfInfo; +import com.jpexs.debugger.flash.messages.in.InTrace; +import com.jpexs.debugger.flash.messages.in.InVersion; +import com.jpexs.debugger.flash.messages.out.OutAddWatch2; +import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; +import com.jpexs.debugger.flash.messages.out.OutGetSwd; +import com.jpexs.debugger.flash.messages.out.OutGetSwf; +import com.jpexs.debugger.flash.messages.out.OutPlay; +import com.jpexs.debugger.flash.messages.out.OutProcessedTag; +import com.jpexs.debugger.flash.messages.out.OutRewind; +import com.jpexs.debugger.flash.messages.out.OutSwfInfo; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.graph.DottedChain; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public class DebuggerHandler implements DebugConnectionListener { + + private boolean connected = false; + + private DebuggerCommands commands = null; + + private List swfs = new ArrayList<>(); + + private boolean paused = true; + + private Map modulePaths = new HashMap<>(); + + private Map moduleToSwfIndex = new HashMap<>(); + + private Map scriptToModule = new HashMap<>(); + + private Map moduleToTraitIndex = new HashMap<>(); + + private Map moduleToClassIndex = new HashMap<>(); + + private Map moduleToMethodIndex = new HashMap<>(); + + private Map> toAddBPointMap = new HashMap<>(); + + private Map> confirmedPointMap = new HashMap<>(); + + private Map> invalidBreakPointMap = new HashMap<>(); + + private Map> toRemoveBPointMap = new HashMap<>(); + + private int breakIp = -1; + + private String breakScriptName = null; + + public static class ActionScriptException extends Exception { + + private String errorClass; + + public ActionScriptException(String errorClass, String message) { + super(message); + this.errorClass = errorClass; + } + + public ActionScriptException(String errorClsMessage) { + this(errorClsMessage.substring(0, errorClsMessage.indexOf(": ")), errorClsMessage.substring(errorClsMessage.indexOf(": ") + 2)); + } + + public String getErrorClass() { + return errorClass; + } + } + + public int getBreakIp() { + if (!isPaused()) { + return -1; + } + return breakIp; + } + + public String getBreakScriptName() { + if (!isPaused()) { + return "-"; + } + return breakScriptName; + } + + public InGetVariable getVariable(long parentId, String varName, boolean children) { + try { + return commands.getVariable(parentId, varName, true, children); + } catch (IOException ex) { + return null; + } + } + + public void setVariable(long parentId, String varName, int valueType, Object value) { + try { + String svalue = ""; + switch (valueType) { + case VariableType.STRING: + svalue = "" + value; + break; + case VariableType.NUMBER: + svalue = "" + value; + break; + case VariableType.BOOLEAN: + svalue = ((Boolean) value) ? "true" : "false"; + break; + case VariableType.UNDEFINED: + svalue = "undefined"; + break; + case VariableType.NULL: + svalue = "undefined"; + break; + } + commands.setVariable(parentId, varName, valueType, svalue); + } catch (IOException ex) { + //ignore + } + } + + public synchronized void removeBreakPoint(String scriptName, int line) { + if (isBreakpointInvalid(scriptName, line)) { + invalidBreakPointMap.get(scriptName).remove(line); + if (invalidBreakPointMap.get(scriptName).isEmpty()) { + invalidBreakPointMap.remove(scriptName); + } + return; + } + if (isBreakpointToAdd(scriptName, line)) { + toAddBPointMap.get(scriptName).remove(line); + if (toAddBPointMap.get(scriptName).isEmpty()) { + toAddBPointMap.remove(scriptName); + } + } else if (isBreakpointConfirmed(scriptName, line)) { + if (!toRemoveBPointMap.containsKey(scriptName)) { + toRemoveBPointMap.put(scriptName, new TreeSet<>()); + } + toRemoveBPointMap.get(scriptName).add(line); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignore + } + } + + private int watchTag = 1; + + public synchronized com.jpexs.debugger.flash.DebuggerCommands.Watch addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { + int tag = watchTag++; + try { + return commands.addWatch(v_id, v.name, (watchRead ? OutAddWatch2.FLAG_READ : 0) | (watchWrite ? OutAddWatch2.FLAG_WRITE : 0), tag); + } catch (IOException ex) { + return null; + } + } + + public synchronized Set getBreakPoints(String scriptName, boolean onlyValid) { + Set lines = new TreeSet<>(); + if (confirmedPointMap.containsKey(scriptName)) { + lines.addAll(confirmedPointMap.get(scriptName)); + } + if (toAddBPointMap.containsKey(scriptName)) { + lines.addAll(toAddBPointMap.get(scriptName)); + } + if (!onlyValid && invalidBreakPointMap.containsKey(scriptName)) { + lines.addAll(invalidBreakPointMap.get(scriptName)); + } + return lines; + } + + public synchronized void clearBreakPoints() { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + invalidBreakPointMap.clear(); + } + + public synchronized Map> getAllBreakPoints(boolean validOnly) { + Map> ret = new HashMap<>(); + for (String scriptName : confirmedPointMap.keySet()) { + Set lines = new TreeSet<>(); + lines.addAll(confirmedPointMap.get(scriptName)); + ret.put(scriptName, lines); + } + for (String scriptName : toAddBPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(toAddBPointMap.get(scriptName)); + } + if (!validOnly) { + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + } + return ret; + } + + public boolean addBreakPoint(String scriptName, int line) { + synchronized (this) { + Logger.getLogger(DebuggerHandler.class + .getName()).log(Level.FINE, "adding bp " + scriptName + ":" + line); + if (isBreakpointToRemove(scriptName, line)) { + toRemoveBPointMap.get(scriptName).remove(line); + if (toRemoveBPointMap.get(scriptName).isEmpty()) { + toRemoveBPointMap.remove(scriptName); + + } + } + + if (isBreakpointConfirmed(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already confirmed"); + return true; + + } + if (isBreakpointInvalid(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already invalid"); + return false; + } + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).add(line); + Logger + .getLogger(DebuggerHandler.class + .getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " added to todo"); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignored + } + + return true; + } + + public synchronized boolean isBreakpointConfirmed(String scriptName, int line) { + return confirmedPointMap.containsKey(scriptName) && confirmedPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToAdd(String scriptName, int line) { + return toAddBPointMap.containsKey(scriptName) && toAddBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToRemove(String scriptName, int line) { + return toRemoveBPointMap.containsKey(scriptName) && toRemoveBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointInvalid(String scriptName, int line) { + return invalidBreakPointMap.containsKey(scriptName) && invalidBreakPointMap.get(scriptName).contains(line); + } + + private synchronized void markBreakPointInvalid(String scriptName, int line) { + if (!invalidBreakPointMap.containsKey(scriptName)) { + invalidBreakPointMap.put(scriptName, new TreeSet<>()); + } + invalidBreakPointMap.get(scriptName).add(line); + } + + private InFrame frame; + + private InConstantPool pool; + + private InBreakAtExt breakInfo; + + private InBreakReason breakReason; + + private final List breakListeners = new ArrayList<>(); + + private final List traceListeners = new ArrayList<>(); + + private final List clisteners = new ArrayList<>(); + + public String moduleToString(int file) { + if (!modulePaths.containsKey(file)) { + return "unknown"; + } + return modulePaths.get(file); + } + + public synchronized InBreakAtExt getBreakInfo() { + if (!paused) { + return null; + } + return breakInfo; + } + + public synchronized InBreakReason getBreakReason() { + if (!paused) { + return null; + } + return breakReason; + } + + public static interface ConnectionListener { + + public void connected(); + + public void disconnected(); + } + + public static interface TraceListener { + + public void trace(String... val); + } + + public static interface BreakListener { + + public void breakAt(String scriptName, int line, int classIndex, int traitIndex, int methodIndex); + + public void doContinue(); + } + + public void addBreakListener(BreakListener l) { + breakListeners.add(l); + } + + public void addTraceListener(TraceListener l) { + traceListeners.add(l); + } + + public void removeTraceListener(TraceListener l) { + traceListeners.remove(l); + } + + public void removeBreakListener(BreakListener l) { + breakListeners.remove(l); + } + + public void addConnectionListener(ConnectionListener l) { + clisteners.add(l); + } + + public void removeConnectionListener(ConnectionListener l) { + clisteners.remove(l); + } + + public synchronized void refreshFrame() { + if (!paused) { + return; + } + try { + frame = commands.getFrame(0); + pool = commands.getConstantPool(0); + } catch (IOException ex) { + //ignore + } + } + + public synchronized InFrame getFrame() { + if (!paused) { + return null; + } + return frame; + } + + public synchronized int moduleIdOf(String pack) { + if (scriptToModule.containsKey(pack)) { + return scriptToModule.get(pack); + } + return -1; + } + + public boolean isPaused() { + if (!isConnected()) { + return false; + } + synchronized (this) { + return paused; + } + } + + public List getSwfs() { + return swfs; + } + + public void disconnect() { + frame = null; + pool = null; + breakInfo = null; + breakReason = null; + connected = false; + if (commands != null) { + commands.disconnect(); + } + commands = null; + synchronized (this) { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + invalidBreakPointMap.clear(); + } + for (ConnectionListener l : clisteners) { + l.disconnected(); + } + } + + public synchronized boolean isConnected() { + return connected; + } + + public DebuggerCommands getCommands() throws IOException { + if (!isConnected() || commands == null) { + throw new IOException("Not connected"); + } + return commands; + } + + private static void enlog(Class cls) { + Level level = Level.FINEST; + + Logger mylog = Logger.getLogger(cls.getName()); + mylog.setLevel(level); + ConsoleHandler ch = new ConsoleHandler(); + ch.setLevel(level); + mylog.addHandler(ch); + } + + @Override + public void failedListen(IOException ex) { + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + disconnect(); + Main.stopRun(); + Main.stopWork(); + View.showMessageDialog(Main.getMainFrame().getPanel(), AppStrings.translate("error.debug.listen").replace("%port%", "" + Debugger.DEBUG_PORT)); + Main.getMainFrame().getPanel().updateMenu(); + } + }); + + } + + @Override + public void connected(DebuggerConnection con) { + clearBreakPoints(); + + Main.startWork(AppStrings.translate("work.debugging"), null); + + synchronized (this) { + paused = false; + } + + Main.getMainFrame().getPanel().updateMenu(); + + //enlog(DebuggerConnection.class); + //enlog(DebuggerCommands.class); + //enlog(DebuggerHandler.class); + try { + con.getMessage(InVersion.class); + } catch (IOException ex) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.SEVERE, null, ex); + } + + //Respon to InProcessTag with OutProcessedTag + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InProcessTag message) { + try { + con.writeMessage(new OutProcessedTag(con)); + } catch (IOException ex) { + //disconnect(); + //ignore + } + } + }); + + swfs.clear(); + + Map moduleNames = new HashMap<>(); + + final Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); + final Pattern patAS3PCode = Pattern.compile("^#PCODE abc:([0-9]+),script:([0-9]+),class:(-?[0-9]+),trait:(-?[0-9]+),method:([0-9]+),body:([0-9]+);(.*)$"); + + try { + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InNumScript t) { + con.dropMessage(t); + } + }); + + modulePaths = new HashMap<>(); + scriptToModule = new HashMap<>(); + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InScript sc) { + moduleNames.put(sc.module, sc.name); + moduleToSwfIndex.put(sc.module, sc.swfIndex); + int file = sc.module; + String name = sc.name; + String[] parts = name.split(";"); + + Matcher m; + if ((m = patAS3.matcher(name)).matches()) { + String clsNameWithSuffix = m.group(3); + String pkg = m.group(2).replace("\\", "."); + m = patAS3PCode.matcher(name); + + if (m.matches()) { + moduleToClassIndex.put(file, Integer.parseInt(m.group(3))); + moduleToTraitIndex.put(file, Integer.parseInt(m.group(4))); + moduleToMethodIndex.put(file, Integer.parseInt(m.group(5))); + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); + name = "#PCODE abc:" + m.group(1) + ",body:" + m.group(6) + ";" + name; + } else { + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); + } + } + modulePaths.put(file, name); + scriptToModule.put(name, file); + con.dropMessage(sc); + } + }); + + /*int numScript = con.getMessage(InNumScript.class).num; + for (int i = 0; i < numScript; i++) { + InScript sc = con.getMessage(InScript.class); + moduleNames.put(sc.module, sc.name); + }*/ + //Pattern patMainFrame = Pattern.compile("^Actions for Scene ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patSymbol = Pattern.compile("^Actions for Symbol ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patAS2 = Pattern.compile("^([^:]+): .*\\.as$"); + //con.getMessage(InSetBreakpoint.class); + commands = new DebuggerCommands(con); + + commands.stopWarning(); + commands.setStopOnFault(); + commands.setEnumerateOverride(); + commands.setNotifyFailure(); + commands.setInvokeSetters(); + commands.setSwfLoadNotify(); + commands.setGetterTimeout(1500); + commands.setSetterTimeout(5000); + + boolean isAS3 = (Main.getMainFrame().getPanel().getCurrentSwf().isAS3()); + con.isAS3 = isAS3; + + //Widelines - only AS3, it hangs in AS1/2 and SWD does not support UI32 lines + if (isAS3) { + con.wideLines = commands.getOption("wide_line_player", "false").equals("true"); + if (con.wideLines) { + commands.setOption("wide_line_debugger", "on"); + } + } + commands.squelch(true); + + con.writeMessage(new OutSwfInfo(con, 0)); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InSwfInfo t) { + for (InSwfInfo.SwfInfo s : t.swfInfos) { + swfs.add(s); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + try { + con.sendMessage(new OutGetSwf(con, (int) s.index), InGetSwf.class); + con.sendMessage(new OutGetSwd(con, (int) s.index), InGetSwd.class); + } catch (IOException ex) { + //ignore + } + } + }); + } + con.dropMessage(t); + } + }); + + InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); + synchronized (this) { + for (int i = 0; i < isb.files.size(); i++) { + String sname = moduleNames.get(isb.files.get(i)); + if (!confirmedPointMap.containsKey(sname)) { + confirmedPointMap.put(sname, new TreeSet<>()); + } + if (toAddBPointMap.containsKey(sname)) { + toAddBPointMap.get(sname).remove(isb.lines.get(i)); + if (toAddBPointMap.get(sname).isEmpty()) { + toAddBPointMap.remove(sname); + } + } + confirmedPointMap.get(sname).add(isb.lines.get(i)); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{sname, isb.lines.get(i)}); + } + } + + synchronized (this) { + connected = true; + } + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InAskBreakpoints message) { + + } + }); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InContinue msg) { + synchronized (DebuggerHandler.this) { + paused = false; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "continued"); + } + for (BreakListener bl : breakListeners) { + bl.doContinue(); + } + } + }); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InBreakAt message) { + synchronized (DebuggerHandler.this) { + paused = true; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "paused"); + + } + + try { + breakInfo = con.getMessage(InBreakAtExt.class); + breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); + + String newBreakScriptName = "unknown"; + if (modulePaths.containsKey(message.file)) { + newBreakScriptName = modulePaths.get(message.file); + + } else if (breakReason.reason != InBreakReason.REASON_SCRIPT_LOADED) { + Logger.getLogger(DebuggerCommands.class.getName()).log(Level.SEVERE, "Invalid file: {0}", message.file); + return; + } + + final String[] reasonNames = new String[]{"unknown", "breakpoint", "watch", "fault", "stopRequest", "step", "halt", "scriptLoaded"}; + String reason = breakReason.reason < reasonNames.length ? reasonNames[breakReason.reason] : reasonNames[0]; + + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "break at {0}:{1}, reason: {2}", new Object[]{newBreakScriptName, message.line, reason}); + + sendBreakPoints(false); + synchronized (DebuggerHandler.this) { + breakScriptName = newBreakScriptName; + breakIp = message.line; + } + + if (breakReason.reason == InBreakReason.REASON_SCRIPT_LOADED) { + if (!Configuration.debugHalt.get()) { + commands.sendContinue(); + return; + } + Main.startWork(AppStrings.translate("work.halted"), null); + } else { + Main.startWork(AppStrings.translate("work.breakat") + newBreakScriptName + ":" + message.line + " " + AppStrings.translate("debug.break.reason." + reason), null); + } + frame = commands.getFrame(0); + pool = commands.getConstantPool(0); + + for (BreakListener l : breakListeners) { + l.breakAt(newBreakScriptName, message.line, + moduleToClassIndex.containsKey(message.file) ? moduleToClassIndex.get(message.file) : -1, + moduleToTraitIndex.containsKey(message.file) ? moduleToTraitIndex.get(message.file) : -1, + moduleToMethodIndex.containsKey(message.file) ? moduleToMethodIndex.get(message.file) : -1 + ); + } + + } catch (IOException ex) { + //ignore + } + + } + }); + + for (ConnectionListener l : clisteners) { + l.connected(); + } + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InTrace tr) { + for (TraceListener l : traceListeners) { + l.trace(tr.text); + } + } + }); + + if (!isAS3) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINER, "End of connect - sending continue"); + con.writeMessage(new OutRewind(con)); + con.writeMessage(new OutPlay(con)); + commands.sendContinue(); + } + + } catch (IOException ex) { + + synchronized (this) { + connected = false; + } + } + } + + private void sendBreakPoints(boolean force) throws IOException { + if (!force && !isPaused()) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "not sending bps, not paused"); + return; + } + synchronized (this) { + for (String scriptName : toRemoveBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toRemoveBPointMap.get(scriptName)) { + if (isBreakpointConfirmed(scriptName, line)) { + commands.removeBreakPoint(file, line); + confirmedPointMap.get(scriptName).remove(line); + if (confirmedPointMap.get(scriptName).isEmpty()) { + confirmedPointMap.remove(scriptName); + } + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} removed", new Object[]{scriptName, line}); + } + } + } + toRemoveBPointMap.clear(); + + for (String scriptName : toAddBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toAddBPointMap.get(scriptName)) { + if (commands.addBreakPoint(file, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{scriptName, line}); + if (!confirmedPointMap.containsKey(scriptName)) { + confirmedPointMap.put(scriptName, new TreeSet<>()); + } + confirmedPointMap.get(scriptName).add(line); + } else { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} unable to submit", new Object[]{scriptName, line}); + markBreakPointInvalid(scriptName, line); + } + } + } else { + for (int line : toAddBPointMap.get(scriptName)) { + markBreakPointInvalid(scriptName, line); + } + } + } + toAddBPointMap.clear(); + + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "sending bps finished"); + + } + + public synchronized InConstantPool getConstantPool() { + if (!paused) { + return null; + } + return pool; + } + + public synchronized InCallFunction callMethod(Variable object, String methodName, List args) throws ActionScriptException { + return callFunction(false, methodName, object, args); + } + + public synchronized InCallFunction callMethod(String object, String methodName, List args) throws ActionScriptException { + InGetVariable igv = getVariable(0, object, false); + return callMethod(igv.parent, methodName, args); + } + + private static String typeAsStr(Object value) { + if (value == null) { + return "null"; + } + if ((value instanceof Long) || (value instanceof Integer)) { + return "int"; + } + if (value instanceof Number) { + return "Number"; + } + if (value instanceof String) { + return "String"; + } + if (value instanceof Variable) { + Variable v = (Variable) value; + return v.getTypeAsStr(); + } + return "String"; + } + + private static String valueAsStr(Object value) { + if (value == null) { + return "null"; + } + if (value instanceof Double) { + double doubleValue = ((Double) value).doubleValue(); + long longValue = (long) doubleValue; + if (doubleValue == longValue) { + return Long.toString(longValue); + } + } + + if (value instanceof Variable) { + Variable v = (Variable) value; + return valueAsStr(v.value); + } + return "" + value; + } + + public synchronized InCallFunction callFunction(boolean isConstructor, String funcName, Variable thisValue, List args) throws ActionScriptException { + List argTypes = new ArrayList<>(); + List argValues = new ArrayList<>(); + for (Object value : args) { + argTypes.add(typeAsStr(value)); + argValues.add(valueAsStr(value)); + } + String thisType = typeAsStr(thisValue); + String thisValueStr = valueAsStr(thisValue); + try { + InCallFunction icf = commands.callFunction(isConstructor, funcName, thisType, thisValueStr, argTypes, argValues); + if (!icf.variables.isEmpty()) { + if ((icf.variables.get(0).flags & VariableFlags.IS_EXCEPTION) > 0) { + throw new ActionScriptException("" + icf.variables.get(0).value); + } + } + return icf; + } catch (IOException e) { + + } + return null; + } +} From 25b54993d4ec62ec6d99044214d82216118fd827 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 22 Jun 2017 14:04:14 +0200 Subject: [PATCH 046/114] - [#1402] SVG export: certain font characters not exported properly fixed --- CHANGELOG.md | 1 + .../exporters/commonshape/SVGExporter.java | 535 +++++++++--------- .../decompiler/flash/tags/base/TextTag.java | 20 +- 3 files changed, 283 insertions(+), 273 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e34f12ffa..2b344137b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to this project will be documented in this file. - [#1354] Various FLA export problem fixes - [#1367] Raw edit conditional type fix. - [#1401] SVG export: duplicate pattern IDs fixed +- [#1402] SVG export: certain font characters not exported properly fixed ## [10.0.0] - 2016-12-24 ### Added diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java index c29249a94..362c71b2e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java @@ -1,266 +1,269 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.commonshape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.helpers.Helper; -import java.awt.Color; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * - * @author JPEXS - */ -public class SVGExporter { - - protected static final String sNamespace = "http://www.w3.org/2000/svg"; - - protected static final String xlinkNamespace = "http://www.w3.org/1999/xlink"; - - protected Document _svg; - - protected Element _svgDefs; - - protected CDATASection _svgStyle; - - protected Stack _svgGs = new Stack<>(); - - public List gradients; - - protected int lastPatternId; - - public Map exportedTags = new HashMap<>(); - - public Map> exportedChars = new HashMap<>(); - - private final Map lastIds = new HashMap<>(); - - private final HashSet fontFaces = new HashSet<>(); - - public boolean useTextTag = Configuration.textExportExportFontFace.get(); - - public SVGExporter(ExportRectangle bounds, double zoom) { - - DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); - try { - DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); - DOMImplementation impl = docBuilder.getDOMImplementation(); - DocumentType svgDocType = impl.createDocumentType("svg", "-//W3C//DTD SVG 1.0//EN", - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); - _svg = impl.createDocument(sNamespace, "svg", svgDocType); - Element svgRoot = _svg.getDocumentElement(); - svgRoot.setAttribute("xmlns:xlink", xlinkNamespace); - if (bounds != null) { - svgRoot.setAttribute("width", (bounds.getWidth() / SWF.unitDivisor) + "px"); - svgRoot.setAttribute("height", (bounds.getHeight() / SWF.unitDivisor) + "px"); - createDefGroup(bounds, null, zoom); - } - } catch (ParserConfigurationException ex) { - Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); - } - gradients = new ArrayList<>(); - } - - private Element getDefs() { - if (_svgDefs == null) { - _svgDefs = _svg.createElement("defs"); - _svg.getDocumentElement().appendChild(_svgDefs); - } - return _svgDefs; - } - - private CDATASection getStyle() { - if (_svgStyle == null) { - Element style = _svg.createElement("style"); - _svgStyle = _svg.createCDATASection(""); - style.appendChild(_svgStyle); - getDefs().appendChild(style); - } - return _svgStyle; - } - - public final void createDefGroup(ExportRectangle bounds, String id) { - createDefGroup(bounds, id, 1); - } - - public final void createDefGroup(ExportRectangle bounds, String id, double zoom) { - Element g = _svg.createElement("g"); - if (bounds != null) { - Matrix mat = Matrix.getTranslateInstance(-bounds.xMin, -bounds.yMin); - mat.scale(zoom); - g.setAttribute("transform", mat.getSvgTransformationString(SWF.unitDivisor, 1)); - } - if (id != null) { - g.setAttribute("id", id); - } - if (_svgGs.size() == 0) { - _svg.getDocumentElement().appendChild(g); - } else { - getDefs().appendChild(g); - } - _svgGs.add(g); - } - - public void endGroup() { - Element g = _svgGs.pop(); - if (g.getChildNodes().getLength() == 0) { - g.getParentNode().removeChild(g); - } - } - - public final Element createSubGroup(Matrix transform, String id) { - Element group = createSubGroup(id, "g"); - if (transform != null) { - group.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); - } - - return group; - } - - public final Element createClipPath(Matrix transform, String id) { - Element group = createSubGroup(id, "clipPath"); - Node parent = group.getParentNode(); - if (parent instanceof Element) { - Element parentElement = (Element) parent; - group.setAttribute("transform", parentElement.getAttribute("transform")); - } - return group; - } - - private Element createSubGroup(String id, String tagName) { - Element group = _svg.createElement(tagName); - if (id != null) { - group.setAttribute("id", id); - } - _svgGs.peek().appendChild(group); - _svgGs.add(group); - return group; - } - - public void addToGroup(Node newChild) { - _svgGs.peek().appendChild(newChild); - } - - public void addToDefs(Node newChild) { - getDefs().appendChild(newChild); - } - - public Element createElement(String tagName) { - return _svg.createElement(tagName); - } - - public String getSVG() { - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - StringWriter writer = new StringWriter(); - try { - Transformer transformer = transformerFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - DOMSource source = new DOMSource(_svg); - StreamResult result = new StreamResult(writer); - transformer.transform(source, result); - } catch (TransformerException ex) { - Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); - } - return writer.toString(); - } - - public void setBackGroundColor(Color backGroundColor) { - Attr attr = _svg.createAttribute("style"); - attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); - } - - public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName) { - Element image = _svg.createElement("use"); - if (transform != null) { - image.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); - image.setAttribute("width", Double.toString(boundRect.getWidth() / (double) SWF.unitDivisor)); - image.setAttribute("height", Double.toString(boundRect.getHeight() / (double) SWF.unitDivisor)); - } - if (instanceName != null) { - image.setAttribute("id", instanceName); - } - image.setAttribute("xlink:href", "#" + href); - _svgGs.peek().appendChild(image); - return image; - } - - public void addStyle(String fontFace, byte[] data, FontExportMode mode) { - if (!fontFaces.contains(fontFace)) { - fontFaces.add(fontFace); - String base64Data = Helper.byteArrayToBase64String(data); - String value = getStyle().getTextContent(); - value += Helper.newLine; - value += " @font-face {" + Helper.newLine; - value += " font-family: \"" + fontFace + "\";" + Helper.newLine; - switch (mode) { - case TTF: - value += " src: url('data:font/truetype;base64," + base64Data + "') format(\"truetype\");" + Helper.newLine; - break; - case WOFF: - value += " src: url('data:font/woff;base64," + base64Data + "') format(\"woff\");" + Helper.newLine; - break; - } - value += " }" + Helper.newLine; - getStyle().setTextContent(value); - } - } - - public String getUniqueId(String prefix) { - Integer lastId = lastIds.get(prefix); - if (lastId == null) { - lastId = 0; - } else { - lastId++; - } - lastIds.put(prefix, lastId); - return prefix + lastId; - } - - protected static double roundPixels20(double pixels) { - return Math.round(pixels * 100) / 100.0; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.commonshape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.helpers.Helper; +import java.awt.Color; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Stack; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Attr; +import org.w3c.dom.CDATASection; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +/** + * + * @author JPEXS + */ +public class SVGExporter { + + protected static final String sNamespace = "http://www.w3.org/2000/svg"; + + protected static final String xlinkNamespace = "http://www.w3.org/1999/xlink"; + + protected Document _svg; + + protected Element _svgDefs; + + protected CDATASection _svgStyle; + + protected Stack _svgGs = new Stack<>(); + + public List gradients; + + protected int lastPatternId; + + public Map exportedTags = new HashMap<>(); + + public Map> exportedChars = new HashMap<>(); + + private final Map lastIds = new HashMap<>(); + + private final HashSet fontFaces = new HashSet<>(); + + public boolean useTextTag = Configuration.textExportExportFontFace.get(); + + public SVGExporter(ExportRectangle bounds, double zoom) { + + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + try { + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + DOMImplementation impl = docBuilder.getDOMImplementation(); + DocumentType svgDocType = impl.createDocumentType("svg", "-//W3C//DTD SVG 1.0//EN", + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); + _svg = impl.createDocument(sNamespace, "svg", svgDocType); + Element svgRoot = _svg.getDocumentElement(); + svgRoot.setAttribute("xmlns:xlink", xlinkNamespace); + if (bounds != null) { + svgRoot.setAttribute("width", (bounds.getWidth() / SWF.unitDivisor) + "px"); + svgRoot.setAttribute("height", (bounds.getHeight() / SWF.unitDivisor) + "px"); + createDefGroup(bounds, null, zoom); + } + } catch (ParserConfigurationException ex) { + Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); + } + gradients = new ArrayList<>(); + } + + private Element getDefs() { + if (_svgDefs == null) { + _svgDefs = _svg.createElement("defs"); + _svg.getDocumentElement().appendChild(_svgDefs); + } + return _svgDefs; + } + + private CDATASection getStyle() { + if (_svgStyle == null) { + Element style = _svg.createElement("style"); + _svgStyle = _svg.createCDATASection(""); + style.appendChild(_svgStyle); + getDefs().appendChild(style); + } + return _svgStyle; + } + + public final void createDefGroup(ExportRectangle bounds, String id) { + createDefGroup(bounds, id, 1); + } + + public final void createDefGroup(ExportRectangle bounds, String id, double zoom) { + Element g = _svg.createElement("g"); + if (bounds != null) { + Matrix mat = Matrix.getTranslateInstance(-bounds.xMin, -bounds.yMin); + mat.scale(zoom); + g.setAttribute("transform", mat.getSvgTransformationString(SWF.unitDivisor, 1)); + } + if (id != null) { + g.setAttribute("id", id); + } + if (_svgGs.size() == 0) { + _svg.getDocumentElement().appendChild(g); + } else { + getDefs().appendChild(g); + } + _svgGs.add(g); + } + + public boolean endGroup() { + Element g = _svgGs.pop(); + if (g.getChildNodes().getLength() == 0) { + g.getParentNode().removeChild(g); + return false; + } + + return true; + } + + public final Element createSubGroup(Matrix transform, String id) { + Element group = createSubGroup(id, "g"); + if (transform != null) { + group.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); + } + + return group; + } + + public final Element createClipPath(Matrix transform, String id) { + Element group = createSubGroup(id, "clipPath"); + Node parent = group.getParentNode(); + if (parent instanceof Element) { + Element parentElement = (Element) parent; + group.setAttribute("transform", parentElement.getAttribute("transform")); + } + return group; + } + + private Element createSubGroup(String id, String tagName) { + Element group = _svg.createElement(tagName); + if (id != null) { + group.setAttribute("id", id); + } + _svgGs.peek().appendChild(group); + _svgGs.add(group); + return group; + } + + public void addToGroup(Node newChild) { + _svgGs.peek().appendChild(newChild); + } + + public void addToDefs(Node newChild) { + getDefs().appendChild(newChild); + } + + public Element createElement(String tagName) { + return _svg.createElement(tagName); + } + + public String getSVG() { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + StringWriter writer = new StringWriter(); + try { + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + DOMSource source = new DOMSource(_svg); + StreamResult result = new StreamResult(writer); + transformer.transform(source, result); + } catch (TransformerException ex) { + Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); + } + return writer.toString(); + } + + public void setBackGroundColor(Color backGroundColor) { + Attr attr = _svg.createAttribute("style"); + attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); + } + + public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName) { + Element image = _svg.createElement("use"); + if (transform != null) { + image.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); + image.setAttribute("width", Double.toString(boundRect.getWidth() / (double) SWF.unitDivisor)); + image.setAttribute("height", Double.toString(boundRect.getHeight() / (double) SWF.unitDivisor)); + } + if (instanceName != null) { + image.setAttribute("id", instanceName); + } + image.setAttribute("xlink:href", "#" + href); + _svgGs.peek().appendChild(image); + return image; + } + + public void addStyle(String fontFace, byte[] data, FontExportMode mode) { + if (!fontFaces.contains(fontFace)) { + fontFaces.add(fontFace); + String base64Data = Helper.byteArrayToBase64String(data); + String value = getStyle().getTextContent(); + value += Helper.newLine; + value += " @font-face {" + Helper.newLine; + value += " font-family: \"" + fontFace + "\";" + Helper.newLine; + switch (mode) { + case TTF: + value += " src: url('data:font/truetype;base64," + base64Data + "') format(\"truetype\");" + Helper.newLine; + break; + case WOFF: + value += " src: url('data:font/woff;base64," + base64Data + "') format(\"woff\");" + Helper.newLine; + break; + } + value += " }" + Helper.newLine; + getStyle().setTextContent(value); + } + } + + public String getUniqueId(String prefix) { + Integer lastId = lastIds.get(prefix); + if (lastId == null) { + lastId = 0; + } else { + lastId++; + } + lastIds.put(prefix, lastId); + return prefix + lastId; + } + + protected static double roundPixels20(double pixels) { + return Math.round(pixels * 100) / 100.0; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index a5229a614..28a86de05 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -752,15 +752,21 @@ public abstract class TextTag extends DrawableTag { exporter.createDefGroup(null, charId); SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); shapeExporter.export(); - exporter.endGroup(); - chs.put(entry.glyphIndex, charId); + if (exporter.endGroup()) { + chs.put(entry.glyphIndex, charId); + } + else { + chs.put(entry.glyphIndex, ""); + } } - Element charImage = exporter.addUse(mat, bounds, charId, null); - RGBA colorA = new RGBA(textColor); - charImage.setAttribute("fill", colorA.toHexRGB()); - if (colorA.alpha != 255) { - charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + if (!"".equals(charId)) { + Element charImage = exporter.addUse(mat, bounds, charId, null); + RGBA colorA = new RGBA(textColor); + charImage.setAttribute("fill", colorA.toHexRGB()); + if (colorA.alpha != 255) { + charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } } x += entry.glyphAdvance; From cdf72b6798a124a3e8fd7d6e5803839782ee4768 Mon Sep 17 00:00:00 2001 From: "honfika@gmail.com" Date: Thu, 22 Jun 2017 14:44:51 +0200 Subject: [PATCH 047/114] - [#1402] SVG export: certain font characters not exported properly fixed 2 --- .../com/jpexs/decompiler/flash/tags/base/TextTag.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index 28a86de05..2fec40855 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -752,12 +752,11 @@ public abstract class TextTag extends DrawableTag { exporter.createDefGroup(null, charId); SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); shapeExporter.export(); - if (exporter.endGroup()) { - chs.put(entry.glyphIndex, charId); - } - else { - chs.put(entry.glyphIndex, ""); + if (!exporter.endGroup()) { + charId = ""; } + + chs.put(entry.glyphIndex, charId); } if (!"".equals(charId)) { From 0a0ecf81120d8ba55f41b6379a83e37451c70094 Mon Sep 17 00:00:00 2001 From: AL Date: Thu, 30 Nov 2017 11:06:36 +0000 Subject: [PATCH 048/114] Debug tooltips on hover When in Debug mode and stopped at a breakpoint, hovering over dientifiers will show up their name and value in a tooltip. All matching locals will be shown, one on each line. --- .../decompiler/flash/gui/DebugPanel.java | 6 ++- .../jpexs/decompiler/flash/gui/MainPanel.java | 2 +- .../decompiler/flash/gui/abc/ABCPanel.java | 52 +++++++++++++++++++ .../flash/gui/abc/DecompiledEditorPane.java | 21 ++++++++ .../flash/gui/action/ActionPanel.java | 9 ++-- 5 files changed, 85 insertions(+), 5 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java index b60bf4a9b..a6a4741d7 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebugPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/DebugPanel.java @@ -85,6 +85,8 @@ public class DebugPanel extends JPanel { private boolean loading = false; + public ABCPanel.VariablesTableModel localsTable; + public static enum SelectedTab { LOG, STACK, SCOPECHAIN, LOCALS, REGISTERS, CALLSTACK, CONSTANTPOOL @@ -346,6 +348,7 @@ public class DebugPanel extends JPanel { synchronized (DebugPanel.this) { SelectedTab oldSel = selectedTab; + localsTable = null; InFrame f = Main.getDebugHandler().getFrame(); if (f != null) { @@ -362,7 +365,8 @@ public class DebugPanel extends JPanel { localIds.addAll(f.argumentFrameIds); localIds.addAll(f.frameIds); - safeSetTreeModel(debugLocalsTable, new ABCPanel.VariablesTableModel(debugLocalsTable, locals, localIds)); + localsTable = new ABCPanel.VariablesTableModel(debugLocalsTable, locals, localIds); + safeSetTreeModel(debugLocalsTable, localsTable); safeSetTreeModel(debugScopeTable, new ABCPanel.VariablesTableModel(debugScopeTable, f.scopeChain, f.scopeChainFrameIds)); /*TableModelListener refreshListener = new TableModelListener() { diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index 9cab00508..e560bc18e 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -823,7 +823,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se return abcPanel; } - private ActionPanel getActionPanel() { + public ActionPanel getActionPanel() { if (actionPanel == null) { actionPanel = new ActionPanel(MainPanel.this); displayPanel.add(actionPanel, CARDACTIONSCRIPTPANEL); diff --git a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java index fe96e26d4..941868d3a 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/ABCPanel.java @@ -119,6 +119,7 @@ import javax.swing.JTable; import javax.swing.JToggleButton; import javax.swing.SwingConstants; import javax.swing.SwingWorker; +import javax.swing.ToolTipManager; import javax.swing.border.BevelBorder; import javax.swing.event.EventListenerList; import javax.swing.event.TableModelListener; @@ -820,6 +821,31 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener" + text + ""; + } + + private void FindVarAndAppendDataToString(VariableNode node, String lowerVarName, StringBuilder builder) { + if (node.var != null && node.var.name.toLowerCase().contains(lowerVarName)) { + builder.append(node.var.name + ": " + node.var.getValueAsStr() + "
"); + } + + if (node.childs != null) { + for (int i = 0; i < node.childs.size(); i++) { + FindVarAndAppendDataToString(node.childs.get(i), lowerVarName, builder); + } + } + } } public ABCPanel(MainPanel mainPanel) { @@ -847,6 +873,28 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener(new FlowLayout(), this); decompiledScrollPane = new JScrollPane(decompiledTextArea); @@ -1534,4 +1582,8 @@ public class ABCPanel extends JPanel implements ItemListener, SearchListener Date: Sun, 7 Jan 2018 17:18:39 +0100 Subject: [PATCH 049/114] Saving files before refreshing line endings --- CHANGELOG.md | 4572 ++++++++--------- .../decompiler/flash/DecompilerPool.java | 364 +- .../exporters/commonshape/SVGExporter.java | 538 +- .../morphshape/SVGMorphShapeExporter.java | 926 ++-- .../exporters/shape/SVGShapeExporter.java | 528 +- .../decompiler/flash/tags/base/ImageTag.java | 562 +- .../flash/tags/base/MorphShapeTag.java | 654 +-- .../decompiler/flash/tags/base/ShapeTag.java | 426 +- .../decompiler/flash/tags/base/TextTag.java | 1570 +++--- .../decompiler/flash/gui/DebuggerHandler.java | 1804 +++---- .../decompiler/flash/gui/ExportDialog.java | 772 +-- .../flash/gui/abc/TraitsListItem.java | 274 +- .../flash/gui/locales/MainFrame_zh.properties | 1468 +++--- .../flash/gui/player/FlashPlayerPanel.java | 876 ++-- 14 files changed, 7667 insertions(+), 7667 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b344137b..32b1f67ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2287 +1,2287 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [Unreleased] -### Added -- [#1240] AS search using multiple threads when parallel speedup is enabled -- [#1308] Search by all P-code files in AS3 -- [#1333] Exporting sprites as swf files -- [#1365] Allow to configure all types of configuration settings from command line -- [#1369] Allow zoom in sprite (and button) export - -### Fixed -- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter -- [#1343] AS 1/2 direct editation critical bug -- [#1348] Cannot properly export frame with cyrillic symbols to SVG -- [#1354] Various FLA export problem fixes -- [#1367] Raw edit conditional type fix. -- [#1401] SVG export: duplicate pattern IDs fixed -- [#1402] SVG export: certain font characters not exported properly fixed - -## [10.0.0] - 2016-12-24 -### Added -- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only -- optional AS3 direct editation with Flex SDK -- AS3 p-code editing - metadata read/write support -- AS3 p-code editing - end of the block command like in RABCDasm -- AS3 p-code editing - popup docs for more than instructions -- Debugger - New columns for variable details - scope, flags, trait -- Debugger - Add watch feature -- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases -- Deobfuscation Tool - Fix colliding trait/classes via toolbar command -- Auto rename identifiers option now fixes colliding trait/classes aswell -- [#1254] FLA export - detecting scripts on AS3 timeline -- [#907] FFDec Library JAR file has version inside it. -- [#1311], [#1313] actionScript source font size -- Display warning when library version and GUI version mismatch -- Changelog file -- [#1308] Search by all P-code files (AS 1/2 only) - -### Changed -- [#1189] AS3 - sort imports to have same order always -- GUI: AS3 P-code header show actual trait type and method type -- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" -- Set advance values button has confirm dialog with information -- [#1274] Linux package no longer requires Oracle Java only -- Library now packaged inside ZIP file - -### Fixed -- P-code docs formatting fix -- Export dialog - handling sprite and SWF frames correctly -- [#1275] debugger - show local variables fixes -- AS3 p-code editing - popup docs correctly displayed when label on line start -- [#1278] replacing DefineBits error -- [#1281] DefineFont 2/3 getting character advance value when replacing fix -- Set advance values button - Do not set advance if the char cannot be displayed in source font -- AS3 Goto declaration for single character names -- Identifier renaming for top level classes -- AS3 direct editation not correctly saving local register names -- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir -- Mac OS X installer fix (.pkg) -- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers -- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix -- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes -- [#1302] Callpropvoid instruction docblock not correct -- [#1309] recent files not getting updates -- [#1312] faster colliding usages finder -- [#1303] garbled text when exporting frame with text -- [#1314] user interface: button order -- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) -- [#1323] Audio playback fails - -## [9.0.0] - 2016-08-12 -### Added -- Instance metadata (AMF3) editing in PlaceObject4 -- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) -- [#1171] Export stroke scale to FLA -- FLA export - check invalid unicode characters -- [#1170] Extract from memory in commandline -- Reload one vs Reload all buttons -- ABC: Float and Float4 support -- AS3 p-code instruction documentation in GUI -- [#1241] Settings to show original bytes in hex view -- Search in dump view -- Jump to resources view from hex view -- Show warning on 32bit JRE - -### Changed -- [#1162] improved opening loaded SWF files -- Flash Viewer - skip frames when not on time -- [#1199] Automatically import alpha channel to JPEG3/4 from PNG - -### Fixed -- [#1151] Filters on texts fixed -- [#1128] Adding characters to font fixed (FontAlignZones not removed) -- [#1163] Clicking open->file makes program buggy -- Refresh tree after raw edit -- [#1172] Text double escape fix -- [#1174] Change language fix -- some AS2 deobfuscation fixes -- [#1183] Index out of bounds fix -- Implicit coersion on binary/unary opfix -- debugger: corect display variable values through getters -- Multiple XLF export fix -- [#1193] FLA export - text tag advance fix, one layer shape fix -- [#1193] FLA export - smoothed image detection, export raw JPEG data -- [#1193] Export space character to TTF correctly -- [#1200] Previous search text selected when quick find -- Flash viewer: aspect ratio on startup fix -- [#1198] Saving trait slot const value -- Zoom parameter commandline fixed -- [#1205] clipping fixed -- [#1194] Wrong sound effects in FLA -- [#1210] Frame Export fix -- Improved/fixed go to declaration in AS3 -- [#1217] PCode window not in same position as AS -- Hide memor search on non windows platform -- [#1244] Incorrect showing of NOP instructions -- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back -- [#1241] File content is different from hex view -- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont -- [#1236] won't open fixed -- [#1251] SWF not same after export XML and import back -- [#1265] Error during export -- [#1268] Font export - Using second glyph when two glyphs for one character found -- [#1268] GFX compacted font - fixed advance values on export - -## [8.0.1] - 2016-02-20 -### Changed -- FFDec debug tab in advanced settings moved to other tabs - -### Fixed -- [#1161] AS1/2 deobfuscation broken -- AS1/2 Simplify expressions fix - -## [8.0.0] - 2016-02-18 -### Added -- Debugger - AS1/2 Show registers -- Debugger - display variables in the tree structure -- Debugger - set value of variable -- Debugger - AS1/2 View constantpool -- Debugger - P-code level debugging for both AS1/2 and AS3 -- Basic SVG import for shapes -- Simplify expression setting -- [#1118] Loading characters through ImportAssets - show as readonly -- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 -- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) -- [#1121] Ability to save binary data by its name -- [#1052] Add object to existing frame -- Allow adding tag to main timeline -- AS1/2: Ctrl+click to declaration of variables, registers -- Allow trait specification in pcode import -- Icons for tag types in Dump view -- Show error message when a text tag is invalid (glyph index problem) -- AS3 direct editation - store local register names in debug info = allow to rename them - -### Changed -- New application icon and splash screen -- [#1145] AS3 better declaration type detection, better convert_x instruction handling -- Binary export - use .swf extension for swf files -- Better tree labels in generic tag editor (Raw edit) -- [#758] Allow zooming more than preview area in internal viewer - -### Fixed -- [#1096] FLA export - pretty print -- [#1104] AS1/2/3 Script Importat not working -- [#1107] Text Offset Incorrect fixed -- [#1106] New Shapes replace function fix -- [#1113] It takes too long to switch between rendered sprite -- [#1075] Lenght of DefineText in some cases -- [#1127] autoRenameIdentifiers is not supported in CLI mode -- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed -- [#1103] Foreach variables fixes -- AS3 Switch fixes -- Default clause position in switch -- [#1133] Incorrect frame order for nested sprite -- [#1135] Handle try "to" in p-code correctly -- Font wideOffsets,wideCodes fixed in DefineFont2/3 -- AS3: super method call -- [#1138] All exported videos are the same file which may be broken -- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages -- [#1137] running flashplayer(debugger) executable in Linux/MacOs -- [#1144] Command line argument renameInvalidIdentifiers -- [#1145] double not (!!) not removed -- [#1147] Sprite is exported incorrectly -- [#1148] handing end of stream exception in abc reader, loc exception -- [#1152] Font info tag modified tag was not set => saved swf was corrupt -- [#1154] Some 32bit JRE problems - program won't start -- [#1145] Correct precedence handling on binary operators -- [#116] not resolving unusual tags in DefineSprite - -## [7.1.2] - 2015-12-03 -### Fixed -- AS3 debugger start halt fix -- AS1/2 debugger fix on nondebug enabled SWFs -- AS1/2 debugger fix for functions -- Debug menu item enabled fix -- AS3 local reg index fix -- Advanced settings calendar -- AVM2 instructions in hex view -- [#1070] Incorrect switch decompilation -- [#1098] Import XML fix - -## [7.1.1] - 2015-11-23 -### Fixed -- Critical debugger fix - widelines - -## [7.1.0] - 2015-11-23 -### Added -- AS1/2 debugger -- Breakpoint/IP marker on line beginning - -### Changed -- Starting debugger on demand -- Installer message about playerglobal is only warning now - -### Fixed -- [#1033], [#1083] AS3 deobfuscation issues -- [#1091] AS 1/2 direct editation saving - -## [7.0.1] - 2015-11-18 -### Fixed -- Debugger: Adding breakpoint if script initializer not displayed - -## [7.0.0] - 2015-11-18 -### Added -- AS3 Debugger - breakpoints, stepping, show variables -- Faster AS3 direct editation - -### Changed -- Better Configuration of flashplayer paths - -### Removed -- Removed old "debugger" buttons -- Removed search from browsers cache - inactual code - -### Fixed -- Many AS3 direct editation related bugs -- [#1076] export fix - -## [6.1.1] - 2015-10-30 -### Fixed -- Deobfuscate AS3 metadata -- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix -- [#1063] AS3 direct edit - script initializer fix, generating method names -- XML export/import fixes -- [#1019] Namespace imports fix -- AVM2 code execution fix -- [#1016] AS3 direct editation fixes -- [#1010] AS2 direct editation - internal and override is not a reserved word -- [#1008] pushshort instruction diassembly -- [#1004] this/super can be AS1/2 variable -- [#933] AS3 allow numbers as object literal keys - -## [6.1.0] - 2015-10-26 -### Added -- Open other loaded SWFs during playback (useful for loaders) -- Export uncompressed data from dump tree -- Print performance statistics from commandline -- [#1062] Editing/displaying script initializers -- Enable debugging on SWF file (commandline) - -### Changed -- Faster syntax highlighting -- Better AS1/2 deobfuscator -- [#418] AS3 deobfuscator improved - -### Fixed -- AS call method fix (first parameter is "this") -- [#1047] open all scripts folders -- [#812] decompile fail -- [#1056] deltaY missing when adding a new StraightEdgeRecord -- [#1057] Editing as in editor results in package name moving -- [#991] GUI export -- [#689] Ignore Case not correctly toggled -- [#1060] reversed and/or detection in some cases -- [#1037] isXML call - -## [6.0.2] - 2015-09-12 -### Added -- AS3: Display and direct edit trait Metadata -- Allow to specify tag type on image or shape import -- Convert image tags from commandline -- [#489] Hex decode very large integers -- Add new tags without show empty folders -- Dependent characters in basic tag info -- [#1007] replace bytearray in raw editing -- Italian translation - -### Changed -- AS2 parser - add string to constant pool if there is not enough space -- [#1044] AS2 - order scripts by physical location, name by offset - -### Removed -- Deprecated commandline parameters removed - -### Fixed -- JNA problems on some JDKs -- [#947] Marklevels errors ignored 17a94b7 -- [#953] Mac application permission fix (maybe) -- [#954] IndexOutOfBounds fix -- [#950] AddTrait setting modified fix -- [#945] AS1/2 directeditation fix - member named as global function -- [#957] AS1/2 IndexOutOfBounds fix -- [#956] Invalid jump offsets warning -- [#968] Sprites export with wrong coloring -- [#978] case sensitivity of filenames -- [#955] AS2 decompilation problem -- Image alpha fixes -- [#966] Go to document class -- [#991] scripts exporting -- [#999] save as fla -- [#1000] image export for malformed JPEG3 tags -- [#1017] store alchemy opcodes with wrong order -- [#1030] stack overflow fix - -## [6.0.1] - 2015-07-06 -### Added -- Special §§ instructions marked as red -- [#949] Replace alpha channel from commandline -- AS3 deobfuscation from commandline -- Option to ignore FlashCC/Alchemy packages - -### Changed -- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements - -### Fixed -- AS1/2 deobfuscation fixed -- [#952] Not loading SWF without extension - -## [6.0.0] - 2015-07-04 -### Added -- New AS3 deobfuscation method -- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... -- Allow reload FFDec when no SWF is opened -- [#858] Allow to set compression type in header -- [#905] Show codec details for sound items -- Better alchemy/DomainMemory instruction handling -- Better obfuscated names handling -- [#920] Export instance name to SVG -- [#921] Export html DefineEditText to SVG -- Open multiple files with drag and drop -- Better "multi packs" handling (Alchemy) -- SWF version 29 to flash player 18 mapping -- ImportAssets2 sha1 field -- [#924] Sprites to image from commandline -- AS1/2 direct editation big numbers fix -- Allow to add FILTERs and SHAPERECORDs in generic tag editor -- Enable close all menu when no swf is selected -- Restore modified state even when something goes wrong -- Some old tags added - -### Changed -- AS decompilation highly improved -- Better &&, || handling -- DoABCDefine renamed to DoABC2 -- Separated Sprite export settings - -### Deprecated -- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) - -### Fixed -- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. -- Few menu issues -- [#895] Correct handling CMYK JPEG -- [#884] AS direct edit assignment -- [#899] Show script after AS3 direct editation -- Some AS1/2 parser problems -- [#903] FLA export - fix for missing fontname, lastframe -- [#855] AS3 direct edit - for..in variable declaration fix -- [#850] Constant initialization for same multinames -- [#832] AS3 direct edit - other ABCs resolving fix -- [#904] Cannot export images -- [#910] Missing instructions -- Opening not existent files on restoring last session -- [#922] Edit text leading -- Put image before shape on shape replace -- [#916] Replacing Shape corrupts SWF -- JRE setup parameters fixed -- [#938] Parallel speedup limit fix - -## [5.3.0] - 2015-05-25 -### Added -- Generic tag editor: improved table editing (import/export assets tags, etc.) - -### Changed -- Classic (nonribbon) UI improved - has same items as Ribbon UI -- Icons improvements -- Disabling menu items when work in progress - -### Fixed -- [#897] Classic UI fix - -## [5.2.0] - 2015-05-22 -### Added -- UI8 editbox for swf version in header panel -- Basic tag information panel - -### Changed -- AS1/2: Shown only the constant pool(s) in pcode editor -- Do not allow to chage tag tree selection, when current tag is under editing -- Faster bitmap export -- Using less memory when playing sounds -- Error message changed when the opened file is not swf - -### Fixed -- [#470] panels size after resizing from/to full screen -- [#877] A small glitch after search in AS -- [#878] small glitch after saving P-code or swf file -- [#470] glitch -- [#845] If frame consist 2 DoAction then it imports only first one -- pdf export (when no frame exists) -- text rendering (alpha channel was ignored), -- bmp export (paddings when width%2==1) -- [#883] -dumpSWF option does not work anymore -- [#882] Canvas export border size -- [#760] Internal viewer line linear gradient fill is not working -- [#887] error on export a special swf's P-CODE -- Extensions of exported images fixed - -## [5.1.0] - 2015-05-04 -### Added -- Allow to copy/move multiple tags, and dependencies -- [#842] For reconstruction if debug line info present -- [#841] Loop control for sound preview -- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button -- Scrollbar added to fontpanel -- SWF header editor -- Configure what object types to export in exportdialog - -### Changed -- Better gif exporter -- [#772]: closing loading dialog now cancels the loading of the swf -- [#762] export pcode with different extension - -### Fixed -- CRITICAL: Update System Bug causing updates not working -- [#862] AS3 asm: do not read beyond return/throw instructions -- [#865], [#613]: ribbon prefered width fix -- [#868] export path fix, allow to export buttons -- [#865] TagTree font size problem on high resolution screens -- [#713],[#807] Installer for 4.0+ fails to access Adobe Website -- [#728] Large fonts, [#857] add scroll on DefineFont3 - -## [5.0.2] - 2015-04-18 -### Added -- Reopen last session - -### Fixed -- ffdec.sh file line endings fixed - -## [5.0.1] - 2015-04-18 -### Fixed -- [#860]: Opening bundle (zip, swc, any binary file) files fixed - -## [5.0.0] - 2015-04-18 -### Added -- Color skins -- [#824] Mac OS X package -- [#809] Move left,right buttons for DefineTexts using translatex parameter -- [#805] Editor mode for DefineTexts -- [#825] Hotkeys for next/previous DefineText -- Export/Import symbol classes/export asset tags -- Frame export progress -- [#737] Single file script export -- Displaying changed AS3 scripts in GUI as bold -- Additional character info tags placed under character node -- New icons for other tags (metadata,fileattributes,setbackground,place/remove) -- Metadata tag editor - -### Changed -- Default color skin altered -- [#350] Allow only one running instance (Windows only, can be turned off) -- SWFs in zip based bundles (SWC for example) can be modified & saved -- Performace improvements -- More compact SWF-XML format -- Marking changed parentnodes as bold too - -### Fixed -- [#814] Exporting with scale problem -- [#816] P-code not shown after class initializer trait selection -- [#835] Static initializer improvements -- AS3 direct editing - local register decrement fix -- AS3 direct editing - maintain register order/names -- [#836] AS1/2/3 Correct expression precedence handling -- AS3 preincrement -- [#848] Correct toggling text switches -- [#817] AS1/2 for..in variable declaration -- [#849] Attribute member -- [#852] Ignore case for russian characters -- [#837] AS3 try..finally without catch - -## [4.1.1] - 2015-02-21 -### Added -- Export/Import XML added to ribbon menu -- Few GUI enhancements -- Undo tag changes context menu - -### Changed -- Java 8 now required - -### Removed -- Removed support for Java below 8 - -### Fixed -- [#811] export ActionScript - -## [4.1.0] - 2015-02-18 -### Added -- XML export/import -- confirmation dialogs added -- Add support for non-standard ABC-compressed SWF file -- [#745] Copy tag to another SWF -- [#803] Align text in DefineText - -### Changed -- performance improvements -- [#758] Zoom to fit is dynamic - -### Fixed -- [#738] Frame export -- [#742] Can't edit frames -- [#747] Move tag to adds extra frame -- [#749] Internal viewer Sprite fill color -- [#752] Sound is not stopped -- [#753] Reload swf -- [#759] Decompilation § symbol -- [#766] Can't extract all resources -- [#768] Super calls not being correctly recognized -- [#773] Scripts associated with ClipActions are not shown -- [#776] Stop working after setting "number of threads" to 0 -- [#783] No OK box when edited script or text was saved -- [#785] Text search. Remember last choise, Unicode case insensitive search -- [#787] Search in AS bug (when navigating to searched results) -- [#788] Add DefineCompactedFont Tag to gfx file -- [#790] Impossible to change letters under a font -- [#794] Font extraction fails sometimes -- [#798] Close file streams after export, exporting progress -- [#800] Unexpected deleted carrier return in DefineEditText -- Build fix on Linux -- Fis Startup Script for OpenJDK -- Other minor fixes - -## [4.0.5] - 2014-12-01 -### Added -- Escape control characters in strings, identifier names -- [#676] import text error messages / logging enhancement -- [#734] \xAB escapes, \uABCD escapes -- [#687] AS3 - allowing p-code comments on separate line -- [#709] Text Export to Single File with custom filename - -### Fixed -- [#732] Random freezing - JavactiveX library updated. -- [#730] Not working without ActiveX fix on Windows -- [#735] Automatic deobfuscation not correctly switched (required restart) - -## [4.0.4] - 2014-11-23 -### Changed -- better file cache, removing unneccessary temp files - -### Fixed -- obfuscated identifiers - -## [4.0.3] - 2014-11-23 -### Added -- [#722] Go to next/previous frame -- BMP file format export (images,frames,shapes) and import(images) - -### Fixed -- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type -- [#715] namespace resolving fix -- [#635],[#726] placing cursor inside Unicode characters - -## [4.0.2] - 2014-11-22 -### Added -- show frame number during play -- flashplayer - show controls for DefineSprite -- goto frame -- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design - -### Changed -- [#720]: edited shape tag is not marked as modified after replacing -- reorganized about dialog - -### Fixed -- [#719] null swf name in Proxy after cancelling rename dialog -- flashplayer - font display -- [#723]: saving swf with invalid referenced characters -- DefineCompactedFont paging -- [#288] Less memory usage during FLA export -- Corrected syntax hilighting for AS3 P-code - -## [4.0.1] - 2014-11-12 -### Fixed -- [#713] Installer can continue when no file can be downloaded -- Fixed shapes -- Checking for updates moved to separate thread - -## [4.0.0] - 2014-11-11 -### Added -- [#677] Zoom level in export settings -- internal viewer: linear/srgb gradients -- zooming buttons for flashplayer/internal viewer -- stroke scaling modes for canvas export -- create snapshot button -- [#389] Selecting font face on import -- [#701] Importing font from TTF file -- Reorganized font panel -- [#707] Debugger for logging messages -- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets -- [#685] Getting local register names from debug info can be disabled -- Adding new tags -- [#698] Allowing unicode letters in identifiers -- [#710] Information about deobfuscation in error comments -- One EXE for 32/64 bit, uses percentage memory. -- EXE SplashScreen -- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc -- Config setting to load inner SWFs automatically -- Replace shape with image - -### Changed -- better FlashPlayer integration using JavactiveX library -- Faster building tag tree -- Faster timeline construction -- [#711] Improved folder view - faster and with correct context menu - -### Fixed -- AS2 deobfuscation fixes -- AS2 loops fix -- [#681] Linux script fixes -- AS2 constructor name fix -- [#688] AS3 direct edit fixes -- [#691] AS3 p-code reading/saving fix -- AS3 direct edit -submethod name resolve fix -- frames to html canvas fix -- [#524] Mask layer not applied when nonempty script layer -- [#663] AS3 imports fixes -- Font export of dot character -- Font panel Yes button fixed -- [#702] GFX font reading fix -- Better obfuscated names handling -- [#539] for(each) in declaration fixes - -## [3.0.0] - 2014-09-20 -### Added -- Separated GUI (GPL) and library (now LGPL) -- Editing obfuscated identifiers via new paragraph(§) syntax -- Timeline View with preview and object hilighting -- Show GFX data in dump view -- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline -- Dump view - selecting node -- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption - -### Removed -- Removed deprecated commandline export formats (see --help) - -### Fixed -- FileAttributes tag reading fix -- [#649] GFX reading fixed -- [#656] Search in memory - 64 bit processes fix -- [#661] scripts not showing -- [#664] expanding fillStyles in raw edit -- [#668] add missing character fix, text tags fix -- [#674] texts hilighting initialization fix -- [#675] AS1/2 and/or operator compilation -- [#632] Locking file after opening (cannot save, etc.) -- [#651] Unnecessary removing expression killed in unreachable part -- [#678] Windows batch file paths fixed -- [#672] Disabling transparency slider on RGB only selection -- [#684] Sound streams inside DefineSprites, soundstream handling - -## [2.1.4] - 2014-08-23 -### Added -- AS1/2: New method for deobfuscation (can be switched off in settings) -- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters - -### Fixed -- [#647] Skipping FileAttributesTag with Parallel speedup on -- [#648] Export from embedded SWF - -## [2.1.3] - 2014-08-18 -### Added -- Show "save" and "saveas" in application menu -- Saving data range in dump view -- Show actions, abcdata in dumpview (context menu on the tree node) -- [#612] show color in hex format - -### Changed -- Faster dump info collecting (less memory) -- Allow selecting multiple files in open file dialog - -### Fixed -- [#623] ffdec.sh UNIX file endings, executable -- [#624] search in embedded swf files -- [#632] AS1/2 Unnecessary GetVariable before NewObject -- [#627] filter swf not working -- LZMA saving -- Export pcode&hex from commandline -- [#640] text import fixed, ignore BOM - -## [2.1.2] - 2014-07-20 -### Added -- Dump view -- Context menu: Jump to character, raw edit all tags -- Catalan translation -- SWF header display - -### Fixed -- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes -- [#592] AS3 Multiname resolving in P-code causing different bytecode -- [#585] AS3 moving popped values to output -- [#578] Always on top fixed on search results -- [#501] GotoFrame2 fix -- [#616] Frames to PNG export -- Export context menu -- [#559] Bitmap export opacity -- [#401] Placeobject 3/4 fix -- [#593] Return object newline -- [#594] Setting for curly brace - -## [2.1.1] - 2014-06-05 -### Added -- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers -- AS1/2 direct edit - global functions improvements -- AS1/2 negate operator, unary minus operator -- Opening SWFs in BinaryData tags -- AS1: Old string operators support, and/or, <> operator (editation) -- Statusbar loading animation improved -- [#579] AS3 direct editation - removing old class/methods from ABC -- remove character without the dependencies (remove only the place/remove tags) -- Running on system with no home directory -- [#428] PDF export (as images only) -- Commandline FlashPaper to PDF export -- Select frames / Characters commandline options - -### Changed -- [#337] quickfind visibility improved -- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) - -### Fixed -- [#576] AS1/2 direct editation: DefineFunction2 fix -- AS1/2 property fix -- AS1/2 typeof operator fix -- [#250] line spacing fix -- PlaceObject 3-4 className -- [#579] AS3 direct editation bugfixes - property resolving, integer values -- Morphshape canvas export fix -- Canvas export fix - closing path -- [#580] Rename invalid identifiers commandline fix -- [#510] JSyntaxPane find and replace dialog wrap around fix -- No more frame caching during export => memory saving (like [#583]) -- [#586] DropShadow filter fix -- Canvas export colortransform fix - -## [2.1.0 update 2] - 2014-05-08 -### Added -- AS3 decompilation/editation: Vector initializers -- AS3 direct editation: more classes in one file - -### Fixed -- [#574] DefineSprite editing fix -- Various AS3 direct editation fixes - -## [2.1.0 update 1] - 2014-05-05 -### Added -- Portugese-brasilian translation - -### Changed -- HTML Canvas export improvements - -### Fixed -- Various AS3 direct editation bugs, like [#570] - -## [2.1.0] - 2014-05-01 -### Added -- AS3 direct editation (Experimental!) -- Frames SVG Export -- Shape/MorphShape/Frames HTML 5 Canvas Export -- [#559] morphshapes as animated SVG -- [#563] Single file text export/import -- Font WOFF export -- Advanced settings dialog with tabs, config names, descriptions - -### Fixed -- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments -- Internal viewer: Filters fix - -## [2.0.1 update 2] - 2014-04-05 -### Fixed -- [#557] AS3 null namespace fix - p-code not working - -## [2.0.1 update 1] - 2014-04-04 -### Fixed -- [#556] Goto main class on startup fix -- [#557] Nullpointer fix (private namespaces) - -## [2.0.1] - 2014-04-03 -### Added -- Thumbnail view -- Font TTF export -- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) -- Expand all context menu -- Internal viewer: Button mouse move and click handling -- Playing sounds without flash player -- Internal viewer: Sounds on stage -- All sounds to WAV export -- Internal viewer: Showing texts, dynamic text border/fill -- [#504]: Unicode characters in JSyntaxPane -- Internal viewer: showing object under cursor -- Folder icons -- Sound/Image format on command line. -- Removing placeobject tags -- Removing frames -- AS: "elseif" statements -- Code formatting: space before parenthesis - -### Changed -- Single frames animated. - -### Fixed -- [#529] limit the number of displayed binaryData bytes -- [#538] Interface are sometimes dynamic -- [#537] super is sometime preceded by a dot -- [#540] Saving SWF changes very large static uint values -- [#387] Frames preview bugged -- AS:loop mismatch fix on parallel speedup -- [#552] Some timeout exceptions -- [#494] Fixed nightly builds updates - -## [2.0.0] - 2014-03-02 -### Added -- Generic tag tree editor -- Timeline view (stub only) -- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) -- [#513]: command line option to extract swf from binary file -- Configurable code formatting (Indentation + brace position) -- [#262] Export FLA: Font character ranges export -- Configurable checking for updates - -### Changed -- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes -- Improved commandline usage -- Automatic deobfuscation default value set to False (See News on webpages) -- Check for updates can be configured to inform about Nightly builds aswell - -### Deprecated -- Some commandline options are now deprecated, see --help - -### Fixed -- [#499] Cannot save via Proxy fixed -- [#504] font name reading fixed -- [#508] Support for OS without GUI -- [#305] Export FLA: empty sound layers -- [#312] Export FLA: Improved Shape/MorphShape fix -- [#503] Export FLA: Smoothing invalid shapes -- [#401] Invalid GFX tags in non GFX files -- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues -- [#361] FFDec icon is not visible on application start -- [#392] Video stream data fix -- [#516] AS3 P-code editor - Null name namespace handling - -## [1.8.1 update 1] - 2014-02-02 -### Fixed -- [#495] font embedding fix -- [#496] date format in new version dialog -- cosmetic changes - -## [1.8.1] - 2014-01-30 -### Added -- [#299] replace DefineBits images -- [#303] open folder with exported FLA -- [#324],[#346] SWC/zip/other binary file support -- [#371] detailed logging -- [#426] command line switch to rename identifiers -- [#457] clear recent opened files list -- [#458] save selected system font for swf fonts -- [#460] text editor: do not scroll to the end automatically -- [#462] font embedding dialog: show more sample characters -- [#463] global search in texts -- [#465] make font properties editable -- [#466] font preview - -### Changed -- [#369] new SVG and preview image rendering -- [#390] refresh font list without reloading the application -- [#453] update texts aftert adding new character to a font tag -- [#459] remember text panel splitter position -- [#461] font panel gui redesigned - -### Fixed -- [#451] dialog windows are not on the center of the screen -- [#454] Text syntax highlighting -- [#455],[#465] classic interface issues -- [#474] changeing language only available one time -- [#477] log window localization -- [#481] SVG export fix -- [#484] Oversized advance value after editing DefineText with DefineFont2 font -- [#493] missing search results - -## [1.8.0 update 1] - 2013-12-27 -### Added -- [#453] refresh (edit+save action) all texts button - -### Fixed -- Flash panel and font panel fixed - -## [1.8.0] - 2013-12-27 -### Added -- [#350] Allow to open multiple SWFs -- [#365] Filter fake SWFs during memory search -- [#366] Allow to sort the result list in memory search window -- [#429] Auto rename invalid identifiers setting -- [#447] Non-ribbon interface - -### Fixed -- [#354] Infinite decompilation fixed -- [#438] Case sensitive Command line arguments fixed -- [#436] Saving actionscript fixed -- [#446] Precedence issue fixed -- [#451] Dialogue window positions on a multi-monitor configuration fixed - -## [1.7.4 update 1] - 2013-12-05 -### Added -- [#426] Command line parameter for renaming invalid identifiers - -### Fixed -- [#427] Exception on linux fixed -- [#405], [#420], [#421] Some decompilation issues fixed -- [#430] Configuration default value problem fixed -- [#397], [#431] Deobfuscation stucked sometimes problem fixed - -## [1.7.4] - 2013-11-10 -### Added -- [#169] hexedit method body bytes -- [#335] last opened files -- [#404] Exporting P-code and Hex + console parameters -- [#407] register name is configurable -- Advanced settings -- Cancellable decompiling, exporting and searching - -### Fixed -- [#399], [#400] performance optimizations - -## [1.7.3 update 2] - 2013-09-29 -### Fixed -- [#398] AS3 p-code values with index 0 (null) - -## [1.7.3 update 1] - 2013-09-28 -### Added -- [#382] AS3: Adding new method - -## [1.7.3] - 2013-09-27 -### Added -- AS3: Multiname and namespace editing. -- [#382],[#396] AS3: Adding new trait (method/slot/const) -- AS3: Highlighting pair parenthesis/bracket -- AS3: Editing various new P-code parameters -- AS3: Highligting of trait names/types/parameters -- AS3: Global rename identifier for traits -- [#357] Playback controls for DefineSound -- [#391] AS3: Native methods mark -- [#395] Support for GFx ScaleForm SWFs (with fonts editing) -- Displaying fonts in internal viewer -- [#334], [#395] New Embed font dialog - selecting character ranges with preview -- Replacing characters in font (Yes/No to all dialog) - -### Changed -- AS3: New p-code syntax inspired by RABCDasm -- AS3: Editing whole trait in one textarea -- AS3: Removed messages about adding new constants -- AS3: Modified colors in editor -- [#301] Clearing error log causes icon to reset - -## [1.7.2 update 2] - 2013-09-13 -### Changed -- Updated translations - -### Fixed -- [#383] Firefox browser cache handling -- [#386] SWF resizing - -## [1.7.2 update 1] - 2013-09-11 -### Changed -- updated translations - -### Fixed -- [#383] Fixed cache loading when Firefox not used - -## [1.7.2] - 2013-09-11 -### Added -- [#357] Sounds Preview (Windows only) -- Movies preview (Windows only) -- Whole SWF display -- Preview controls (Play,Pause,Stop) -- Search SWFs in browsers cache (Firefox, Chrome) -- [#367] Memory search: Save selected files to disk -- Portugese translation - -### Changed -- [#380] Faster displaying DefineBitsLossless(2) images - -### Fixed -- [#292] Background color for Fonts preview fixed -- [#375] Replacing DefineBitsLossless image tag -- [#378] Refreshing language of JSyntaxPane -- MORPHGRADIENT reading fix - -## [1.7.1] - 2013-08-25 -### Added -- Loading SWFs from other processes memory (Windows only, sorry) -- [#325] Spanish translation -- [#210] Ukrainian and Dutch translation -- [#355] Chinese translation -- [#292] Change background color in SWF preview -- [#301] Clear errors log button -- [#313] Command line parameter for ignore all errors -- [#330] Protection agains adding same characters -- [#332] AS1/2 Showing elapsed times during commandline export -- [#344] Reload opened SWF -- Decompilation timeouts - -### Fixed -- [#295] Export FLA: wrong font -- [#297] Too bright titlebar button colors -- [#307] Export FLA: fixed empty textfields -- [#309] Export FLA: static text letter spacing detection -- [#310] Export FLA: Strokes -- [#311] Export FLA: BitmapFill -- [#327] AS1/2 Disassembly error stop application -- [#328] Fixed replacing images in DefineBitsJPEGX -- [#333] AS1/2 action reading -- [#336] Graph window is too small -- [#337] Quick search panel barely visible in same cases -- [#338] Expand/collapse icon in errorlog - -## [1.7.0 update 1] - 2013-08-11 -### Added -- [#315] German translation (partial) - -### Fixed -- [#123] Better context menu integration -- [#243],[#326] Better deobfuscation -- [#287] Typo in parallelSpeedUp parameter -- [#290],[#291] improved select language dialog -- [#294] minor GUI fixes -- [#298] Progressbar positition issues -- [#296] better export directory remembering -- [#314] Better deobfuscating filenames -- [#316] Readonly editor panes accepted Ctrl+Z/Y -- [#318] Export FLA: Shapes export fix -- [#319] AS3: Improved try..catch..finally decompilation -- [#323] AS3: Fixed default switch part - -## [1.7.0] - 2013-08-03 -### Added -- Listing contributors on about page -- [#223] AS2: Detecting uninitialized class fields -- [#250] Export FLA: Detecting static fields margin and spacing -- [#261] Export FLA: AS1/2 Frame scripts on first layer -- [#269] Commandline parameters for switching configuration -- [#274] AS3 Displaying elapsed time during commandline export -- [#275] AS3 Removing returnvoid as last statement - -### Changed -- New GUI based on Substance look and feel -- Menu changed to ribbon panel -- New round icon -- [#258] AS1/2: Improved chained assignments -- [#267] Starting program without choosing a file -- [#286] Saving to temp file first - -### Fixed -- [#123] Improved context menu integration on Windows -- [#233] Globally rename identifier deselects item in the tree -- [#235] Export FLA: Dynamic text fields coordinates -- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation -- [#251] Export FLA: Fixed filter strength rounding -- [#257] Export FLA: Text field color and size issues -- [#259] Fixed images alpha -- [#260] Export FLA: Labels position -- [#268] AS1/2 Function parameter shown as register instead loc -- [#272] AS3 Class initializer editation fix -- [#276] Fixed anonymous/inline functions handling -- [#220] Improved editing fonts / texts -- [#284],... other small fixes - -## [1.6.7] - 2013-07-20 -### Added -- [#220] Selection of font to import characters from -- [#232] Automatically add .swf extension in saveas dialog -- [#253] Abort/Retry/Ignore dialog on errors with file saving - -### Changed -- Improved translations - -### Fixed -- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation -- [#203] AS1/2 improved direct editing -- [#220] Adding characters to font fix -- [#225] AS1/2 object literal without name quotes -- [#236] AS1/2 Rename invalid identifiers issues -- [#245] AS3 Double space around "as" keyword -- [#247] AS3 Scrolling to main class at startup -- [#248] Memory issues (slowdown) -- [#254] Expressions as commands -- [#255] Windows 7 loading issues -- [#256] AS3 Object literal in return clause -- SWF text parsing (new lines) -- Labels size by locales - -## [1.6.6 update 2] - 2013-07-16 -### Fixed -- [#241] Program could not be started - -## [1.6.6 update 1] - 2013-07-16 -### Changed -- Better localization support - -### Fixed -- [#238],[#239],[#240] Fixed deobfuscation related problems -- [#237] Parentheses in AS1/2 add,subtract - -## [1.6.6] - 2013-07-16 -### Added -- [#217] Russian translation (focus) -- [#219] Hungarian translation (honfika) -- [#224] Swedish translation (Capasha) -- [#220] Adding characters to Fonts, displaying font info -- [#121] Search progress indication -- Error log - -### Changed -- [#203] Improved direct editing of AS1/2 -- [#207] Update SWF preview after switching external/internal flash player - -### Fixed -- [#151] Memory caching -- [#171] Skipping invalid AS3 code - newobject, newarray -- [#206] AS3 switch problem -- [#208] Renaming anonymous functions -- [#209],[#229] FLA export texts positions -- [#213],[#221] other decompilation issues -- [#225] AS object literal broken with ternar operator -- [#226] onClip indentation in FLA export -- [#227] gotoAndStop wrong frame index -- [#230] FLA export missing strokes -- Shapes viewer - missing strokes - -## [1.6.5 update 1] - 2013-07-09 -### Fixed -- [#151] Fixed caching in memory -- [#172] AS1/2 constant detection fix -- [#174] Renaming SymbolClass fix -- [#175],[#212] Fixed create directory issues on export -- [#185],[#186] on-clip actions indentation -- [#197] AS1/2 Missing storeregister before switch -- [#216] AS2 Fixed field order -- [#213] AS2 Fixed var fields quotes, switch nullpointer - -## [1.6.5] - 2013-07-08 -### Added -- Multilanguage support (currently English and Czech) -- [#151] Option for caching in memory instead of files -- [#168] Export selection in tree context menu -- [#176] option to show main class on startup -- [#177] saving window maximized state -- [#202] Removing tags other than DefineSprite - -### Changed -- [#173],[#190] Better renaming -- [#129], [#153] Better deobfuscation -- [#180] better error handling -- [#185],[#186] better displaying and exporting onclip actions - -### Fixed -- [#123] Better context menu integration -- [#136] FLA export - text sizes -- [#137],[#179] foreach issues (hasNext) -- [#144] Plain text export - empty line fix -- [#144] Not displaying texts -- [#164] DefineMorphShape issues -- [#167] Sprite tag appearing twice in export filename -- [#170] AS3 Try in loop -- [#172] loop detection fix -- [#175] use empty namespace -- [#178] AS subtract with negate -- [#181] AS3 missing quotes in object field -- [#182] missing namespace imports -- [#183] wrong stage size -- [#184] wrong video link -- [#189] Fixed three dots in tree -- [#191] Focalgradient fill fix -- [#195] AS2 issues -- [#196],[#197] switch issues -- [#198] DefineFont2 empty check -- [#200] DefineBitsLossLess fix -- [#201] Nonworking main window in Linux/MacOS (due toAssociation) - -## [1.6.4 update 1] - 2013-06-30 -### Fixed -- [#166] For loops detection -- [#165] AS3:direct lookupswitch support - -## [1.6.4] - 2013-06-30 -### Added -- [#63] Globally rename identifier -- [#67] Deobfuscation - rename identifiers according to type -- [#117] Drag & Drop SWF file to main window opens it -- [#123] Context menu integration on Windows -- [#127] Drag & Drop items from tree outside of application -- [#134] AS3: Find document class -- [#144] New lines in plain text export -- [#155] Remembering window size + splitbar positions between runs - -### Changed -- [#142] Using exportassets tag for tag names -- [#146] Display AS2 classes as tree of packages -- Better loop detection - -### Fixed -- [#129] AS1/2: not refreshing decompiled after rename -- [#130] Renaming SymbolClass identifiers too -- [#132] Renaming identifiers renamed strings -- [#136] Invalid text positions in FLA export -- [#145] Unicode support -- [#147] Escape filenames during obfuscated AS3 export -- [#148] Better package vs classname handling -- [#152] Empty if branches not inverted -- [#156] Better search handling (not freezing) -- [#157] AS3: Try statements in loops -- [#158] Graph repaint problem -- [#159] AS3: Improper rest parameter handling -- [#160] Commandline binaryData export -- [#162] DefineBitsJPEG2 image replacing -- [#163] Closing SWF file after loading -- other minor fixes - -## [1.6.3 update 2] - 2013-06-21 -### Changed -- [#149] Ifs with empty onTrue branches now inverted - -### Fixed -- [#150] Long line restriction removed - -## [1.6.3 update 1] - 2013-06-21 -### Fixed -- Memory limit decreased - FFDec was not working on 32 bit JVM. - -## [1.6.3] - 2013-06-20 -### Changed -- Parallel SpeedUp can be disabled in menu -- Better loop detection - -### Fixed -- [#119] Replacements file not found issue -- [#101] AS1/2 postincrement fix -- [#114],[#116],[#135],[#141] Fixed loop detection -- [#102] Fixed loop highlighting in export -- [#124] Flash player file path detection -- [#128] Improved imports -- [#135] CommentItem fix -- [#129],[#131] Better deobfuscation -- [#104] AS3 inc/dec local deobfuscation fix -- [#113],[#133],[#140] Memory limit increased - -## [1.6.2] - 2013-06-09 -### Added -- New loop detection algorithm - -### Changed -- [#108] - Faster loading and decompiling (Parallelism) -- Improved Internal flash viewer - shapes and morphshapes - -### Fixed -- Ternar operator fix -- [#102] Fixed Shapes to FLA export -- AS1/2 class detection fix -- [#105],[#104],[#101] fixed via new loop detection - -## [1.6.1] - 2013-06-03 -### Added -- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) -- [#109], [#106], [#107] some code improvements - -### Changed -- Application needs Java 1.7 to run - -### Removed -- Support for Java before 1.7 - -### Fixed -- [#102], [#110] AS3: Class highlight fix -- [#103] AS3:Fixed setslot handling -- [#104] AS3:Inc/Declocal nullpointer fix -- [#104] Multiple conditions in loop fix -- [#111] AS3:Object literal truncates line -- [#105] Better do while..break handling -- loop fixes - -## [1.6.0 update 1] - 2013-05-25 -### Added -- better FLA export - -### Fixed -- Many FLA export related bugs (like [#96]) -- [#98] Empty initializers do not cause empty lines now -- [#99] small logging issues -- [#100] large obfuscated code support - -## [1.6.0] - 2013-05-20 -### Added -- Export to FLA (Experimental BETA!) -- [#85] Search text in all ActionScripts -- SWF 11 support - -### Fixed -- [#79] ActionStartDrag constraint fix -- [#92] Inversed GreaterThan/LessThan -- [#93] AS1/2 fixed switch detection -- [#94] AS1/2 ActionTry - register cast fix -- [#95] Better script end handling - -## [1.5.2] - 2013-05-05 -### Added -- Improved automatic update system (changes log). -- Handling script traits as separate objects. -- [#86] open/save file dialog now accepts absolute paths in quotes - -### Fixed -- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 -- [#88] Fixed graph building -- [#89] AS3: bracket in property name lead to missing dot -- [#82] printgraph issue - -## [1.5.1 update 1] - 2013-05-04 -### Added -- Exporting texts via commandline -- Exporting all via commandline - -### Fixed -- DefineText2 color parameter -- AS3 GetSlot,SetSlot -- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... -- [#83] Fixed images transparency (zlib fix) -- Fixed graphparts with only jump in it (obfuscators) -- MORPHGRADIENT FIX -- Trasparency in DefineBitsJPEG3 and 4 -- Displaying shapes,morphshapes and sprites with bitmaps - -## [1.5.1] - 2013-05-01 -### Added -- Support for larger switches (10+cases) -- Editing text tags -- [#65] Exporting text tags -- Removing sprites -- Replacing images - -### Fixed -- DefineMorphShape2 fix -- [#79] - AS1/2 class detection fix, wrong printgraph fix -- [#78] - script trait slots fix - -## [1.5.0 update 1] - 2013-04-21 -### Fixed -- Automatic deobfuscation config defaulted to Off for AS1/2. - -## [1.5.0] - 2013-04-20 -### Added -- Direct editing of ActionScript 1/2 code (Beta) -- AS1/2: ifFrameLoaded support -- Automatic deobfuscation can be disabled in the menu -- [#48] - Decompile only specified class (commandline option) -- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices -- [#66] - Decompressing LZMA via commandline -- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) -- [#69] - DoABC vs DoABCDefine tags decompilation -- [#75] - Comma separator in while/do..while conditions, better if..return handling -- AS1/2: parsing NaN,Infinity value (Fix for [#73]) - -### Changed -- New icons (edit/save/cancel and main menu) - -### Fixed -- [#62] - Errors on not defined character tags (import tag) -- [#72] - First ternary operator expression was always true -- Fixed many deobfuscation related bugs - -## [1.4.3 update 2] - 2013-04-10 -### Fixed -- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) -- Try to fix lib/FlashPlayer.exe issue - -## [1.4.3 update 1] - 2013-04-06 -### Fixed -- [#38] - Indentation in const/var initializers, missing semicolon -- [#56] - Test output left in last release -- [#57] - Unknown instructions now do not log an exception (obfuscators do this) -- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. -- AS3 loops fix -- While true fix - -## [1.4.3] - 2013-04-04 -### Added -- AS1/2 Better deobfuscation - -### Fixed -- [#45] - Unicode characters fix -- [#50] - AS1/2 Function body deobfuscation fix -- [#51] - Displaying java class names instead of expressions -- [#52] - AS1/2 Better constantpool detection (deobfuscation) -- [#38] - AS3 indentation in initialized const/var value for newobject -- Fixed ImportAssets2 tag id - -## [1.4.2 update 1] - 2013-03-25 -### Fixed -- [#47] - wrong AS3 deobfuscation -- AS3 deobfuscation issues -- AS3 switch - -## [1.4.2] - 2013-03-24 -### Added -- [#42] - Displaying code as hex -- AS1/2: Renaming identifiers (deobfuscation) -- AS1/2,AS3: Better deobfuscation -- Storing configuration to user home -- Installer for Windows systems - -### Changed -- Graph button changed to icon. - -### Fixed -- [#39] - AS1/2 NewMethod..Pop fix -- [#40] - No logging + For..in..return decompilation -- [#44] - DefineFont2 fix -- [#36] - Multiname with invalid index -- [#43] - Ternary operator and more -- [#46] - Ifs with empty branches got ignored -- [#3] - Ignoring unknown opcodes -- Logging exceptions during export - -## [1.4.1] - 2013-03-10 -### Added -- Exporting sounds -- Better AS1/2 deobfuscation (disassembly & decompilation) - -### Fixed -- Exporting only first 1000 frames of the movie -- Decompiled code was not refreshed on AS1/2 changes -- Application no longer creates empty directories on export - -## [1.4.0 update 1] - 2013-03-04 -### Fixed -- [#37] - AS3: Reversed loop conditions - -## [1.4.0] - 2013-03-03 -### Added -- AS3: ignoring return void at the end of methods -- New icons - Silk icons -- AS3: Traits list sort button -- Better Graph display -- Frames view -- Exporting of movies (No audio) -- Some AS3 related Tests -- Homepage & Donate link in the menu - -### Changed -- Tree view instead of tabs -- AS1/2 and AS3 now share same decompiling method. - -### Fixed -- [#34] - Reversed loop conditions -- [#35] - Fixed unicode strings (Japanese) - -## [1.3.1] - 2013-02-23 -### Changed -- Flash player no longer uses SWT library - -### Fixed -- [#32] - AS2: Action255 bug -- [#31] - Erorrneous tags are now ignored -- DefineBitsLossLess 1&2 on 8bit colormapped images - -## [1.3.0] - 2013-02-17 -### Added -- Decompilation is more resistant to obfuscation -- Shapes SVG export -- AS2: Decompiling classes & interfaces -- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) -- AS3: Deobfuscation menu -- Graph button for displaying code flow Graph - -### Changed -- Complete new decompiling method in both AS1/2 and AS3 -- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". -- To edit source, Edit button must be pressed first (Due to click&go feature) - -### Fixed -- AS3: Method info editor fixed -- Edittext & Button displaying - -## [1.2.0] - 2013-01-19 -### Added -- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). -- Images display and export -- AS2: Exporting selection -- Progressbar during loading - -### Changed -- One merged window for AS1/2 and 3. -- Updated icons - -### Fixed -- AS3: xml attrib, switch in anonymous function (in AS2 too) - -## [1.1.0] - 2013-01-02 -### Added -- Checking for updates -- AS2: Exporting -- AS3: Decompiling whole scripts instead of just classes -- AS3: Exporting selected scripts -- AS3: Script search bar -- AS3: List of DoABCTags now has default "- all -" item -- AS3: Better imports, use namespaces -- AS3: XML related instructions -- AS3: Anonymous functions with names -- AS3: Better initialization of const values -- Logging exceptions to log.txt file - -### Fixed -- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops - -## [1.0.1] - 2012-12-26 -### Added -- AS3: Runtime namespace resolving -- AS3: Arguments variable -- AS3: Better recognizing Pre/Post Increments/Decrements -- AS3: Better declarations - -### Fixed -- AS3: Fixed static variables - -## [1.0.0] - 2012-12-24 -### Added -- Support for LZMA compressed files -- AS3: Detecting local register types for declaration. -- AS3: Displaying inline functions -- AS3: Last save/open dir is remembered -- AS3: Better usage detection for multinames -- AS3: Commandline arguments for exporting -- AS3: Better chained assignments -- AS2: FSCommand2 instruction support -- Proxy: Mimetype application/octet-stream added -- Added executable for Windows users. - -### Changed -- AS3: GUI - Constants tab moved to the top -- AS3: Deobfuscation is now optional, can be accessed via menu - -### Fixed -- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) -- Other minor fixes - -## [beta 1] - 2011-07-30 -### Added -- AS3: Automatic computing method body parameters (EXPERIMENTAL) -- AS3: Editing return type of methods -- AS3: Editing type and default value for variables/constants (Slot/Const traits) -- AS1/2: Few enhancements -- About dialog - -### Changed -- Gui: Updated Icons - -### Fixed -- AS 1/2: Fixed large bug causing Ifs to not decompile properly -- Proxy: Some minor fixes - -## [alpha 10] - 2011-07-13 -### Added -- AS3:Highlighting actual line -- AS3:Completing instruction names via Ctrl+Space -- AS3:Editing method parameters, method body parameters via tab panel -- AS3:ByteCode minor_version 17 supported - decimal datatypes -- AS3:Local variables and method parameters take name from debug information if present -- AS3:Automatic renaming of classes/methods when obfuscated names -- AS3:Better error messages (When cannot decompile obfuscated code) - -### Fixed -- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) -- AS3:Hilighting fixes -- AS3:Fixed decrement/increment statements decompilation -- AS3:Decompiler now adds variable declarations on the beginning of decompiled method -- AS3:Try/catch statements fixed when debug information present -- AS3:Fixed for each statements -- AS3:Other minor fixes - -## [alpha 9] - 2011-07-02 -### Added -- AS3: Added disassembling of some new types of instructions -- AS3: Exporting source as PCode - -### Fixed -- AS3: Many other bugfixes... - -## [alpha 8] - 2010-09-19 -### Added -- AS3: Editing exceptions -- AS3: Finding usage of multinames from constant table - -### Changed -- AS1/2: Better GUI -- AS1/2: Better decompiling of Ifs, For..in - -## [alpha 7] - 2010-09-04 -### Added -- Initial public release - -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev -[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 -[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 -[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 -[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 -[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 -[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 -[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 -[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 -[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 -[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 -[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 -[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 -[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 -[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 -[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 -[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 -[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 -[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 -[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 -[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 -[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 -[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 -[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 -[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 -[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 -[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 -[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 -[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 -[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 -[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 -[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 -[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 -[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 -[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 -[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 -[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 -[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 -[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 -[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 -[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 -[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 -[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 -[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 -[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 -[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 -[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 -[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 -[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 -[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 -[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 -[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 -[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 -[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 -[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 -[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 -[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 -[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 -[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 -[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 -[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 -[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 -[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 -[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 -[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 -[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 -[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 -[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 -[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 -[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 -[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 -[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 -[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 -[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 -[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 -[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 -[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 -[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 -[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 -[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 -[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 -[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 -[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 -[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 -[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 -[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 -[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 -[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 -[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 -[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 -[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 -[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 -[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 -[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 -[#1156]: https://www.free-decompiler.com/flash/issues/1156 -[#1171]: https://www.free-decompiler.com/flash/issues/1171 -[#1170]: https://www.free-decompiler.com/flash/issues/1170 -[#1241]: https://www.free-decompiler.com/flash/issues/1241 -[#1162]: https://www.free-decompiler.com/flash/issues/1162 -[#1199]: https://www.free-decompiler.com/flash/issues/1199 -[#1151]: https://www.free-decompiler.com/flash/issues/1151 -[#1128]: https://www.free-decompiler.com/flash/issues/1128 -[#1163]: https://www.free-decompiler.com/flash/issues/1163 -[#1172]: https://www.free-decompiler.com/flash/issues/1172 -[#1174]: https://www.free-decompiler.com/flash/issues/1174 -[#1183]: https://www.free-decompiler.com/flash/issues/1183 -[#1193]: https://www.free-decompiler.com/flash/issues/1193 -[#1200]: https://www.free-decompiler.com/flash/issues/1200 -[#1198]: https://www.free-decompiler.com/flash/issues/1198 -[#1205]: https://www.free-decompiler.com/flash/issues/1205 -[#1194]: https://www.free-decompiler.com/flash/issues/1194 -[#1210]: https://www.free-decompiler.com/flash/issues/1210 -[#1217]: https://www.free-decompiler.com/flash/issues/1217 -[#1244]: https://www.free-decompiler.com/flash/issues/1244 -[#1247]: https://www.free-decompiler.com/flash/issues/1247 -[#1236]: https://www.free-decompiler.com/flash/issues/1236 -[#1251]: https://www.free-decompiler.com/flash/issues/1251 -[#1265]: https://www.free-decompiler.com/flash/issues/1265 -[#1268]: https://www.free-decompiler.com/flash/issues/1268 -[#1161]: https://www.free-decompiler.com/flash/issues/1161 -[#1118]: https://www.free-decompiler.com/flash/issues/1118 -[#409]: https://www.free-decompiler.com/flash/issues/409 -[#1132]: https://www.free-decompiler.com/flash/issues/1132 -[#1134]: https://www.free-decompiler.com/flash/issues/1134 -[#1121]: https://www.free-decompiler.com/flash/issues/1121 -[#1052]: https://www.free-decompiler.com/flash/issues/1052 -[#1145]: https://www.free-decompiler.com/flash/issues/1145 -[#758]: https://www.free-decompiler.com/flash/issues/758 -[#1096]: https://www.free-decompiler.com/flash/issues/1096 -[#1104]: https://www.free-decompiler.com/flash/issues/1104 -[#1107]: https://www.free-decompiler.com/flash/issues/1107 -[#1106]: https://www.free-decompiler.com/flash/issues/1106 -[#1113]: https://www.free-decompiler.com/flash/issues/1113 -[#1075]: https://www.free-decompiler.com/flash/issues/1075 -[#1127]: https://www.free-decompiler.com/flash/issues/1127 -[#1103]: https://www.free-decompiler.com/flash/issues/1103 -[#1133]: https://www.free-decompiler.com/flash/issues/1133 -[#1135]: https://www.free-decompiler.com/flash/issues/1135 -[#1138]: https://www.free-decompiler.com/flash/issues/1138 -[#1139]: https://www.free-decompiler.com/flash/issues/1139 -[#930]: https://www.free-decompiler.com/flash/issues/930 -[#1137]: https://www.free-decompiler.com/flash/issues/1137 -[#1144]: https://www.free-decompiler.com/flash/issues/1144 -[#1147]: https://www.free-decompiler.com/flash/issues/1147 -[#1148]: https://www.free-decompiler.com/flash/issues/1148 -[#1152]: https://www.free-decompiler.com/flash/issues/1152 -[#1154]: https://www.free-decompiler.com/flash/issues/1154 -[#116]: https://www.free-decompiler.com/flash/issues/116 -[#1070]: https://www.free-decompiler.com/flash/issues/1070 -[#1098]: https://www.free-decompiler.com/flash/issues/1098 -[#1033]: https://www.free-decompiler.com/flash/issues/1033 -[#1083]: https://www.free-decompiler.com/flash/issues/1083 -[#1091]: https://www.free-decompiler.com/flash/issues/1091 -[#1076]: https://www.free-decompiler.com/flash/issues/1076 -[#1068]: https://www.free-decompiler.com/flash/issues/1068 -[#1063]: https://www.free-decompiler.com/flash/issues/1063 -[#1019]: https://www.free-decompiler.com/flash/issues/1019 -[#1016]: https://www.free-decompiler.com/flash/issues/1016 -[#1010]: https://www.free-decompiler.com/flash/issues/1010 -[#1008]: https://www.free-decompiler.com/flash/issues/1008 -[#1004]: https://www.free-decompiler.com/flash/issues/1004 -[#933]: https://www.free-decompiler.com/flash/issues/933 -[#1062]: https://www.free-decompiler.com/flash/issues/1062 -[#418]: https://www.free-decompiler.com/flash/issues/418 -[#1047]: https://www.free-decompiler.com/flash/issues/1047 -[#812]: https://www.free-decompiler.com/flash/issues/812 -[#1056]: https://www.free-decompiler.com/flash/issues/1056 -[#1057]: https://www.free-decompiler.com/flash/issues/1057 -[#991]: https://www.free-decompiler.com/flash/issues/991 -[#689]: https://www.free-decompiler.com/flash/issues/689 -[#1060]: https://www.free-decompiler.com/flash/issues/1060 -[#1037]: https://www.free-decompiler.com/flash/issues/1037 -[#489]: https://www.free-decompiler.com/flash/issues/489 -[#1007]: https://www.free-decompiler.com/flash/issues/1007 -[#1044]: https://www.free-decompiler.com/flash/issues/1044 -[#947]: https://www.free-decompiler.com/flash/issues/947 -[#953]: https://www.free-decompiler.com/flash/issues/953 -[#954]: https://www.free-decompiler.com/flash/issues/954 -[#950]: https://www.free-decompiler.com/flash/issues/950 -[#945]: https://www.free-decompiler.com/flash/issues/945 -[#957]: https://www.free-decompiler.com/flash/issues/957 -[#956]: https://www.free-decompiler.com/flash/issues/956 -[#968]: https://www.free-decompiler.com/flash/issues/968 -[#978]: https://www.free-decompiler.com/flash/issues/978 -[#955]: https://www.free-decompiler.com/flash/issues/955 -[#966]: https://www.free-decompiler.com/flash/issues/966 -[#999]: https://www.free-decompiler.com/flash/issues/999 -[#1000]: https://www.free-decompiler.com/flash/issues/1000 -[#1017]: https://www.free-decompiler.com/flash/issues/1017 -[#1030]: https://www.free-decompiler.com/flash/issues/1030 -[#949]: https://www.free-decompiler.com/flash/issues/949 -[#944]: https://www.free-decompiler.com/flash/issues/944 -[#939]: https://www.free-decompiler.com/flash/issues/939 -[#942]: https://www.free-decompiler.com/flash/issues/942 -[#952]: https://www.free-decompiler.com/flash/issues/952 -[#858]: https://www.free-decompiler.com/flash/issues/858 -[#905]: https://www.free-decompiler.com/flash/issues/905 -[#920]: https://www.free-decompiler.com/flash/issues/920 -[#921]: https://www.free-decompiler.com/flash/issues/921 -[#924]: https://www.free-decompiler.com/flash/issues/924 -[#895]: https://www.free-decompiler.com/flash/issues/895 -[#884]: https://www.free-decompiler.com/flash/issues/884 -[#899]: https://www.free-decompiler.com/flash/issues/899 -[#903]: https://www.free-decompiler.com/flash/issues/903 -[#855]: https://www.free-decompiler.com/flash/issues/855 -[#850]: https://www.free-decompiler.com/flash/issues/850 -[#832]: https://www.free-decompiler.com/flash/issues/832 -[#904]: https://www.free-decompiler.com/flash/issues/904 -[#910]: https://www.free-decompiler.com/flash/issues/910 -[#922]: https://www.free-decompiler.com/flash/issues/922 -[#916]: https://www.free-decompiler.com/flash/issues/916 -[#938]: https://www.free-decompiler.com/flash/issues/938 -[#897]: https://www.free-decompiler.com/flash/issues/897 -[#470]: https://www.free-decompiler.com/flash/issues/470 -[#877]: https://www.free-decompiler.com/flash/issues/877 -[#878]: https://www.free-decompiler.com/flash/issues/878 -[#845]: https://www.free-decompiler.com/flash/issues/845 -[#883]: https://www.free-decompiler.com/flash/issues/883 -[#882]: https://www.free-decompiler.com/flash/issues/882 -[#760]: https://www.free-decompiler.com/flash/issues/760 -[#887]: https://www.free-decompiler.com/flash/issues/887 -[#842]: https://www.free-decompiler.com/flash/issues/842 -[#841]: https://www.free-decompiler.com/flash/issues/841 -[#772]: https://www.free-decompiler.com/flash/issues/772 -[#762]: https://www.free-decompiler.com/flash/issues/762 -[#862]: https://www.free-decompiler.com/flash/issues/862 -[#865]: https://www.free-decompiler.com/flash/issues/865 -[#613]: https://www.free-decompiler.com/flash/issues/613 -[#868]: https://www.free-decompiler.com/flash/issues/868 -[#713]: https://www.free-decompiler.com/flash/issues/713 -[#807]: https://www.free-decompiler.com/flash/issues/807 -[#728]: https://www.free-decompiler.com/flash/issues/728 -[#857]: https://www.free-decompiler.com/flash/issues/857 -[#860]: https://www.free-decompiler.com/flash/issues/860 -[#824]: https://www.free-decompiler.com/flash/issues/824 -[#809]: https://www.free-decompiler.com/flash/issues/809 -[#805]: https://www.free-decompiler.com/flash/issues/805 -[#825]: https://www.free-decompiler.com/flash/issues/825 -[#737]: https://www.free-decompiler.com/flash/issues/737 -[#350]: https://www.free-decompiler.com/flash/issues/350 -[#814]: https://www.free-decompiler.com/flash/issues/814 -[#816]: https://www.free-decompiler.com/flash/issues/816 -[#835]: https://www.free-decompiler.com/flash/issues/835 -[#836]: https://www.free-decompiler.com/flash/issues/836 -[#848]: https://www.free-decompiler.com/flash/issues/848 -[#817]: https://www.free-decompiler.com/flash/issues/817 -[#849]: https://www.free-decompiler.com/flash/issues/849 -[#852]: https://www.free-decompiler.com/flash/issues/852 -[#837]: https://www.free-decompiler.com/flash/issues/837 -[#811]: https://www.free-decompiler.com/flash/issues/811 -[#745]: https://www.free-decompiler.com/flash/issues/745 -[#803]: https://www.free-decompiler.com/flash/issues/803 -[#738]: https://www.free-decompiler.com/flash/issues/738 -[#742]: https://www.free-decompiler.com/flash/issues/742 -[#747]: https://www.free-decompiler.com/flash/issues/747 -[#749]: https://www.free-decompiler.com/flash/issues/749 -[#752]: https://www.free-decompiler.com/flash/issues/752 -[#753]: https://www.free-decompiler.com/flash/issues/753 -[#759]: https://www.free-decompiler.com/flash/issues/759 -[#766]: https://www.free-decompiler.com/flash/issues/766 -[#768]: https://www.free-decompiler.com/flash/issues/768 -[#773]: https://www.free-decompiler.com/flash/issues/773 -[#776]: https://www.free-decompiler.com/flash/issues/776 -[#783]: https://www.free-decompiler.com/flash/issues/783 -[#785]: https://www.free-decompiler.com/flash/issues/785 -[#787]: https://www.free-decompiler.com/flash/issues/787 -[#788]: https://www.free-decompiler.com/flash/issues/788 -[#790]: https://www.free-decompiler.com/flash/issues/790 -[#794]: https://www.free-decompiler.com/flash/issues/794 -[#798]: https://www.free-decompiler.com/flash/issues/798 -[#800]: https://www.free-decompiler.com/flash/issues/800 -[#676]: https://www.free-decompiler.com/flash/issues/676 -[#734]: https://www.free-decompiler.com/flash/issues/734 -[#687]: https://www.free-decompiler.com/flash/issues/687 -[#709]: https://www.free-decompiler.com/flash/issues/709 -[#732]: https://www.free-decompiler.com/flash/issues/732 -[#730]: https://www.free-decompiler.com/flash/issues/730 -[#735]: https://www.free-decompiler.com/flash/issues/735 -[#722]: https://www.free-decompiler.com/flash/issues/722 -[#725]: https://www.free-decompiler.com/flash/issues/725 -[#715]: https://www.free-decompiler.com/flash/issues/715 -[#635]: https://www.free-decompiler.com/flash/issues/635 -[#726]: https://www.free-decompiler.com/flash/issues/726 -[#716]: https://www.free-decompiler.com/flash/issues/716 -[#717]: https://www.free-decompiler.com/flash/issues/717 -[#718]: https://www.free-decompiler.com/flash/issues/718 -[#720]: https://www.free-decompiler.com/flash/issues/720 -[#719]: https://www.free-decompiler.com/flash/issues/719 -[#723]: https://www.free-decompiler.com/flash/issues/723 -[#288]: https://www.free-decompiler.com/flash/issues/288 -[#677]: https://www.free-decompiler.com/flash/issues/677 -[#389]: https://www.free-decompiler.com/flash/issues/389 -[#701]: https://www.free-decompiler.com/flash/issues/701 -[#707]: https://www.free-decompiler.com/flash/issues/707 -[#302]: https://www.free-decompiler.com/flash/issues/302 -[#685]: https://www.free-decompiler.com/flash/issues/685 -[#698]: https://www.free-decompiler.com/flash/issues/698 -[#710]: https://www.free-decompiler.com/flash/issues/710 -[#711]: https://www.free-decompiler.com/flash/issues/711 -[#681]: https://www.free-decompiler.com/flash/issues/681 -[#688]: https://www.free-decompiler.com/flash/issues/688 -[#691]: https://www.free-decompiler.com/flash/issues/691 -[#524]: https://www.free-decompiler.com/flash/issues/524 -[#663]: https://www.free-decompiler.com/flash/issues/663 -[#702]: https://www.free-decompiler.com/flash/issues/702 -[#539]: https://www.free-decompiler.com/flash/issues/539 -[#650]: https://www.free-decompiler.com/flash/issues/650 -[#680]: https://www.free-decompiler.com/flash/issues/680 -[#649]: https://www.free-decompiler.com/flash/issues/649 -[#656]: https://www.free-decompiler.com/flash/issues/656 -[#661]: https://www.free-decompiler.com/flash/issues/661 -[#664]: https://www.free-decompiler.com/flash/issues/664 -[#668]: https://www.free-decompiler.com/flash/issues/668 -[#674]: https://www.free-decompiler.com/flash/issues/674 -[#675]: https://www.free-decompiler.com/flash/issues/675 -[#632]: https://www.free-decompiler.com/flash/issues/632 -[#651]: https://www.free-decompiler.com/flash/issues/651 -[#678]: https://www.free-decompiler.com/flash/issues/678 -[#672]: https://www.free-decompiler.com/flash/issues/672 -[#684]: https://www.free-decompiler.com/flash/issues/684 -[#647]: https://www.free-decompiler.com/flash/issues/647 -[#648]: https://www.free-decompiler.com/flash/issues/648 -[#612]: https://www.free-decompiler.com/flash/issues/612 -[#623]: https://www.free-decompiler.com/flash/issues/623 -[#624]: https://www.free-decompiler.com/flash/issues/624 -[#627]: https://www.free-decompiler.com/flash/issues/627 -[#640]: https://www.free-decompiler.com/flash/issues/640 -[#595]: https://www.free-decompiler.com/flash/issues/595 -[#592]: https://www.free-decompiler.com/flash/issues/592 -[#585]: https://www.free-decompiler.com/flash/issues/585 -[#578]: https://www.free-decompiler.com/flash/issues/578 -[#501]: https://www.free-decompiler.com/flash/issues/501 -[#616]: https://www.free-decompiler.com/flash/issues/616 -[#559]: https://www.free-decompiler.com/flash/issues/559 -[#401]: https://www.free-decompiler.com/flash/issues/401 -[#593]: https://www.free-decompiler.com/flash/issues/593 -[#594]: https://www.free-decompiler.com/flash/issues/594 -[#579]: https://www.free-decompiler.com/flash/issues/579 -[#428]: https://www.free-decompiler.com/flash/issues/428 -[#337]: https://www.free-decompiler.com/flash/issues/337 -[#584]: https://www.free-decompiler.com/flash/issues/584 -[#576]: https://www.free-decompiler.com/flash/issues/576 -[#250]: https://www.free-decompiler.com/flash/issues/250 -[#580]: https://www.free-decompiler.com/flash/issues/580 -[#510]: https://www.free-decompiler.com/flash/issues/510 -[#583]: https://www.free-decompiler.com/flash/issues/583 -[#586]: https://www.free-decompiler.com/flash/issues/586 -[#574]: https://www.free-decompiler.com/flash/issues/574 -[#570]: https://www.free-decompiler.com/flash/issues/570 -[#563]: https://www.free-decompiler.com/flash/issues/563 -[#561]: https://www.free-decompiler.com/flash/issues/561 -[#509]: https://www.free-decompiler.com/flash/issues/509 -[#433]: https://www.free-decompiler.com/flash/issues/433 -[#557]: https://www.free-decompiler.com/flash/issues/557 -[#556]: https://www.free-decompiler.com/flash/issues/556 -[#504]: https://www.free-decompiler.com/flash/issues/504 -[#529]: https://www.free-decompiler.com/flash/issues/529 -[#538]: https://www.free-decompiler.com/flash/issues/538 -[#537]: https://www.free-decompiler.com/flash/issues/537 -[#540]: https://www.free-decompiler.com/flash/issues/540 -[#387]: https://www.free-decompiler.com/flash/issues/387 -[#552]: https://www.free-decompiler.com/flash/issues/552 -[#494]: https://www.free-decompiler.com/flash/issues/494 -[#513]: https://www.free-decompiler.com/flash/issues/513 -[#262]: https://www.free-decompiler.com/flash/issues/262 -[#499]: https://www.free-decompiler.com/flash/issues/499 -[#508]: https://www.free-decompiler.com/flash/issues/508 -[#305]: https://www.free-decompiler.com/flash/issues/305 -[#312]: https://www.free-decompiler.com/flash/issues/312 -[#503]: https://www.free-decompiler.com/flash/issues/503 -[#304]: https://www.free-decompiler.com/flash/issues/304 -[#306]: https://www.free-decompiler.com/flash/issues/306 -[#507]: https://www.free-decompiler.com/flash/issues/507 -[#424]: https://www.free-decompiler.com/flash/issues/424 -[#425]: https://www.free-decompiler.com/flash/issues/425 -[#478]: https://www.free-decompiler.com/flash/issues/478 -[#485]: https://www.free-decompiler.com/flash/issues/485 -[#517]: https://www.free-decompiler.com/flash/issues/517 -[#518]: https://www.free-decompiler.com/flash/issues/518 -[#361]: https://www.free-decompiler.com/flash/issues/361 -[#392]: https://www.free-decompiler.com/flash/issues/392 -[#516]: https://www.free-decompiler.com/flash/issues/516 -[#495]: https://www.free-decompiler.com/flash/issues/495 -[#496]: https://www.free-decompiler.com/flash/issues/496 -[#299]: https://www.free-decompiler.com/flash/issues/299 -[#303]: https://www.free-decompiler.com/flash/issues/303 -[#324]: https://www.free-decompiler.com/flash/issues/324 -[#346]: https://www.free-decompiler.com/flash/issues/346 -[#371]: https://www.free-decompiler.com/flash/issues/371 -[#426]: https://www.free-decompiler.com/flash/issues/426 -[#457]: https://www.free-decompiler.com/flash/issues/457 -[#458]: https://www.free-decompiler.com/flash/issues/458 -[#460]: https://www.free-decompiler.com/flash/issues/460 -[#462]: https://www.free-decompiler.com/flash/issues/462 -[#463]: https://www.free-decompiler.com/flash/issues/463 -[#465]: https://www.free-decompiler.com/flash/issues/465 -[#466]: https://www.free-decompiler.com/flash/issues/466 -[#369]: https://www.free-decompiler.com/flash/issues/369 -[#390]: https://www.free-decompiler.com/flash/issues/390 -[#453]: https://www.free-decompiler.com/flash/issues/453 -[#459]: https://www.free-decompiler.com/flash/issues/459 -[#461]: https://www.free-decompiler.com/flash/issues/461 -[#451]: https://www.free-decompiler.com/flash/issues/451 -[#454]: https://www.free-decompiler.com/flash/issues/454 -[#455]: https://www.free-decompiler.com/flash/issues/455 -[#474]: https://www.free-decompiler.com/flash/issues/474 -[#477]: https://www.free-decompiler.com/flash/issues/477 -[#481]: https://www.free-decompiler.com/flash/issues/481 -[#484]: https://www.free-decompiler.com/flash/issues/484 -[#493]: https://www.free-decompiler.com/flash/issues/493 -[#365]: https://www.free-decompiler.com/flash/issues/365 -[#366]: https://www.free-decompiler.com/flash/issues/366 -[#429]: https://www.free-decompiler.com/flash/issues/429 -[#447]: https://www.free-decompiler.com/flash/issues/447 -[#354]: https://www.free-decompiler.com/flash/issues/354 -[#438]: https://www.free-decompiler.com/flash/issues/438 -[#436]: https://www.free-decompiler.com/flash/issues/436 -[#446]: https://www.free-decompiler.com/flash/issues/446 -[#427]: https://www.free-decompiler.com/flash/issues/427 -[#405]: https://www.free-decompiler.com/flash/issues/405 -[#420]: https://www.free-decompiler.com/flash/issues/420 -[#421]: https://www.free-decompiler.com/flash/issues/421 -[#430]: https://www.free-decompiler.com/flash/issues/430 -[#397]: https://www.free-decompiler.com/flash/issues/397 -[#431]: https://www.free-decompiler.com/flash/issues/431 -[#169]: https://www.free-decompiler.com/flash/issues/169 -[#335]: https://www.free-decompiler.com/flash/issues/335 -[#404]: https://www.free-decompiler.com/flash/issues/404 -[#407]: https://www.free-decompiler.com/flash/issues/407 -[#399]: https://www.free-decompiler.com/flash/issues/399 -[#400]: https://www.free-decompiler.com/flash/issues/400 -[#398]: https://www.free-decompiler.com/flash/issues/398 -[#382]: https://www.free-decompiler.com/flash/issues/382 -[#396]: https://www.free-decompiler.com/flash/issues/396 -[#357]: https://www.free-decompiler.com/flash/issues/357 -[#391]: https://www.free-decompiler.com/flash/issues/391 -[#395]: https://www.free-decompiler.com/flash/issues/395 -[#334]: https://www.free-decompiler.com/flash/issues/334 -[#301]: https://www.free-decompiler.com/flash/issues/301 -[#383]: https://www.free-decompiler.com/flash/issues/383 -[#386]: https://www.free-decompiler.com/flash/issues/386 -[#367]: https://www.free-decompiler.com/flash/issues/367 -[#380]: https://www.free-decompiler.com/flash/issues/380 -[#292]: https://www.free-decompiler.com/flash/issues/292 -[#375]: https://www.free-decompiler.com/flash/issues/375 -[#378]: https://www.free-decompiler.com/flash/issues/378 -[#325]: https://www.free-decompiler.com/flash/issues/325 -[#210]: https://www.free-decompiler.com/flash/issues/210 -[#355]: https://www.free-decompiler.com/flash/issues/355 -[#313]: https://www.free-decompiler.com/flash/issues/313 -[#330]: https://www.free-decompiler.com/flash/issues/330 -[#332]: https://www.free-decompiler.com/flash/issues/332 -[#344]: https://www.free-decompiler.com/flash/issues/344 -[#295]: https://www.free-decompiler.com/flash/issues/295 -[#297]: https://www.free-decompiler.com/flash/issues/297 -[#307]: https://www.free-decompiler.com/flash/issues/307 -[#309]: https://www.free-decompiler.com/flash/issues/309 -[#310]: https://www.free-decompiler.com/flash/issues/310 -[#311]: https://www.free-decompiler.com/flash/issues/311 -[#327]: https://www.free-decompiler.com/flash/issues/327 -[#328]: https://www.free-decompiler.com/flash/issues/328 -[#333]: https://www.free-decompiler.com/flash/issues/333 -[#336]: https://www.free-decompiler.com/flash/issues/336 -[#338]: https://www.free-decompiler.com/flash/issues/338 -[#315]: https://www.free-decompiler.com/flash/issues/315 -[#123]: https://www.free-decompiler.com/flash/issues/123 -[#243]: https://www.free-decompiler.com/flash/issues/243 -[#326]: https://www.free-decompiler.com/flash/issues/326 -[#287]: https://www.free-decompiler.com/flash/issues/287 -[#290]: https://www.free-decompiler.com/flash/issues/290 -[#291]: https://www.free-decompiler.com/flash/issues/291 -[#294]: https://www.free-decompiler.com/flash/issues/294 -[#298]: https://www.free-decompiler.com/flash/issues/298 -[#296]: https://www.free-decompiler.com/flash/issues/296 -[#314]: https://www.free-decompiler.com/flash/issues/314 -[#316]: https://www.free-decompiler.com/flash/issues/316 -[#318]: https://www.free-decompiler.com/flash/issues/318 -[#319]: https://www.free-decompiler.com/flash/issues/319 -[#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 -[#261]: https://www.free-decompiler.com/flash/issues/261 -[#269]: https://www.free-decompiler.com/flash/issues/269 -[#274]: https://www.free-decompiler.com/flash/issues/274 -[#275]: https://www.free-decompiler.com/flash/issues/275 -[#258]: https://www.free-decompiler.com/flash/issues/258 -[#267]: https://www.free-decompiler.com/flash/issues/267 -[#286]: https://www.free-decompiler.com/flash/issues/286 -[#233]: https://www.free-decompiler.com/flash/issues/233 -[#235]: https://www.free-decompiler.com/flash/issues/235 -[#263]: https://www.free-decompiler.com/flash/issues/263 -[#264]: https://www.free-decompiler.com/flash/issues/264 -[#265]: https://www.free-decompiler.com/flash/issues/265 -[#266]: https://www.free-decompiler.com/flash/issues/266 -[#281]: https://www.free-decompiler.com/flash/issues/281 -[#251]: https://www.free-decompiler.com/flash/issues/251 -[#257]: https://www.free-decompiler.com/flash/issues/257 -[#259]: https://www.free-decompiler.com/flash/issues/259 -[#260]: https://www.free-decompiler.com/flash/issues/260 -[#268]: https://www.free-decompiler.com/flash/issues/268 -[#272]: https://www.free-decompiler.com/flash/issues/272 -[#276]: https://www.free-decompiler.com/flash/issues/276 -[#220]: https://www.free-decompiler.com/flash/issues/220 -[#284]: https://www.free-decompiler.com/flash/issues/284 -[#232]: https://www.free-decompiler.com/flash/issues/232 -[#253]: https://www.free-decompiler.com/flash/issues/253 -[#137]: https://www.free-decompiler.com/flash/issues/137 -[#242]: https://www.free-decompiler.com/flash/issues/242 -[#244]: https://www.free-decompiler.com/flash/issues/244 -[#203]: https://www.free-decompiler.com/flash/issues/203 -[#225]: https://www.free-decompiler.com/flash/issues/225 -[#236]: https://www.free-decompiler.com/flash/issues/236 -[#245]: https://www.free-decompiler.com/flash/issues/245 -[#247]: https://www.free-decompiler.com/flash/issues/247 -[#248]: https://www.free-decompiler.com/flash/issues/248 -[#254]: https://www.free-decompiler.com/flash/issues/254 -[#255]: https://www.free-decompiler.com/flash/issues/255 -[#256]: https://www.free-decompiler.com/flash/issues/256 -[#241]: https://www.free-decompiler.com/flash/issues/241 -[#238]: https://www.free-decompiler.com/flash/issues/238 -[#239]: https://www.free-decompiler.com/flash/issues/239 -[#240]: https://www.free-decompiler.com/flash/issues/240 -[#237]: https://www.free-decompiler.com/flash/issues/237 -[#217]: https://www.free-decompiler.com/flash/issues/217 -[#219]: https://www.free-decompiler.com/flash/issues/219 -[#224]: https://www.free-decompiler.com/flash/issues/224 -[#121]: https://www.free-decompiler.com/flash/issues/121 -[#207]: https://www.free-decompiler.com/flash/issues/207 -[#151]: https://www.free-decompiler.com/flash/issues/151 -[#171]: https://www.free-decompiler.com/flash/issues/171 -[#206]: https://www.free-decompiler.com/flash/issues/206 -[#208]: https://www.free-decompiler.com/flash/issues/208 -[#209]: https://www.free-decompiler.com/flash/issues/209 -[#229]: https://www.free-decompiler.com/flash/issues/229 -[#213]: https://www.free-decompiler.com/flash/issues/213 -[#221]: https://www.free-decompiler.com/flash/issues/221 -[#226]: https://www.free-decompiler.com/flash/issues/226 -[#227]: https://www.free-decompiler.com/flash/issues/227 -[#230]: https://www.free-decompiler.com/flash/issues/230 -[#172]: https://www.free-decompiler.com/flash/issues/172 -[#174]: https://www.free-decompiler.com/flash/issues/174 -[#175]: https://www.free-decompiler.com/flash/issues/175 -[#212]: https://www.free-decompiler.com/flash/issues/212 -[#185]: https://www.free-decompiler.com/flash/issues/185 -[#186]: https://www.free-decompiler.com/flash/issues/186 -[#197]: https://www.free-decompiler.com/flash/issues/197 -[#216]: https://www.free-decompiler.com/flash/issues/216 -[#168]: https://www.free-decompiler.com/flash/issues/168 -[#176]: https://www.free-decompiler.com/flash/issues/176 -[#177]: https://www.free-decompiler.com/flash/issues/177 -[#202]: https://www.free-decompiler.com/flash/issues/202 -[#173]: https://www.free-decompiler.com/flash/issues/173 -[#190]: https://www.free-decompiler.com/flash/issues/190 -[#129]: https://www.free-decompiler.com/flash/issues/129 -[#153]: https://www.free-decompiler.com/flash/issues/153 -[#180]: https://www.free-decompiler.com/flash/issues/180 -[#136]: https://www.free-decompiler.com/flash/issues/136 -[#179]: https://www.free-decompiler.com/flash/issues/179 -[#144]: https://www.free-decompiler.com/flash/issues/144 -[#164]: https://www.free-decompiler.com/flash/issues/164 -[#167]: https://www.free-decompiler.com/flash/issues/167 -[#170]: https://www.free-decompiler.com/flash/issues/170 -[#178]: https://www.free-decompiler.com/flash/issues/178 -[#181]: https://www.free-decompiler.com/flash/issues/181 -[#182]: https://www.free-decompiler.com/flash/issues/182 -[#183]: https://www.free-decompiler.com/flash/issues/183 -[#184]: https://www.free-decompiler.com/flash/issues/184 -[#189]: https://www.free-decompiler.com/flash/issues/189 -[#191]: https://www.free-decompiler.com/flash/issues/191 -[#195]: https://www.free-decompiler.com/flash/issues/195 -[#196]: https://www.free-decompiler.com/flash/issues/196 -[#198]: https://www.free-decompiler.com/flash/issues/198 -[#200]: https://www.free-decompiler.com/flash/issues/200 -[#201]: https://www.free-decompiler.com/flash/issues/201 -[#166]: https://www.free-decompiler.com/flash/issues/166 -[#165]: https://www.free-decompiler.com/flash/issues/165 -[#63]: https://www.free-decompiler.com/flash/issues/63 -[#67]: https://www.free-decompiler.com/flash/issues/67 -[#117]: https://www.free-decompiler.com/flash/issues/117 -[#127]: https://www.free-decompiler.com/flash/issues/127 -[#134]: https://www.free-decompiler.com/flash/issues/134 -[#155]: https://www.free-decompiler.com/flash/issues/155 -[#142]: https://www.free-decompiler.com/flash/issues/142 -[#146]: https://www.free-decompiler.com/flash/issues/146 -[#130]: https://www.free-decompiler.com/flash/issues/130 -[#132]: https://www.free-decompiler.com/flash/issues/132 -[#145]: https://www.free-decompiler.com/flash/issues/145 -[#147]: https://www.free-decompiler.com/flash/issues/147 -[#148]: https://www.free-decompiler.com/flash/issues/148 -[#152]: https://www.free-decompiler.com/flash/issues/152 -[#156]: https://www.free-decompiler.com/flash/issues/156 -[#157]: https://www.free-decompiler.com/flash/issues/157 -[#158]: https://www.free-decompiler.com/flash/issues/158 -[#159]: https://www.free-decompiler.com/flash/issues/159 -[#160]: https://www.free-decompiler.com/flash/issues/160 -[#162]: https://www.free-decompiler.com/flash/issues/162 -[#163]: https://www.free-decompiler.com/flash/issues/163 -[#149]: https://www.free-decompiler.com/flash/issues/149 -[#150]: https://www.free-decompiler.com/flash/issues/150 -[#119]: https://www.free-decompiler.com/flash/issues/119 -[#101]: https://www.free-decompiler.com/flash/issues/101 -[#114]: https://www.free-decompiler.com/flash/issues/114 -[#135]: https://www.free-decompiler.com/flash/issues/135 -[#141]: https://www.free-decompiler.com/flash/issues/141 -[#102]: https://www.free-decompiler.com/flash/issues/102 -[#124]: https://www.free-decompiler.com/flash/issues/124 -[#128]: https://www.free-decompiler.com/flash/issues/128 -[#131]: https://www.free-decompiler.com/flash/issues/131 -[#104]: https://www.free-decompiler.com/flash/issues/104 -[#113]: https://www.free-decompiler.com/flash/issues/113 -[#133]: https://www.free-decompiler.com/flash/issues/133 -[#140]: https://www.free-decompiler.com/flash/issues/140 -[#108]: https://www.free-decompiler.com/flash/issues/108 -[#105]: https://www.free-decompiler.com/flash/issues/105 -[#109]: https://www.free-decompiler.com/flash/issues/109 -[#106]: https://www.free-decompiler.com/flash/issues/106 -[#107]: https://www.free-decompiler.com/flash/issues/107 -[#110]: https://www.free-decompiler.com/flash/issues/110 -[#103]: https://www.free-decompiler.com/flash/issues/103 -[#111]: https://www.free-decompiler.com/flash/issues/111 -[#96]: https://www.free-decompiler.com/flash/issues/96 -[#98]: https://www.free-decompiler.com/flash/issues/98 -[#99]: https://www.free-decompiler.com/flash/issues/99 -[#100]: https://www.free-decompiler.com/flash/issues/100 -[#85]: https://www.free-decompiler.com/flash/issues/85 -[#79]: https://www.free-decompiler.com/flash/issues/79 -[#92]: https://www.free-decompiler.com/flash/issues/92 -[#93]: https://www.free-decompiler.com/flash/issues/93 -[#94]: https://www.free-decompiler.com/flash/issues/94 -[#95]: https://www.free-decompiler.com/flash/issues/95 -[#86]: https://www.free-decompiler.com/flash/issues/86 -[#87]: https://www.free-decompiler.com/flash/issues/87 -[#88]: https://www.free-decompiler.com/flash/issues/88 -[#89]: https://www.free-decompiler.com/flash/issues/89 -[#82]: https://www.free-decompiler.com/flash/issues/82 -[#78]: https://www.free-decompiler.com/flash/issues/78 -[#81]: https://www.free-decompiler.com/flash/issues/81 -[#84]: https://www.free-decompiler.com/flash/issues/84 -[#83]: https://www.free-decompiler.com/flash/issues/83 -[#65]: https://www.free-decompiler.com/flash/issues/65 -[#48]: https://www.free-decompiler.com/flash/issues/48 -[#53]: https://www.free-decompiler.com/flash/issues/53 -[#66]: https://www.free-decompiler.com/flash/issues/66 -[#68]: https://www.free-decompiler.com/flash/issues/68 -[#69]: https://www.free-decompiler.com/flash/issues/69 -[#75]: https://www.free-decompiler.com/flash/issues/75 -[#73]: https://www.free-decompiler.com/flash/issues/73 -[#62]: https://www.free-decompiler.com/flash/issues/62 -[#72]: https://www.free-decompiler.com/flash/issues/72 -[#64]: https://www.free-decompiler.com/flash/issues/64 -[#38]: https://www.free-decompiler.com/flash/issues/38 -[#56]: https://www.free-decompiler.com/flash/issues/56 -[#57]: https://www.free-decompiler.com/flash/issues/57 -[#58]: https://www.free-decompiler.com/flash/issues/58 -[#45]: https://www.free-decompiler.com/flash/issues/45 -[#50]: https://www.free-decompiler.com/flash/issues/50 -[#51]: https://www.free-decompiler.com/flash/issues/51 -[#52]: https://www.free-decompiler.com/flash/issues/52 -[#47]: https://www.free-decompiler.com/flash/issues/47 -[#42]: https://www.free-decompiler.com/flash/issues/42 -[#39]: https://www.free-decompiler.com/flash/issues/39 -[#40]: https://www.free-decompiler.com/flash/issues/40 -[#44]: https://www.free-decompiler.com/flash/issues/44 -[#36]: https://www.free-decompiler.com/flash/issues/36 -[#43]: https://www.free-decompiler.com/flash/issues/43 -[#46]: https://www.free-decompiler.com/flash/issues/46 -[#3]: https://www.free-decompiler.com/flash/issues/3 -[#37]: https://www.free-decompiler.com/flash/issues/37 -[#34]: https://www.free-decompiler.com/flash/issues/34 -[#35]: https://www.free-decompiler.com/flash/issues/35 -[#32]: https://www.free-decompiler.com/flash/issues/32 +# Change Log +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added +- [#1240] AS search using multiple threads when parallel speedup is enabled +- [#1308] Search by all P-code files in AS3 +- [#1333] Exporting sprites as swf files +- [#1365] Allow to configure all types of configuration settings from command line +- [#1369] Allow zoom in sprite (and button) export + +### Fixed +- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter +- [#1343] AS 1/2 direct editation critical bug +- [#1348] Cannot properly export frame with cyrillic symbols to SVG +- [#1354] Various FLA export problem fixes +- [#1367] Raw edit conditional type fix. +- [#1401] SVG export: duplicate pattern IDs fixed +- [#1402] SVG export: certain font characters not exported properly fixed + +## [10.0.0] - 2016-12-24 +### Added +- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only +- optional AS3 direct editation with Flex SDK +- AS3 p-code editing - metadata read/write support +- AS3 p-code editing - end of the block command like in RABCDasm +- AS3 p-code editing - popup docs for more than instructions +- Debugger - New columns for variable details - scope, flags, trait +- Debugger - Add watch feature +- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases +- Deobfuscation Tool - Fix colliding trait/classes via toolbar command +- Auto rename identifiers option now fixes colliding trait/classes aswell +- [#1254] FLA export - detecting scripts on AS3 timeline +- [#907] FFDec Library JAR file has version inside it. +- [#1311], [#1313] actionScript source font size +- Display warning when library version and GUI version mismatch +- Changelog file +- [#1308] Search by all P-code files (AS 1/2 only) + +### Changed +- [#1189] AS3 - sort imports to have same order always +- GUI: AS3 P-code header show actual trait type and method type +- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" +- Set advance values button has confirm dialog with information +- [#1274] Linux package no longer requires Oracle Java only +- Library now packaged inside ZIP file + +### Fixed +- P-code docs formatting fix +- Export dialog - handling sprite and SWF frames correctly +- [#1275] debugger - show local variables fixes +- AS3 p-code editing - popup docs correctly displayed when label on line start +- [#1278] replacing DefineBits error +- [#1281] DefineFont 2/3 getting character advance value when replacing fix +- Set advance values button - Do not set advance if the char cannot be displayed in source font +- AS3 Goto declaration for single character names +- Identifier renaming for top level classes +- AS3 direct editation not correctly saving local register names +- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir +- Mac OS X installer fix (.pkg) +- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers +- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix +- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes +- [#1302] Callpropvoid instruction docblock not correct +- [#1309] recent files not getting updates +- [#1312] faster colliding usages finder +- [#1303] garbled text when exporting frame with text +- [#1314] user interface: button order +- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) +- [#1323] Audio playback fails + +## [9.0.0] - 2016-08-12 +### Added +- Instance metadata (AMF3) editing in PlaceObject4 +- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) +- [#1171] Export stroke scale to FLA +- FLA export - check invalid unicode characters +- [#1170] Extract from memory in commandline +- Reload one vs Reload all buttons +- ABC: Float and Float4 support +- AS3 p-code instruction documentation in GUI +- [#1241] Settings to show original bytes in hex view +- Search in dump view +- Jump to resources view from hex view +- Show warning on 32bit JRE + +### Changed +- [#1162] improved opening loaded SWF files +- Flash Viewer - skip frames when not on time +- [#1199] Automatically import alpha channel to JPEG3/4 from PNG + +### Fixed +- [#1151] Filters on texts fixed +- [#1128] Adding characters to font fixed (FontAlignZones not removed) +- [#1163] Clicking open->file makes program buggy +- Refresh tree after raw edit +- [#1172] Text double escape fix +- [#1174] Change language fix +- some AS2 deobfuscation fixes +- [#1183] Index out of bounds fix +- Implicit coersion on binary/unary opfix +- debugger: corect display variable values through getters +- Multiple XLF export fix +- [#1193] FLA export - text tag advance fix, one layer shape fix +- [#1193] FLA export - smoothed image detection, export raw JPEG data +- [#1193] Export space character to TTF correctly +- [#1200] Previous search text selected when quick find +- Flash viewer: aspect ratio on startup fix +- [#1198] Saving trait slot const value +- Zoom parameter commandline fixed +- [#1205] clipping fixed +- [#1194] Wrong sound effects in FLA +- [#1210] Frame Export fix +- Improved/fixed go to declaration in AS3 +- [#1217] PCode window not in same position as AS +- Hide memor search on non windows platform +- [#1244] Incorrect showing of NOP instructions +- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back +- [#1241] File content is different from hex view +- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont +- [#1236] won't open fixed +- [#1251] SWF not same after export XML and import back +- [#1265] Error during export +- [#1268] Font export - Using second glyph when two glyphs for one character found +- [#1268] GFX compacted font - fixed advance values on export + +## [8.0.1] - 2016-02-20 +### Changed +- FFDec debug tab in advanced settings moved to other tabs + +### Fixed +- [#1161] AS1/2 deobfuscation broken +- AS1/2 Simplify expressions fix + +## [8.0.0] - 2016-02-18 +### Added +- Debugger - AS1/2 Show registers +- Debugger - display variables in the tree structure +- Debugger - set value of variable +- Debugger - AS1/2 View constantpool +- Debugger - P-code level debugging for both AS1/2 and AS3 +- Basic SVG import for shapes +- Simplify expression setting +- [#1118] Loading characters through ImportAssets - show as readonly +- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 +- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) +- [#1121] Ability to save binary data by its name +- [#1052] Add object to existing frame +- Allow adding tag to main timeline +- AS1/2: Ctrl+click to declaration of variables, registers +- Allow trait specification in pcode import +- Icons for tag types in Dump view +- Show error message when a text tag is invalid (glyph index problem) +- AS3 direct editation - store local register names in debug info = allow to rename them + +### Changed +- New application icon and splash screen +- [#1145] AS3 better declaration type detection, better convert_x instruction handling +- Binary export - use .swf extension for swf files +- Better tree labels in generic tag editor (Raw edit) +- [#758] Allow zooming more than preview area in internal viewer + +### Fixed +- [#1096] FLA export - pretty print +- [#1104] AS1/2/3 Script Importat not working +- [#1107] Text Offset Incorrect fixed +- [#1106] New Shapes replace function fix +- [#1113] It takes too long to switch between rendered sprite +- [#1075] Lenght of DefineText in some cases +- [#1127] autoRenameIdentifiers is not supported in CLI mode +- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed +- [#1103] Foreach variables fixes +- AS3 Switch fixes +- Default clause position in switch +- [#1133] Incorrect frame order for nested sprite +- [#1135] Handle try "to" in p-code correctly +- Font wideOffsets,wideCodes fixed in DefineFont2/3 +- AS3: super method call +- [#1138] All exported videos are the same file which may be broken +- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages +- [#1137] running flashplayer(debugger) executable in Linux/MacOs +- [#1144] Command line argument renameInvalidIdentifiers +- [#1145] double not (!!) not removed +- [#1147] Sprite is exported incorrectly +- [#1148] handing end of stream exception in abc reader, loc exception +- [#1152] Font info tag modified tag was not set => saved swf was corrupt +- [#1154] Some 32bit JRE problems - program won't start +- [#1145] Correct precedence handling on binary operators +- [#116] not resolving unusual tags in DefineSprite + +## [7.1.2] - 2015-12-03 +### Fixed +- AS3 debugger start halt fix +- AS1/2 debugger fix on nondebug enabled SWFs +- AS1/2 debugger fix for functions +- Debug menu item enabled fix +- AS3 local reg index fix +- Advanced settings calendar +- AVM2 instructions in hex view +- [#1070] Incorrect switch decompilation +- [#1098] Import XML fix + +## [7.1.1] - 2015-11-23 +### Fixed +- Critical debugger fix - widelines + +## [7.1.0] - 2015-11-23 +### Added +- AS1/2 debugger +- Breakpoint/IP marker on line beginning + +### Changed +- Starting debugger on demand +- Installer message about playerglobal is only warning now + +### Fixed +- [#1033], [#1083] AS3 deobfuscation issues +- [#1091] AS 1/2 direct editation saving + +## [7.0.1] - 2015-11-18 +### Fixed +- Debugger: Adding breakpoint if script initializer not displayed + +## [7.0.0] - 2015-11-18 +### Added +- AS3 Debugger - breakpoints, stepping, show variables +- Faster AS3 direct editation + +### Changed +- Better Configuration of flashplayer paths + +### Removed +- Removed old "debugger" buttons +- Removed search from browsers cache - inactual code + +### Fixed +- Many AS3 direct editation related bugs +- [#1076] export fix + +## [6.1.1] - 2015-10-30 +### Fixed +- Deobfuscate AS3 metadata +- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix +- [#1063] AS3 direct edit - script initializer fix, generating method names +- XML export/import fixes +- [#1019] Namespace imports fix +- AVM2 code execution fix +- [#1016] AS3 direct editation fixes +- [#1010] AS2 direct editation - internal and override is not a reserved word +- [#1008] pushshort instruction diassembly +- [#1004] this/super can be AS1/2 variable +- [#933] AS3 allow numbers as object literal keys + +## [6.1.0] - 2015-10-26 +### Added +- Open other loaded SWFs during playback (useful for loaders) +- Export uncompressed data from dump tree +- Print performance statistics from commandline +- [#1062] Editing/displaying script initializers +- Enable debugging on SWF file (commandline) + +### Changed +- Faster syntax highlighting +- Better AS1/2 deobfuscator +- [#418] AS3 deobfuscator improved + +### Fixed +- AS call method fix (first parameter is "this") +- [#1047] open all scripts folders +- [#812] decompile fail +- [#1056] deltaY missing when adding a new StraightEdgeRecord +- [#1057] Editing as in editor results in package name moving +- [#991] GUI export +- [#689] Ignore Case not correctly toggled +- [#1060] reversed and/or detection in some cases +- [#1037] isXML call + +## [6.0.2] - 2015-09-12 +### Added +- AS3: Display and direct edit trait Metadata +- Allow to specify tag type on image or shape import +- Convert image tags from commandline +- [#489] Hex decode very large integers +- Add new tags without show empty folders +- Dependent characters in basic tag info +- [#1007] replace bytearray in raw editing +- Italian translation + +### Changed +- AS2 parser - add string to constant pool if there is not enough space +- [#1044] AS2 - order scripts by physical location, name by offset + +### Removed +- Deprecated commandline parameters removed + +### Fixed +- JNA problems on some JDKs +- [#947] Marklevels errors ignored 17a94b7 +- [#953] Mac application permission fix (maybe) +- [#954] IndexOutOfBounds fix +- [#950] AddTrait setting modified fix +- [#945] AS1/2 directeditation fix - member named as global function +- [#957] AS1/2 IndexOutOfBounds fix +- [#956] Invalid jump offsets warning +- [#968] Sprites export with wrong coloring +- [#978] case sensitivity of filenames +- [#955] AS2 decompilation problem +- Image alpha fixes +- [#966] Go to document class +- [#991] scripts exporting +- [#999] save as fla +- [#1000] image export for malformed JPEG3 tags +- [#1017] store alchemy opcodes with wrong order +- [#1030] stack overflow fix + +## [6.0.1] - 2015-07-06 +### Added +- Special §§ instructions marked as red +- [#949] Replace alpha channel from commandline +- AS3 deobfuscation from commandline +- Option to ignore FlashCC/Alchemy packages + +### Changed +- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements + +### Fixed +- AS1/2 deobfuscation fixed +- [#952] Not loading SWF without extension + +## [6.0.0] - 2015-07-04 +### Added +- New AS3 deobfuscation method +- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... +- Allow reload FFDec when no SWF is opened +- [#858] Allow to set compression type in header +- [#905] Show codec details for sound items +- Better alchemy/DomainMemory instruction handling +- Better obfuscated names handling +- [#920] Export instance name to SVG +- [#921] Export html DefineEditText to SVG +- Open multiple files with drag and drop +- Better "multi packs" handling (Alchemy) +- SWF version 29 to flash player 18 mapping +- ImportAssets2 sha1 field +- [#924] Sprites to image from commandline +- AS1/2 direct editation big numbers fix +- Allow to add FILTERs and SHAPERECORDs in generic tag editor +- Enable close all menu when no swf is selected +- Restore modified state even when something goes wrong +- Some old tags added + +### Changed +- AS decompilation highly improved +- Better &&, || handling +- DoABCDefine renamed to DoABC2 +- Separated Sprite export settings + +### Deprecated +- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) + +### Fixed +- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. +- Few menu issues +- [#895] Correct handling CMYK JPEG +- [#884] AS direct edit assignment +- [#899] Show script after AS3 direct editation +- Some AS1/2 parser problems +- [#903] FLA export - fix for missing fontname, lastframe +- [#855] AS3 direct edit - for..in variable declaration fix +- [#850] Constant initialization for same multinames +- [#832] AS3 direct edit - other ABCs resolving fix +- [#904] Cannot export images +- [#910] Missing instructions +- Opening not existent files on restoring last session +- [#922] Edit text leading +- Put image before shape on shape replace +- [#916] Replacing Shape corrupts SWF +- JRE setup parameters fixed +- [#938] Parallel speedup limit fix + +## [5.3.0] - 2015-05-25 +### Added +- Generic tag editor: improved table editing (import/export assets tags, etc.) + +### Changed +- Classic (nonribbon) UI improved - has same items as Ribbon UI +- Icons improvements +- Disabling menu items when work in progress + +### Fixed +- [#897] Classic UI fix + +## [5.2.0] - 2015-05-22 +### Added +- UI8 editbox for swf version in header panel +- Basic tag information panel + +### Changed +- AS1/2: Shown only the constant pool(s) in pcode editor +- Do not allow to chage tag tree selection, when current tag is under editing +- Faster bitmap export +- Using less memory when playing sounds +- Error message changed when the opened file is not swf + +### Fixed +- [#470] panels size after resizing from/to full screen +- [#877] A small glitch after search in AS +- [#878] small glitch after saving P-code or swf file +- [#470] glitch +- [#845] If frame consist 2 DoAction then it imports only first one +- pdf export (when no frame exists) +- text rendering (alpha channel was ignored), +- bmp export (paddings when width%2==1) +- [#883] -dumpSWF option does not work anymore +- [#882] Canvas export border size +- [#760] Internal viewer line linear gradient fill is not working +- [#887] error on export a special swf's P-CODE +- Extensions of exported images fixed + +## [5.1.0] - 2015-05-04 +### Added +- Allow to copy/move multiple tags, and dependencies +- [#842] For reconstruction if debug line info present +- [#841] Loop control for sound preview +- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button +- Scrollbar added to fontpanel +- SWF header editor +- Configure what object types to export in exportdialog + +### Changed +- Better gif exporter +- [#772]: closing loading dialog now cancels the loading of the swf +- [#762] export pcode with different extension + +### Fixed +- CRITICAL: Update System Bug causing updates not working +- [#862] AS3 asm: do not read beyond return/throw instructions +- [#865], [#613]: ribbon prefered width fix +- [#868] export path fix, allow to export buttons +- [#865] TagTree font size problem on high resolution screens +- [#713],[#807] Installer for 4.0+ fails to access Adobe Website +- [#728] Large fonts, [#857] add scroll on DefineFont3 + +## [5.0.2] - 2015-04-18 +### Added +- Reopen last session + +### Fixed +- ffdec.sh file line endings fixed + +## [5.0.1] - 2015-04-18 +### Fixed +- [#860]: Opening bundle (zip, swc, any binary file) files fixed + +## [5.0.0] - 2015-04-18 +### Added +- Color skins +- [#824] Mac OS X package +- [#809] Move left,right buttons for DefineTexts using translatex parameter +- [#805] Editor mode for DefineTexts +- [#825] Hotkeys for next/previous DefineText +- Export/Import symbol classes/export asset tags +- Frame export progress +- [#737] Single file script export +- Displaying changed AS3 scripts in GUI as bold +- Additional character info tags placed under character node +- New icons for other tags (metadata,fileattributes,setbackground,place/remove) +- Metadata tag editor + +### Changed +- Default color skin altered +- [#350] Allow only one running instance (Windows only, can be turned off) +- SWFs in zip based bundles (SWC for example) can be modified & saved +- Performace improvements +- More compact SWF-XML format +- Marking changed parentnodes as bold too + +### Fixed +- [#814] Exporting with scale problem +- [#816] P-code not shown after class initializer trait selection +- [#835] Static initializer improvements +- AS3 direct editing - local register decrement fix +- AS3 direct editing - maintain register order/names +- [#836] AS1/2/3 Correct expression precedence handling +- AS3 preincrement +- [#848] Correct toggling text switches +- [#817] AS1/2 for..in variable declaration +- [#849] Attribute member +- [#852] Ignore case for russian characters +- [#837] AS3 try..finally without catch + +## [4.1.1] - 2015-02-21 +### Added +- Export/Import XML added to ribbon menu +- Few GUI enhancements +- Undo tag changes context menu + +### Changed +- Java 8 now required + +### Removed +- Removed support for Java below 8 + +### Fixed +- [#811] export ActionScript + +## [4.1.0] - 2015-02-18 +### Added +- XML export/import +- confirmation dialogs added +- Add support for non-standard ABC-compressed SWF file +- [#745] Copy tag to another SWF +- [#803] Align text in DefineText + +### Changed +- performance improvements +- [#758] Zoom to fit is dynamic + +### Fixed +- [#738] Frame export +- [#742] Can't edit frames +- [#747] Move tag to adds extra frame +- [#749] Internal viewer Sprite fill color +- [#752] Sound is not stopped +- [#753] Reload swf +- [#759] Decompilation § symbol +- [#766] Can't extract all resources +- [#768] Super calls not being correctly recognized +- [#773] Scripts associated with ClipActions are not shown +- [#776] Stop working after setting "number of threads" to 0 +- [#783] No OK box when edited script or text was saved +- [#785] Text search. Remember last choise, Unicode case insensitive search +- [#787] Search in AS bug (when navigating to searched results) +- [#788] Add DefineCompactedFont Tag to gfx file +- [#790] Impossible to change letters under a font +- [#794] Font extraction fails sometimes +- [#798] Close file streams after export, exporting progress +- [#800] Unexpected deleted carrier return in DefineEditText +- Build fix on Linux +- Fis Startup Script for OpenJDK +- Other minor fixes + +## [4.0.5] - 2014-12-01 +### Added +- Escape control characters in strings, identifier names +- [#676] import text error messages / logging enhancement +- [#734] \xAB escapes, \uABCD escapes +- [#687] AS3 - allowing p-code comments on separate line +- [#709] Text Export to Single File with custom filename + +### Fixed +- [#732] Random freezing - JavactiveX library updated. +- [#730] Not working without ActiveX fix on Windows +- [#735] Automatic deobfuscation not correctly switched (required restart) + +## [4.0.4] - 2014-11-23 +### Changed +- better file cache, removing unneccessary temp files + +### Fixed +- obfuscated identifiers + +## [4.0.3] - 2014-11-23 +### Added +- [#722] Go to next/previous frame +- BMP file format export (images,frames,shapes) and import(images) + +### Fixed +- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type +- [#715] namespace resolving fix +- [#635],[#726] placing cursor inside Unicode characters + +## [4.0.2] - 2014-11-22 +### Added +- show frame number during play +- flashplayer - show controls for DefineSprite +- goto frame +- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design + +### Changed +- [#720]: edited shape tag is not marked as modified after replacing +- reorganized about dialog + +### Fixed +- [#719] null swf name in Proxy after cancelling rename dialog +- flashplayer - font display +- [#723]: saving swf with invalid referenced characters +- DefineCompactedFont paging +- [#288] Less memory usage during FLA export +- Corrected syntax hilighting for AS3 P-code + +## [4.0.1] - 2014-11-12 +### Fixed +- [#713] Installer can continue when no file can be downloaded +- Fixed shapes +- Checking for updates moved to separate thread + +## [4.0.0] - 2014-11-11 +### Added +- [#677] Zoom level in export settings +- internal viewer: linear/srgb gradients +- zooming buttons for flashplayer/internal viewer +- stroke scaling modes for canvas export +- create snapshot button +- [#389] Selecting font face on import +- [#701] Importing font from TTF file +- Reorganized font panel +- [#707] Debugger for logging messages +- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets +- [#685] Getting local register names from debug info can be disabled +- Adding new tags +- [#698] Allowing unicode letters in identifiers +- [#710] Information about deobfuscation in error comments +- One EXE for 32/64 bit, uses percentage memory. +- EXE SplashScreen +- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc +- Config setting to load inner SWFs automatically +- Replace shape with image + +### Changed +- better FlashPlayer integration using JavactiveX library +- Faster building tag tree +- Faster timeline construction +- [#711] Improved folder view - faster and with correct context menu + +### Fixed +- AS2 deobfuscation fixes +- AS2 loops fix +- [#681] Linux script fixes +- AS2 constructor name fix +- [#688] AS3 direct edit fixes +- [#691] AS3 p-code reading/saving fix +- AS3 direct edit -submethod name resolve fix +- frames to html canvas fix +- [#524] Mask layer not applied when nonempty script layer +- [#663] AS3 imports fixes +- Font export of dot character +- Font panel Yes button fixed +- [#702] GFX font reading fix +- Better obfuscated names handling +- [#539] for(each) in declaration fixes + +## [3.0.0] - 2014-09-20 +### Added +- Separated GUI (GPL) and library (now LGPL) +- Editing obfuscated identifiers via new paragraph(§) syntax +- Timeline View with preview and object hilighting +- Show GFX data in dump view +- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline +- Dump view - selecting node +- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption + +### Removed +- Removed deprecated commandline export formats (see --help) + +### Fixed +- FileAttributes tag reading fix +- [#649] GFX reading fixed +- [#656] Search in memory - 64 bit processes fix +- [#661] scripts not showing +- [#664] expanding fillStyles in raw edit +- [#668] add missing character fix, text tags fix +- [#674] texts hilighting initialization fix +- [#675] AS1/2 and/or operator compilation +- [#632] Locking file after opening (cannot save, etc.) +- [#651] Unnecessary removing expression killed in unreachable part +- [#678] Windows batch file paths fixed +- [#672] Disabling transparency slider on RGB only selection +- [#684] Sound streams inside DefineSprites, soundstream handling + +## [2.1.4] - 2014-08-23 +### Added +- AS1/2: New method for deobfuscation (can be switched off in settings) +- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters + +### Fixed +- [#647] Skipping FileAttributesTag with Parallel speedup on +- [#648] Export from embedded SWF + +## [2.1.3] - 2014-08-18 +### Added +- Show "save" and "saveas" in application menu +- Saving data range in dump view +- Show actions, abcdata in dumpview (context menu on the tree node) +- [#612] show color in hex format + +### Changed +- Faster dump info collecting (less memory) +- Allow selecting multiple files in open file dialog + +### Fixed +- [#623] ffdec.sh UNIX file endings, executable +- [#624] search in embedded swf files +- [#632] AS1/2 Unnecessary GetVariable before NewObject +- [#627] filter swf not working +- LZMA saving +- Export pcode&hex from commandline +- [#640] text import fixed, ignore BOM + +## [2.1.2] - 2014-07-20 +### Added +- Dump view +- Context menu: Jump to character, raw edit all tags +- Catalan translation +- SWF header display + +### Fixed +- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes +- [#592] AS3 Multiname resolving in P-code causing different bytecode +- [#585] AS3 moving popped values to output +- [#578] Always on top fixed on search results +- [#501] GotoFrame2 fix +- [#616] Frames to PNG export +- Export context menu +- [#559] Bitmap export opacity +- [#401] Placeobject 3/4 fix +- [#593] Return object newline +- [#594] Setting for curly brace + +## [2.1.1] - 2014-06-05 +### Added +- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers +- AS1/2 direct edit - global functions improvements +- AS1/2 negate operator, unary minus operator +- Opening SWFs in BinaryData tags +- AS1: Old string operators support, and/or, <> operator (editation) +- Statusbar loading animation improved +- [#579] AS3 direct editation - removing old class/methods from ABC +- remove character without the dependencies (remove only the place/remove tags) +- Running on system with no home directory +- [#428] PDF export (as images only) +- Commandline FlashPaper to PDF export +- Select frames / Characters commandline options + +### Changed +- [#337] quickfind visibility improved +- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) + +### Fixed +- [#576] AS1/2 direct editation: DefineFunction2 fix +- AS1/2 property fix +- AS1/2 typeof operator fix +- [#250] line spacing fix +- PlaceObject 3-4 className +- [#579] AS3 direct editation bugfixes - property resolving, integer values +- Morphshape canvas export fix +- Canvas export fix - closing path +- [#580] Rename invalid identifiers commandline fix +- [#510] JSyntaxPane find and replace dialog wrap around fix +- No more frame caching during export => memory saving (like [#583]) +- [#586] DropShadow filter fix +- Canvas export colortransform fix + +## [2.1.0 update 2] - 2014-05-08 +### Added +- AS3 decompilation/editation: Vector initializers +- AS3 direct editation: more classes in one file + +### Fixed +- [#574] DefineSprite editing fix +- Various AS3 direct editation fixes + +## [2.1.0 update 1] - 2014-05-05 +### Added +- Portugese-brasilian translation + +### Changed +- HTML Canvas export improvements + +### Fixed +- Various AS3 direct editation bugs, like [#570] + +## [2.1.0] - 2014-05-01 +### Added +- AS3 direct editation (Experimental!) +- Frames SVG Export +- Shape/MorphShape/Frames HTML 5 Canvas Export +- [#559] morphshapes as animated SVG +- [#563] Single file text export/import +- Font WOFF export +- Advanced settings dialog with tabs, config names, descriptions + +### Fixed +- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments +- Internal viewer: Filters fix + +## [2.0.1 update 2] - 2014-04-05 +### Fixed +- [#557] AS3 null namespace fix - p-code not working + +## [2.0.1 update 1] - 2014-04-04 +### Fixed +- [#556] Goto main class on startup fix +- [#557] Nullpointer fix (private namespaces) + +## [2.0.1] - 2014-04-03 +### Added +- Thumbnail view +- Font TTF export +- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) +- Expand all context menu +- Internal viewer: Button mouse move and click handling +- Playing sounds without flash player +- Internal viewer: Sounds on stage +- All sounds to WAV export +- Internal viewer: Showing texts, dynamic text border/fill +- [#504]: Unicode characters in JSyntaxPane +- Internal viewer: showing object under cursor +- Folder icons +- Sound/Image format on command line. +- Removing placeobject tags +- Removing frames +- AS: "elseif" statements +- Code formatting: space before parenthesis + +### Changed +- Single frames animated. + +### Fixed +- [#529] limit the number of displayed binaryData bytes +- [#538] Interface are sometimes dynamic +- [#537] super is sometime preceded by a dot +- [#540] Saving SWF changes very large static uint values +- [#387] Frames preview bugged +- AS:loop mismatch fix on parallel speedup +- [#552] Some timeout exceptions +- [#494] Fixed nightly builds updates + +## [2.0.0] - 2014-03-02 +### Added +- Generic tag tree editor +- Timeline view (stub only) +- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) +- [#513]: command line option to extract swf from binary file +- Configurable code formatting (Indentation + brace position) +- [#262] Export FLA: Font character ranges export +- Configurable checking for updates + +### Changed +- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes +- Improved commandline usage +- Automatic deobfuscation default value set to False (See News on webpages) +- Check for updates can be configured to inform about Nightly builds aswell + +### Deprecated +- Some commandline options are now deprecated, see --help + +### Fixed +- [#499] Cannot save via Proxy fixed +- [#504] font name reading fixed +- [#508] Support for OS without GUI +- [#305] Export FLA: empty sound layers +- [#312] Export FLA: Improved Shape/MorphShape fix +- [#503] Export FLA: Smoothing invalid shapes +- [#401] Invalid GFX tags in non GFX files +- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues +- [#361] FFDec icon is not visible on application start +- [#392] Video stream data fix +- [#516] AS3 P-code editor - Null name namespace handling + +## [1.8.1 update 1] - 2014-02-02 +### Fixed +- [#495] font embedding fix +- [#496] date format in new version dialog +- cosmetic changes + +## [1.8.1] - 2014-01-30 +### Added +- [#299] replace DefineBits images +- [#303] open folder with exported FLA +- [#324],[#346] SWC/zip/other binary file support +- [#371] detailed logging +- [#426] command line switch to rename identifiers +- [#457] clear recent opened files list +- [#458] save selected system font for swf fonts +- [#460] text editor: do not scroll to the end automatically +- [#462] font embedding dialog: show more sample characters +- [#463] global search in texts +- [#465] make font properties editable +- [#466] font preview + +### Changed +- [#369] new SVG and preview image rendering +- [#390] refresh font list without reloading the application +- [#453] update texts aftert adding new character to a font tag +- [#459] remember text panel splitter position +- [#461] font panel gui redesigned + +### Fixed +- [#451] dialog windows are not on the center of the screen +- [#454] Text syntax highlighting +- [#455],[#465] classic interface issues +- [#474] changeing language only available one time +- [#477] log window localization +- [#481] SVG export fix +- [#484] Oversized advance value after editing DefineText with DefineFont2 font +- [#493] missing search results + +## [1.8.0 update 1] - 2013-12-27 +### Added +- [#453] refresh (edit+save action) all texts button + +### Fixed +- Flash panel and font panel fixed + +## [1.8.0] - 2013-12-27 +### Added +- [#350] Allow to open multiple SWFs +- [#365] Filter fake SWFs during memory search +- [#366] Allow to sort the result list in memory search window +- [#429] Auto rename invalid identifiers setting +- [#447] Non-ribbon interface + +### Fixed +- [#354] Infinite decompilation fixed +- [#438] Case sensitive Command line arguments fixed +- [#436] Saving actionscript fixed +- [#446] Precedence issue fixed +- [#451] Dialogue window positions on a multi-monitor configuration fixed + +## [1.7.4 update 1] - 2013-12-05 +### Added +- [#426] Command line parameter for renaming invalid identifiers + +### Fixed +- [#427] Exception on linux fixed +- [#405], [#420], [#421] Some decompilation issues fixed +- [#430] Configuration default value problem fixed +- [#397], [#431] Deobfuscation stucked sometimes problem fixed + +## [1.7.4] - 2013-11-10 +### Added +- [#169] hexedit method body bytes +- [#335] last opened files +- [#404] Exporting P-code and Hex + console parameters +- [#407] register name is configurable +- Advanced settings +- Cancellable decompiling, exporting and searching + +### Fixed +- [#399], [#400] performance optimizations + +## [1.7.3 update 2] - 2013-09-29 +### Fixed +- [#398] AS3 p-code values with index 0 (null) + +## [1.7.3 update 1] - 2013-09-28 +### Added +- [#382] AS3: Adding new method + +## [1.7.3] - 2013-09-27 +### Added +- AS3: Multiname and namespace editing. +- [#382],[#396] AS3: Adding new trait (method/slot/const) +- AS3: Highlighting pair parenthesis/bracket +- AS3: Editing various new P-code parameters +- AS3: Highligting of trait names/types/parameters +- AS3: Global rename identifier for traits +- [#357] Playback controls for DefineSound +- [#391] AS3: Native methods mark +- [#395] Support for GFx ScaleForm SWFs (with fonts editing) +- Displaying fonts in internal viewer +- [#334], [#395] New Embed font dialog - selecting character ranges with preview +- Replacing characters in font (Yes/No to all dialog) + +### Changed +- AS3: New p-code syntax inspired by RABCDasm +- AS3: Editing whole trait in one textarea +- AS3: Removed messages about adding new constants +- AS3: Modified colors in editor +- [#301] Clearing error log causes icon to reset + +## [1.7.2 update 2] - 2013-09-13 +### Changed +- Updated translations + +### Fixed +- [#383] Firefox browser cache handling +- [#386] SWF resizing + +## [1.7.2 update 1] - 2013-09-11 +### Changed +- updated translations + +### Fixed +- [#383] Fixed cache loading when Firefox not used + +## [1.7.2] - 2013-09-11 +### Added +- [#357] Sounds Preview (Windows only) +- Movies preview (Windows only) +- Whole SWF display +- Preview controls (Play,Pause,Stop) +- Search SWFs in browsers cache (Firefox, Chrome) +- [#367] Memory search: Save selected files to disk +- Portugese translation + +### Changed +- [#380] Faster displaying DefineBitsLossless(2) images + +### Fixed +- [#292] Background color for Fonts preview fixed +- [#375] Replacing DefineBitsLossless image tag +- [#378] Refreshing language of JSyntaxPane +- MORPHGRADIENT reading fix + +## [1.7.1] - 2013-08-25 +### Added +- Loading SWFs from other processes memory (Windows only, sorry) +- [#325] Spanish translation +- [#210] Ukrainian and Dutch translation +- [#355] Chinese translation +- [#292] Change background color in SWF preview +- [#301] Clear errors log button +- [#313] Command line parameter for ignore all errors +- [#330] Protection agains adding same characters +- [#332] AS1/2 Showing elapsed times during commandline export +- [#344] Reload opened SWF +- Decompilation timeouts + +### Fixed +- [#295] Export FLA: wrong font +- [#297] Too bright titlebar button colors +- [#307] Export FLA: fixed empty textfields +- [#309] Export FLA: static text letter spacing detection +- [#310] Export FLA: Strokes +- [#311] Export FLA: BitmapFill +- [#327] AS1/2 Disassembly error stop application +- [#328] Fixed replacing images in DefineBitsJPEGX +- [#333] AS1/2 action reading +- [#336] Graph window is too small +- [#337] Quick search panel barely visible in same cases +- [#338] Expand/collapse icon in errorlog + +## [1.7.0 update 1] - 2013-08-11 +### Added +- [#315] German translation (partial) + +### Fixed +- [#123] Better context menu integration +- [#243],[#326] Better deobfuscation +- [#287] Typo in parallelSpeedUp parameter +- [#290],[#291] improved select language dialog +- [#294] minor GUI fixes +- [#298] Progressbar positition issues +- [#296] better export directory remembering +- [#314] Better deobfuscating filenames +- [#316] Readonly editor panes accepted Ctrl+Z/Y +- [#318] Export FLA: Shapes export fix +- [#319] AS3: Improved try..catch..finally decompilation +- [#323] AS3: Fixed default switch part + +## [1.7.0] - 2013-08-03 +### Added +- Listing contributors on about page +- [#223] AS2: Detecting uninitialized class fields +- [#250] Export FLA: Detecting static fields margin and spacing +- [#261] Export FLA: AS1/2 Frame scripts on first layer +- [#269] Commandline parameters for switching configuration +- [#274] AS3 Displaying elapsed time during commandline export +- [#275] AS3 Removing returnvoid as last statement + +### Changed +- New GUI based on Substance look and feel +- Menu changed to ribbon panel +- New round icon +- [#258] AS1/2: Improved chained assignments +- [#267] Starting program without choosing a file +- [#286] Saving to temp file first + +### Fixed +- [#123] Improved context menu integration on Windows +- [#233] Globally rename identifier deselects item in the tree +- [#235] Export FLA: Dynamic text fields coordinates +- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation +- [#251] Export FLA: Fixed filter strength rounding +- [#257] Export FLA: Text field color and size issues +- [#259] Fixed images alpha +- [#260] Export FLA: Labels position +- [#268] AS1/2 Function parameter shown as register instead loc +- [#272] AS3 Class initializer editation fix +- [#276] Fixed anonymous/inline functions handling +- [#220] Improved editing fonts / texts +- [#284],... other small fixes + +## [1.6.7] - 2013-07-20 +### Added +- [#220] Selection of font to import characters from +- [#232] Automatically add .swf extension in saveas dialog +- [#253] Abort/Retry/Ignore dialog on errors with file saving + +### Changed +- Improved translations + +### Fixed +- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation +- [#203] AS1/2 improved direct editing +- [#220] Adding characters to font fix +- [#225] AS1/2 object literal without name quotes +- [#236] AS1/2 Rename invalid identifiers issues +- [#245] AS3 Double space around "as" keyword +- [#247] AS3 Scrolling to main class at startup +- [#248] Memory issues (slowdown) +- [#254] Expressions as commands +- [#255] Windows 7 loading issues +- [#256] AS3 Object literal in return clause +- SWF text parsing (new lines) +- Labels size by locales + +## [1.6.6 update 2] - 2013-07-16 +### Fixed +- [#241] Program could not be started + +## [1.6.6 update 1] - 2013-07-16 +### Changed +- Better localization support + +### Fixed +- [#238],[#239],[#240] Fixed deobfuscation related problems +- [#237] Parentheses in AS1/2 add,subtract + +## [1.6.6] - 2013-07-16 +### Added +- [#217] Russian translation (focus) +- [#219] Hungarian translation (honfika) +- [#224] Swedish translation (Capasha) +- [#220] Adding characters to Fonts, displaying font info +- [#121] Search progress indication +- Error log + +### Changed +- [#203] Improved direct editing of AS1/2 +- [#207] Update SWF preview after switching external/internal flash player + +### Fixed +- [#151] Memory caching +- [#171] Skipping invalid AS3 code - newobject, newarray +- [#206] AS3 switch problem +- [#208] Renaming anonymous functions +- [#209],[#229] FLA export texts positions +- [#213],[#221] other decompilation issues +- [#225] AS object literal broken with ternar operator +- [#226] onClip indentation in FLA export +- [#227] gotoAndStop wrong frame index +- [#230] FLA export missing strokes +- Shapes viewer - missing strokes + +## [1.6.5 update 1] - 2013-07-09 +### Fixed +- [#151] Fixed caching in memory +- [#172] AS1/2 constant detection fix +- [#174] Renaming SymbolClass fix +- [#175],[#212] Fixed create directory issues on export +- [#185],[#186] on-clip actions indentation +- [#197] AS1/2 Missing storeregister before switch +- [#216] AS2 Fixed field order +- [#213] AS2 Fixed var fields quotes, switch nullpointer + +## [1.6.5] - 2013-07-08 +### Added +- Multilanguage support (currently English and Czech) +- [#151] Option for caching in memory instead of files +- [#168] Export selection in tree context menu +- [#176] option to show main class on startup +- [#177] saving window maximized state +- [#202] Removing tags other than DefineSprite + +### Changed +- [#173],[#190] Better renaming +- [#129], [#153] Better deobfuscation +- [#180] better error handling +- [#185],[#186] better displaying and exporting onclip actions + +### Fixed +- [#123] Better context menu integration +- [#136] FLA export - text sizes +- [#137],[#179] foreach issues (hasNext) +- [#144] Plain text export - empty line fix +- [#144] Not displaying texts +- [#164] DefineMorphShape issues +- [#167] Sprite tag appearing twice in export filename +- [#170] AS3 Try in loop +- [#172] loop detection fix +- [#175] use empty namespace +- [#178] AS subtract with negate +- [#181] AS3 missing quotes in object field +- [#182] missing namespace imports +- [#183] wrong stage size +- [#184] wrong video link +- [#189] Fixed three dots in tree +- [#191] Focalgradient fill fix +- [#195] AS2 issues +- [#196],[#197] switch issues +- [#198] DefineFont2 empty check +- [#200] DefineBitsLossLess fix +- [#201] Nonworking main window in Linux/MacOS (due toAssociation) + +## [1.6.4 update 1] - 2013-06-30 +### Fixed +- [#166] For loops detection +- [#165] AS3:direct lookupswitch support + +## [1.6.4] - 2013-06-30 +### Added +- [#63] Globally rename identifier +- [#67] Deobfuscation - rename identifiers according to type +- [#117] Drag & Drop SWF file to main window opens it +- [#123] Context menu integration on Windows +- [#127] Drag & Drop items from tree outside of application +- [#134] AS3: Find document class +- [#144] New lines in plain text export +- [#155] Remembering window size + splitbar positions between runs + +### Changed +- [#142] Using exportassets tag for tag names +- [#146] Display AS2 classes as tree of packages +- Better loop detection + +### Fixed +- [#129] AS1/2: not refreshing decompiled after rename +- [#130] Renaming SymbolClass identifiers too +- [#132] Renaming identifiers renamed strings +- [#136] Invalid text positions in FLA export +- [#145] Unicode support +- [#147] Escape filenames during obfuscated AS3 export +- [#148] Better package vs classname handling +- [#152] Empty if branches not inverted +- [#156] Better search handling (not freezing) +- [#157] AS3: Try statements in loops +- [#158] Graph repaint problem +- [#159] AS3: Improper rest parameter handling +- [#160] Commandline binaryData export +- [#162] DefineBitsJPEG2 image replacing +- [#163] Closing SWF file after loading +- other minor fixes + +## [1.6.3 update 2] - 2013-06-21 +### Changed +- [#149] Ifs with empty onTrue branches now inverted + +### Fixed +- [#150] Long line restriction removed + +## [1.6.3 update 1] - 2013-06-21 +### Fixed +- Memory limit decreased - FFDec was not working on 32 bit JVM. + +## [1.6.3] - 2013-06-20 +### Changed +- Parallel SpeedUp can be disabled in menu +- Better loop detection + +### Fixed +- [#119] Replacements file not found issue +- [#101] AS1/2 postincrement fix +- [#114],[#116],[#135],[#141] Fixed loop detection +- [#102] Fixed loop highlighting in export +- [#124] Flash player file path detection +- [#128] Improved imports +- [#135] CommentItem fix +- [#129],[#131] Better deobfuscation +- [#104] AS3 inc/dec local deobfuscation fix +- [#113],[#133],[#140] Memory limit increased + +## [1.6.2] - 2013-06-09 +### Added +- New loop detection algorithm + +### Changed +- [#108] - Faster loading and decompiling (Parallelism) +- Improved Internal flash viewer - shapes and morphshapes + +### Fixed +- Ternar operator fix +- [#102] Fixed Shapes to FLA export +- AS1/2 class detection fix +- [#105],[#104],[#101] fixed via new loop detection + +## [1.6.1] - 2013-06-03 +### Added +- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) +- [#109], [#106], [#107] some code improvements + +### Changed +- Application needs Java 1.7 to run + +### Removed +- Support for Java before 1.7 + +### Fixed +- [#102], [#110] AS3: Class highlight fix +- [#103] AS3:Fixed setslot handling +- [#104] AS3:Inc/Declocal nullpointer fix +- [#104] Multiple conditions in loop fix +- [#111] AS3:Object literal truncates line +- [#105] Better do while..break handling +- loop fixes + +## [1.6.0 update 1] - 2013-05-25 +### Added +- better FLA export + +### Fixed +- Many FLA export related bugs (like [#96]) +- [#98] Empty initializers do not cause empty lines now +- [#99] small logging issues +- [#100] large obfuscated code support + +## [1.6.0] - 2013-05-20 +### Added +- Export to FLA (Experimental BETA!) +- [#85] Search text in all ActionScripts +- SWF 11 support + +### Fixed +- [#79] ActionStartDrag constraint fix +- [#92] Inversed GreaterThan/LessThan +- [#93] AS1/2 fixed switch detection +- [#94] AS1/2 ActionTry - register cast fix +- [#95] Better script end handling + +## [1.5.2] - 2013-05-05 +### Added +- Improved automatic update system (changes log). +- Handling script traits as separate objects. +- [#86] open/save file dialog now accepts absolute paths in quotes + +### Fixed +- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 +- [#88] Fixed graph building +- [#89] AS3: bracket in property name lead to missing dot +- [#82] printgraph issue + +## [1.5.1 update 1] - 2013-05-04 +### Added +- Exporting texts via commandline +- Exporting all via commandline + +### Fixed +- DefineText2 color parameter +- AS3 GetSlot,SetSlot +- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... +- [#83] Fixed images transparency (zlib fix) +- Fixed graphparts with only jump in it (obfuscators) +- MORPHGRADIENT FIX +- Trasparency in DefineBitsJPEG3 and 4 +- Displaying shapes,morphshapes and sprites with bitmaps + +## [1.5.1] - 2013-05-01 +### Added +- Support for larger switches (10+cases) +- Editing text tags +- [#65] Exporting text tags +- Removing sprites +- Replacing images + +### Fixed +- DefineMorphShape2 fix +- [#79] - AS1/2 class detection fix, wrong printgraph fix +- [#78] - script trait slots fix + +## [1.5.0 update 1] - 2013-04-21 +### Fixed +- Automatic deobfuscation config defaulted to Off for AS1/2. + +## [1.5.0] - 2013-04-20 +### Added +- Direct editing of ActionScript 1/2 code (Beta) +- AS1/2: ifFrameLoaded support +- Automatic deobfuscation can be disabled in the menu +- [#48] - Decompile only specified class (commandline option) +- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices +- [#66] - Decompressing LZMA via commandline +- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) +- [#69] - DoABC vs DoABCDefine tags decompilation +- [#75] - Comma separator in while/do..while conditions, better if..return handling +- AS1/2: parsing NaN,Infinity value (Fix for [#73]) + +### Changed +- New icons (edit/save/cancel and main menu) + +### Fixed +- [#62] - Errors on not defined character tags (import tag) +- [#72] - First ternary operator expression was always true +- Fixed many deobfuscation related bugs + +## [1.4.3 update 2] - 2013-04-10 +### Fixed +- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) +- Try to fix lib/FlashPlayer.exe issue + +## [1.4.3 update 1] - 2013-04-06 +### Fixed +- [#38] - Indentation in const/var initializers, missing semicolon +- [#56] - Test output left in last release +- [#57] - Unknown instructions now do not log an exception (obfuscators do this) +- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. +- AS3 loops fix +- While true fix + +## [1.4.3] - 2013-04-04 +### Added +- AS1/2 Better deobfuscation + +### Fixed +- [#45] - Unicode characters fix +- [#50] - AS1/2 Function body deobfuscation fix +- [#51] - Displaying java class names instead of expressions +- [#52] - AS1/2 Better constantpool detection (deobfuscation) +- [#38] - AS3 indentation in initialized const/var value for newobject +- Fixed ImportAssets2 tag id + +## [1.4.2 update 1] - 2013-03-25 +### Fixed +- [#47] - wrong AS3 deobfuscation +- AS3 deobfuscation issues +- AS3 switch + +## [1.4.2] - 2013-03-24 +### Added +- [#42] - Displaying code as hex +- AS1/2: Renaming identifiers (deobfuscation) +- AS1/2,AS3: Better deobfuscation +- Storing configuration to user home +- Installer for Windows systems + +### Changed +- Graph button changed to icon. + +### Fixed +- [#39] - AS1/2 NewMethod..Pop fix +- [#40] - No logging + For..in..return decompilation +- [#44] - DefineFont2 fix +- [#36] - Multiname with invalid index +- [#43] - Ternary operator and more +- [#46] - Ifs with empty branches got ignored +- [#3] - Ignoring unknown opcodes +- Logging exceptions during export + +## [1.4.1] - 2013-03-10 +### Added +- Exporting sounds +- Better AS1/2 deobfuscation (disassembly & decompilation) + +### Fixed +- Exporting only first 1000 frames of the movie +- Decompiled code was not refreshed on AS1/2 changes +- Application no longer creates empty directories on export + +## [1.4.0 update 1] - 2013-03-04 +### Fixed +- [#37] - AS3: Reversed loop conditions + +## [1.4.0] - 2013-03-03 +### Added +- AS3: ignoring return void at the end of methods +- New icons - Silk icons +- AS3: Traits list sort button +- Better Graph display +- Frames view +- Exporting of movies (No audio) +- Some AS3 related Tests +- Homepage & Donate link in the menu + +### Changed +- Tree view instead of tabs +- AS1/2 and AS3 now share same decompiling method. + +### Fixed +- [#34] - Reversed loop conditions +- [#35] - Fixed unicode strings (Japanese) + +## [1.3.1] - 2013-02-23 +### Changed +- Flash player no longer uses SWT library + +### Fixed +- [#32] - AS2: Action255 bug +- [#31] - Erorrneous tags are now ignored +- DefineBitsLossLess 1&2 on 8bit colormapped images + +## [1.3.0] - 2013-02-17 +### Added +- Decompilation is more resistant to obfuscation +- Shapes SVG export +- AS2: Decompiling classes & interfaces +- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) +- AS3: Deobfuscation menu +- Graph button for displaying code flow Graph + +### Changed +- Complete new decompiling method in both AS1/2 and AS3 +- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". +- To edit source, Edit button must be pressed first (Due to click&go feature) + +### Fixed +- AS3: Method info editor fixed +- Edittext & Button displaying + +## [1.2.0] - 2013-01-19 +### Added +- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). +- Images display and export +- AS2: Exporting selection +- Progressbar during loading + +### Changed +- One merged window for AS1/2 and 3. +- Updated icons + +### Fixed +- AS3: xml attrib, switch in anonymous function (in AS2 too) + +## [1.1.0] - 2013-01-02 +### Added +- Checking for updates +- AS2: Exporting +- AS3: Decompiling whole scripts instead of just classes +- AS3: Exporting selected scripts +- AS3: Script search bar +- AS3: List of DoABCTags now has default "- all -" item +- AS3: Better imports, use namespaces +- AS3: XML related instructions +- AS3: Anonymous functions with names +- AS3: Better initialization of const values +- Logging exceptions to log.txt file + +### Fixed +- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops + +## [1.0.1] - 2012-12-26 +### Added +- AS3: Runtime namespace resolving +- AS3: Arguments variable +- AS3: Better recognizing Pre/Post Increments/Decrements +- AS3: Better declarations + +### Fixed +- AS3: Fixed static variables + +## [1.0.0] - 2012-12-24 +### Added +- Support for LZMA compressed files +- AS3: Detecting local register types for declaration. +- AS3: Displaying inline functions +- AS3: Last save/open dir is remembered +- AS3: Better usage detection for multinames +- AS3: Commandline arguments for exporting +- AS3: Better chained assignments +- AS2: FSCommand2 instruction support +- Proxy: Mimetype application/octet-stream added +- Added executable for Windows users. + +### Changed +- AS3: GUI - Constants tab moved to the top +- AS3: Deobfuscation is now optional, can be accessed via menu + +### Fixed +- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) +- Other minor fixes + +## [beta 1] - 2011-07-30 +### Added +- AS3: Automatic computing method body parameters (EXPERIMENTAL) +- AS3: Editing return type of methods +- AS3: Editing type and default value for variables/constants (Slot/Const traits) +- AS1/2: Few enhancements +- About dialog + +### Changed +- Gui: Updated Icons + +### Fixed +- AS 1/2: Fixed large bug causing Ifs to not decompile properly +- Proxy: Some minor fixes + +## [alpha 10] - 2011-07-13 +### Added +- AS3:Highlighting actual line +- AS3:Completing instruction names via Ctrl+Space +- AS3:Editing method parameters, method body parameters via tab panel +- AS3:ByteCode minor_version 17 supported - decimal datatypes +- AS3:Local variables and method parameters take name from debug information if present +- AS3:Automatic renaming of classes/methods when obfuscated names +- AS3:Better error messages (When cannot decompile obfuscated code) + +### Fixed +- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) +- AS3:Hilighting fixes +- AS3:Fixed decrement/increment statements decompilation +- AS3:Decompiler now adds variable declarations on the beginning of decompiled method +- AS3:Try/catch statements fixed when debug information present +- AS3:Fixed for each statements +- AS3:Other minor fixes + +## [alpha 9] - 2011-07-02 +### Added +- AS3: Added disassembling of some new types of instructions +- AS3: Exporting source as PCode + +### Fixed +- AS3: Many other bugfixes... + +## [alpha 8] - 2010-09-19 +### Added +- AS3: Editing exceptions +- AS3: Finding usage of multinames from constant table + +### Changed +- AS1/2: Better GUI +- AS1/2: Better decompiling of Ifs, For..in + +## [alpha 7] - 2010-09-04 +### Added +- Initial public release + +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 +[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 +[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 +[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 +[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 +[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 +[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 +[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 +[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 +[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 +[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 +[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 +[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 +[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 +[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 +[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 +[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 +[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 +[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 +[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 +[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 +[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 +[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 +[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 +[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 +[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 +[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 +[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 +[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 +[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 +[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 +[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 +[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 +[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 +[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 +[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 +[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 +[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 +[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 +[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 +[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 +[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 +[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 +[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 +[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 +[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 +[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 +[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 +[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 +[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 +[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 +[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 +[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 +[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 +[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 +[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 +[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 +[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 +[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 +[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 +[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 +[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 +[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 +[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 +[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 +[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 +[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 +[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 +[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 +[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 +[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 +[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 +[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 +[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 +[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 +[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 +[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 +[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 +[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 +[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 +[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 +[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 +[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 +[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 +[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 +[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 +[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 +[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 +[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 +[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 +[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 +[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 +[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1156]: https://www.free-decompiler.com/flash/issues/1156 +[#1171]: https://www.free-decompiler.com/flash/issues/1171 +[#1170]: https://www.free-decompiler.com/flash/issues/1170 +[#1241]: https://www.free-decompiler.com/flash/issues/1241 +[#1162]: https://www.free-decompiler.com/flash/issues/1162 +[#1199]: https://www.free-decompiler.com/flash/issues/1199 +[#1151]: https://www.free-decompiler.com/flash/issues/1151 +[#1128]: https://www.free-decompiler.com/flash/issues/1128 +[#1163]: https://www.free-decompiler.com/flash/issues/1163 +[#1172]: https://www.free-decompiler.com/flash/issues/1172 +[#1174]: https://www.free-decompiler.com/flash/issues/1174 +[#1183]: https://www.free-decompiler.com/flash/issues/1183 +[#1193]: https://www.free-decompiler.com/flash/issues/1193 +[#1200]: https://www.free-decompiler.com/flash/issues/1200 +[#1198]: https://www.free-decompiler.com/flash/issues/1198 +[#1205]: https://www.free-decompiler.com/flash/issues/1205 +[#1194]: https://www.free-decompiler.com/flash/issues/1194 +[#1210]: https://www.free-decompiler.com/flash/issues/1210 +[#1217]: https://www.free-decompiler.com/flash/issues/1217 +[#1244]: https://www.free-decompiler.com/flash/issues/1244 +[#1247]: https://www.free-decompiler.com/flash/issues/1247 +[#1236]: https://www.free-decompiler.com/flash/issues/1236 +[#1251]: https://www.free-decompiler.com/flash/issues/1251 +[#1265]: https://www.free-decompiler.com/flash/issues/1265 +[#1268]: https://www.free-decompiler.com/flash/issues/1268 +[#1161]: https://www.free-decompiler.com/flash/issues/1161 +[#1118]: https://www.free-decompiler.com/flash/issues/1118 +[#409]: https://www.free-decompiler.com/flash/issues/409 +[#1132]: https://www.free-decompiler.com/flash/issues/1132 +[#1134]: https://www.free-decompiler.com/flash/issues/1134 +[#1121]: https://www.free-decompiler.com/flash/issues/1121 +[#1052]: https://www.free-decompiler.com/flash/issues/1052 +[#1145]: https://www.free-decompiler.com/flash/issues/1145 +[#758]: https://www.free-decompiler.com/flash/issues/758 +[#1096]: https://www.free-decompiler.com/flash/issues/1096 +[#1104]: https://www.free-decompiler.com/flash/issues/1104 +[#1107]: https://www.free-decompiler.com/flash/issues/1107 +[#1106]: https://www.free-decompiler.com/flash/issues/1106 +[#1113]: https://www.free-decompiler.com/flash/issues/1113 +[#1075]: https://www.free-decompiler.com/flash/issues/1075 +[#1127]: https://www.free-decompiler.com/flash/issues/1127 +[#1103]: https://www.free-decompiler.com/flash/issues/1103 +[#1133]: https://www.free-decompiler.com/flash/issues/1133 +[#1135]: https://www.free-decompiler.com/flash/issues/1135 +[#1138]: https://www.free-decompiler.com/flash/issues/1138 +[#1139]: https://www.free-decompiler.com/flash/issues/1139 +[#930]: https://www.free-decompiler.com/flash/issues/930 +[#1137]: https://www.free-decompiler.com/flash/issues/1137 +[#1144]: https://www.free-decompiler.com/flash/issues/1144 +[#1147]: https://www.free-decompiler.com/flash/issues/1147 +[#1148]: https://www.free-decompiler.com/flash/issues/1148 +[#1152]: https://www.free-decompiler.com/flash/issues/1152 +[#1154]: https://www.free-decompiler.com/flash/issues/1154 +[#116]: https://www.free-decompiler.com/flash/issues/116 +[#1070]: https://www.free-decompiler.com/flash/issues/1070 +[#1098]: https://www.free-decompiler.com/flash/issues/1098 +[#1033]: https://www.free-decompiler.com/flash/issues/1033 +[#1083]: https://www.free-decompiler.com/flash/issues/1083 +[#1091]: https://www.free-decompiler.com/flash/issues/1091 +[#1076]: https://www.free-decompiler.com/flash/issues/1076 +[#1068]: https://www.free-decompiler.com/flash/issues/1068 +[#1063]: https://www.free-decompiler.com/flash/issues/1063 +[#1019]: https://www.free-decompiler.com/flash/issues/1019 +[#1016]: https://www.free-decompiler.com/flash/issues/1016 +[#1010]: https://www.free-decompiler.com/flash/issues/1010 +[#1008]: https://www.free-decompiler.com/flash/issues/1008 +[#1004]: https://www.free-decompiler.com/flash/issues/1004 +[#933]: https://www.free-decompiler.com/flash/issues/933 +[#1062]: https://www.free-decompiler.com/flash/issues/1062 +[#418]: https://www.free-decompiler.com/flash/issues/418 +[#1047]: https://www.free-decompiler.com/flash/issues/1047 +[#812]: https://www.free-decompiler.com/flash/issues/812 +[#1056]: https://www.free-decompiler.com/flash/issues/1056 +[#1057]: https://www.free-decompiler.com/flash/issues/1057 +[#991]: https://www.free-decompiler.com/flash/issues/991 +[#689]: https://www.free-decompiler.com/flash/issues/689 +[#1060]: https://www.free-decompiler.com/flash/issues/1060 +[#1037]: https://www.free-decompiler.com/flash/issues/1037 +[#489]: https://www.free-decompiler.com/flash/issues/489 +[#1007]: https://www.free-decompiler.com/flash/issues/1007 +[#1044]: https://www.free-decompiler.com/flash/issues/1044 +[#947]: https://www.free-decompiler.com/flash/issues/947 +[#953]: https://www.free-decompiler.com/flash/issues/953 +[#954]: https://www.free-decompiler.com/flash/issues/954 +[#950]: https://www.free-decompiler.com/flash/issues/950 +[#945]: https://www.free-decompiler.com/flash/issues/945 +[#957]: https://www.free-decompiler.com/flash/issues/957 +[#956]: https://www.free-decompiler.com/flash/issues/956 +[#968]: https://www.free-decompiler.com/flash/issues/968 +[#978]: https://www.free-decompiler.com/flash/issues/978 +[#955]: https://www.free-decompiler.com/flash/issues/955 +[#966]: https://www.free-decompiler.com/flash/issues/966 +[#999]: https://www.free-decompiler.com/flash/issues/999 +[#1000]: https://www.free-decompiler.com/flash/issues/1000 +[#1017]: https://www.free-decompiler.com/flash/issues/1017 +[#1030]: https://www.free-decompiler.com/flash/issues/1030 +[#949]: https://www.free-decompiler.com/flash/issues/949 +[#944]: https://www.free-decompiler.com/flash/issues/944 +[#939]: https://www.free-decompiler.com/flash/issues/939 +[#942]: https://www.free-decompiler.com/flash/issues/942 +[#952]: https://www.free-decompiler.com/flash/issues/952 +[#858]: https://www.free-decompiler.com/flash/issues/858 +[#905]: https://www.free-decompiler.com/flash/issues/905 +[#920]: https://www.free-decompiler.com/flash/issues/920 +[#921]: https://www.free-decompiler.com/flash/issues/921 +[#924]: https://www.free-decompiler.com/flash/issues/924 +[#895]: https://www.free-decompiler.com/flash/issues/895 +[#884]: https://www.free-decompiler.com/flash/issues/884 +[#899]: https://www.free-decompiler.com/flash/issues/899 +[#903]: https://www.free-decompiler.com/flash/issues/903 +[#855]: https://www.free-decompiler.com/flash/issues/855 +[#850]: https://www.free-decompiler.com/flash/issues/850 +[#832]: https://www.free-decompiler.com/flash/issues/832 +[#904]: https://www.free-decompiler.com/flash/issues/904 +[#910]: https://www.free-decompiler.com/flash/issues/910 +[#922]: https://www.free-decompiler.com/flash/issues/922 +[#916]: https://www.free-decompiler.com/flash/issues/916 +[#938]: https://www.free-decompiler.com/flash/issues/938 +[#897]: https://www.free-decompiler.com/flash/issues/897 +[#470]: https://www.free-decompiler.com/flash/issues/470 +[#877]: https://www.free-decompiler.com/flash/issues/877 +[#878]: https://www.free-decompiler.com/flash/issues/878 +[#845]: https://www.free-decompiler.com/flash/issues/845 +[#883]: https://www.free-decompiler.com/flash/issues/883 +[#882]: https://www.free-decompiler.com/flash/issues/882 +[#760]: https://www.free-decompiler.com/flash/issues/760 +[#887]: https://www.free-decompiler.com/flash/issues/887 +[#842]: https://www.free-decompiler.com/flash/issues/842 +[#841]: https://www.free-decompiler.com/flash/issues/841 +[#772]: https://www.free-decompiler.com/flash/issues/772 +[#762]: https://www.free-decompiler.com/flash/issues/762 +[#862]: https://www.free-decompiler.com/flash/issues/862 +[#865]: https://www.free-decompiler.com/flash/issues/865 +[#613]: https://www.free-decompiler.com/flash/issues/613 +[#868]: https://www.free-decompiler.com/flash/issues/868 +[#713]: https://www.free-decompiler.com/flash/issues/713 +[#807]: https://www.free-decompiler.com/flash/issues/807 +[#728]: https://www.free-decompiler.com/flash/issues/728 +[#857]: https://www.free-decompiler.com/flash/issues/857 +[#860]: https://www.free-decompiler.com/flash/issues/860 +[#824]: https://www.free-decompiler.com/flash/issues/824 +[#809]: https://www.free-decompiler.com/flash/issues/809 +[#805]: https://www.free-decompiler.com/flash/issues/805 +[#825]: https://www.free-decompiler.com/flash/issues/825 +[#737]: https://www.free-decompiler.com/flash/issues/737 +[#350]: https://www.free-decompiler.com/flash/issues/350 +[#814]: https://www.free-decompiler.com/flash/issues/814 +[#816]: https://www.free-decompiler.com/flash/issues/816 +[#835]: https://www.free-decompiler.com/flash/issues/835 +[#836]: https://www.free-decompiler.com/flash/issues/836 +[#848]: https://www.free-decompiler.com/flash/issues/848 +[#817]: https://www.free-decompiler.com/flash/issues/817 +[#849]: https://www.free-decompiler.com/flash/issues/849 +[#852]: https://www.free-decompiler.com/flash/issues/852 +[#837]: https://www.free-decompiler.com/flash/issues/837 +[#811]: https://www.free-decompiler.com/flash/issues/811 +[#745]: https://www.free-decompiler.com/flash/issues/745 +[#803]: https://www.free-decompiler.com/flash/issues/803 +[#738]: https://www.free-decompiler.com/flash/issues/738 +[#742]: https://www.free-decompiler.com/flash/issues/742 +[#747]: https://www.free-decompiler.com/flash/issues/747 +[#749]: https://www.free-decompiler.com/flash/issues/749 +[#752]: https://www.free-decompiler.com/flash/issues/752 +[#753]: https://www.free-decompiler.com/flash/issues/753 +[#759]: https://www.free-decompiler.com/flash/issues/759 +[#766]: https://www.free-decompiler.com/flash/issues/766 +[#768]: https://www.free-decompiler.com/flash/issues/768 +[#773]: https://www.free-decompiler.com/flash/issues/773 +[#776]: https://www.free-decompiler.com/flash/issues/776 +[#783]: https://www.free-decompiler.com/flash/issues/783 +[#785]: https://www.free-decompiler.com/flash/issues/785 +[#787]: https://www.free-decompiler.com/flash/issues/787 +[#788]: https://www.free-decompiler.com/flash/issues/788 +[#790]: https://www.free-decompiler.com/flash/issues/790 +[#794]: https://www.free-decompiler.com/flash/issues/794 +[#798]: https://www.free-decompiler.com/flash/issues/798 +[#800]: https://www.free-decompiler.com/flash/issues/800 +[#676]: https://www.free-decompiler.com/flash/issues/676 +[#734]: https://www.free-decompiler.com/flash/issues/734 +[#687]: https://www.free-decompiler.com/flash/issues/687 +[#709]: https://www.free-decompiler.com/flash/issues/709 +[#732]: https://www.free-decompiler.com/flash/issues/732 +[#730]: https://www.free-decompiler.com/flash/issues/730 +[#735]: https://www.free-decompiler.com/flash/issues/735 +[#722]: https://www.free-decompiler.com/flash/issues/722 +[#725]: https://www.free-decompiler.com/flash/issues/725 +[#715]: https://www.free-decompiler.com/flash/issues/715 +[#635]: https://www.free-decompiler.com/flash/issues/635 +[#726]: https://www.free-decompiler.com/flash/issues/726 +[#716]: https://www.free-decompiler.com/flash/issues/716 +[#717]: https://www.free-decompiler.com/flash/issues/717 +[#718]: https://www.free-decompiler.com/flash/issues/718 +[#720]: https://www.free-decompiler.com/flash/issues/720 +[#719]: https://www.free-decompiler.com/flash/issues/719 +[#723]: https://www.free-decompiler.com/flash/issues/723 +[#288]: https://www.free-decompiler.com/flash/issues/288 +[#677]: https://www.free-decompiler.com/flash/issues/677 +[#389]: https://www.free-decompiler.com/flash/issues/389 +[#701]: https://www.free-decompiler.com/flash/issues/701 +[#707]: https://www.free-decompiler.com/flash/issues/707 +[#302]: https://www.free-decompiler.com/flash/issues/302 +[#685]: https://www.free-decompiler.com/flash/issues/685 +[#698]: https://www.free-decompiler.com/flash/issues/698 +[#710]: https://www.free-decompiler.com/flash/issues/710 +[#711]: https://www.free-decompiler.com/flash/issues/711 +[#681]: https://www.free-decompiler.com/flash/issues/681 +[#688]: https://www.free-decompiler.com/flash/issues/688 +[#691]: https://www.free-decompiler.com/flash/issues/691 +[#524]: https://www.free-decompiler.com/flash/issues/524 +[#663]: https://www.free-decompiler.com/flash/issues/663 +[#702]: https://www.free-decompiler.com/flash/issues/702 +[#539]: https://www.free-decompiler.com/flash/issues/539 +[#650]: https://www.free-decompiler.com/flash/issues/650 +[#680]: https://www.free-decompiler.com/flash/issues/680 +[#649]: https://www.free-decompiler.com/flash/issues/649 +[#656]: https://www.free-decompiler.com/flash/issues/656 +[#661]: https://www.free-decompiler.com/flash/issues/661 +[#664]: https://www.free-decompiler.com/flash/issues/664 +[#668]: https://www.free-decompiler.com/flash/issues/668 +[#674]: https://www.free-decompiler.com/flash/issues/674 +[#675]: https://www.free-decompiler.com/flash/issues/675 +[#632]: https://www.free-decompiler.com/flash/issues/632 +[#651]: https://www.free-decompiler.com/flash/issues/651 +[#678]: https://www.free-decompiler.com/flash/issues/678 +[#672]: https://www.free-decompiler.com/flash/issues/672 +[#684]: https://www.free-decompiler.com/flash/issues/684 +[#647]: https://www.free-decompiler.com/flash/issues/647 +[#648]: https://www.free-decompiler.com/flash/issues/648 +[#612]: https://www.free-decompiler.com/flash/issues/612 +[#623]: https://www.free-decompiler.com/flash/issues/623 +[#624]: https://www.free-decompiler.com/flash/issues/624 +[#627]: https://www.free-decompiler.com/flash/issues/627 +[#640]: https://www.free-decompiler.com/flash/issues/640 +[#595]: https://www.free-decompiler.com/flash/issues/595 +[#592]: https://www.free-decompiler.com/flash/issues/592 +[#585]: https://www.free-decompiler.com/flash/issues/585 +[#578]: https://www.free-decompiler.com/flash/issues/578 +[#501]: https://www.free-decompiler.com/flash/issues/501 +[#616]: https://www.free-decompiler.com/flash/issues/616 +[#559]: https://www.free-decompiler.com/flash/issues/559 +[#401]: https://www.free-decompiler.com/flash/issues/401 +[#593]: https://www.free-decompiler.com/flash/issues/593 +[#594]: https://www.free-decompiler.com/flash/issues/594 +[#579]: https://www.free-decompiler.com/flash/issues/579 +[#428]: https://www.free-decompiler.com/flash/issues/428 +[#337]: https://www.free-decompiler.com/flash/issues/337 +[#584]: https://www.free-decompiler.com/flash/issues/584 +[#576]: https://www.free-decompiler.com/flash/issues/576 +[#250]: https://www.free-decompiler.com/flash/issues/250 +[#580]: https://www.free-decompiler.com/flash/issues/580 +[#510]: https://www.free-decompiler.com/flash/issues/510 +[#583]: https://www.free-decompiler.com/flash/issues/583 +[#586]: https://www.free-decompiler.com/flash/issues/586 +[#574]: https://www.free-decompiler.com/flash/issues/574 +[#570]: https://www.free-decompiler.com/flash/issues/570 +[#563]: https://www.free-decompiler.com/flash/issues/563 +[#561]: https://www.free-decompiler.com/flash/issues/561 +[#509]: https://www.free-decompiler.com/flash/issues/509 +[#433]: https://www.free-decompiler.com/flash/issues/433 +[#557]: https://www.free-decompiler.com/flash/issues/557 +[#556]: https://www.free-decompiler.com/flash/issues/556 +[#504]: https://www.free-decompiler.com/flash/issues/504 +[#529]: https://www.free-decompiler.com/flash/issues/529 +[#538]: https://www.free-decompiler.com/flash/issues/538 +[#537]: https://www.free-decompiler.com/flash/issues/537 +[#540]: https://www.free-decompiler.com/flash/issues/540 +[#387]: https://www.free-decompiler.com/flash/issues/387 +[#552]: https://www.free-decompiler.com/flash/issues/552 +[#494]: https://www.free-decompiler.com/flash/issues/494 +[#513]: https://www.free-decompiler.com/flash/issues/513 +[#262]: https://www.free-decompiler.com/flash/issues/262 +[#499]: https://www.free-decompiler.com/flash/issues/499 +[#508]: https://www.free-decompiler.com/flash/issues/508 +[#305]: https://www.free-decompiler.com/flash/issues/305 +[#312]: https://www.free-decompiler.com/flash/issues/312 +[#503]: https://www.free-decompiler.com/flash/issues/503 +[#304]: https://www.free-decompiler.com/flash/issues/304 +[#306]: https://www.free-decompiler.com/flash/issues/306 +[#507]: https://www.free-decompiler.com/flash/issues/507 +[#424]: https://www.free-decompiler.com/flash/issues/424 +[#425]: https://www.free-decompiler.com/flash/issues/425 +[#478]: https://www.free-decompiler.com/flash/issues/478 +[#485]: https://www.free-decompiler.com/flash/issues/485 +[#517]: https://www.free-decompiler.com/flash/issues/517 +[#518]: https://www.free-decompiler.com/flash/issues/518 +[#361]: https://www.free-decompiler.com/flash/issues/361 +[#392]: https://www.free-decompiler.com/flash/issues/392 +[#516]: https://www.free-decompiler.com/flash/issues/516 +[#495]: https://www.free-decompiler.com/flash/issues/495 +[#496]: https://www.free-decompiler.com/flash/issues/496 +[#299]: https://www.free-decompiler.com/flash/issues/299 +[#303]: https://www.free-decompiler.com/flash/issues/303 +[#324]: https://www.free-decompiler.com/flash/issues/324 +[#346]: https://www.free-decompiler.com/flash/issues/346 +[#371]: https://www.free-decompiler.com/flash/issues/371 +[#426]: https://www.free-decompiler.com/flash/issues/426 +[#457]: https://www.free-decompiler.com/flash/issues/457 +[#458]: https://www.free-decompiler.com/flash/issues/458 +[#460]: https://www.free-decompiler.com/flash/issues/460 +[#462]: https://www.free-decompiler.com/flash/issues/462 +[#463]: https://www.free-decompiler.com/flash/issues/463 +[#465]: https://www.free-decompiler.com/flash/issues/465 +[#466]: https://www.free-decompiler.com/flash/issues/466 +[#369]: https://www.free-decompiler.com/flash/issues/369 +[#390]: https://www.free-decompiler.com/flash/issues/390 +[#453]: https://www.free-decompiler.com/flash/issues/453 +[#459]: https://www.free-decompiler.com/flash/issues/459 +[#461]: https://www.free-decompiler.com/flash/issues/461 +[#451]: https://www.free-decompiler.com/flash/issues/451 +[#454]: https://www.free-decompiler.com/flash/issues/454 +[#455]: https://www.free-decompiler.com/flash/issues/455 +[#474]: https://www.free-decompiler.com/flash/issues/474 +[#477]: https://www.free-decompiler.com/flash/issues/477 +[#481]: https://www.free-decompiler.com/flash/issues/481 +[#484]: https://www.free-decompiler.com/flash/issues/484 +[#493]: https://www.free-decompiler.com/flash/issues/493 +[#365]: https://www.free-decompiler.com/flash/issues/365 +[#366]: https://www.free-decompiler.com/flash/issues/366 +[#429]: https://www.free-decompiler.com/flash/issues/429 +[#447]: https://www.free-decompiler.com/flash/issues/447 +[#354]: https://www.free-decompiler.com/flash/issues/354 +[#438]: https://www.free-decompiler.com/flash/issues/438 +[#436]: https://www.free-decompiler.com/flash/issues/436 +[#446]: https://www.free-decompiler.com/flash/issues/446 +[#427]: https://www.free-decompiler.com/flash/issues/427 +[#405]: https://www.free-decompiler.com/flash/issues/405 +[#420]: https://www.free-decompiler.com/flash/issues/420 +[#421]: https://www.free-decompiler.com/flash/issues/421 +[#430]: https://www.free-decompiler.com/flash/issues/430 +[#397]: https://www.free-decompiler.com/flash/issues/397 +[#431]: https://www.free-decompiler.com/flash/issues/431 +[#169]: https://www.free-decompiler.com/flash/issues/169 +[#335]: https://www.free-decompiler.com/flash/issues/335 +[#404]: https://www.free-decompiler.com/flash/issues/404 +[#407]: https://www.free-decompiler.com/flash/issues/407 +[#399]: https://www.free-decompiler.com/flash/issues/399 +[#400]: https://www.free-decompiler.com/flash/issues/400 +[#398]: https://www.free-decompiler.com/flash/issues/398 +[#382]: https://www.free-decompiler.com/flash/issues/382 +[#396]: https://www.free-decompiler.com/flash/issues/396 +[#357]: https://www.free-decompiler.com/flash/issues/357 +[#391]: https://www.free-decompiler.com/flash/issues/391 +[#395]: https://www.free-decompiler.com/flash/issues/395 +[#334]: https://www.free-decompiler.com/flash/issues/334 +[#301]: https://www.free-decompiler.com/flash/issues/301 +[#383]: https://www.free-decompiler.com/flash/issues/383 +[#386]: https://www.free-decompiler.com/flash/issues/386 +[#367]: https://www.free-decompiler.com/flash/issues/367 +[#380]: https://www.free-decompiler.com/flash/issues/380 +[#292]: https://www.free-decompiler.com/flash/issues/292 +[#375]: https://www.free-decompiler.com/flash/issues/375 +[#378]: https://www.free-decompiler.com/flash/issues/378 +[#325]: https://www.free-decompiler.com/flash/issues/325 +[#210]: https://www.free-decompiler.com/flash/issues/210 +[#355]: https://www.free-decompiler.com/flash/issues/355 +[#313]: https://www.free-decompiler.com/flash/issues/313 +[#330]: https://www.free-decompiler.com/flash/issues/330 +[#332]: https://www.free-decompiler.com/flash/issues/332 +[#344]: https://www.free-decompiler.com/flash/issues/344 +[#295]: https://www.free-decompiler.com/flash/issues/295 +[#297]: https://www.free-decompiler.com/flash/issues/297 +[#307]: https://www.free-decompiler.com/flash/issues/307 +[#309]: https://www.free-decompiler.com/flash/issues/309 +[#310]: https://www.free-decompiler.com/flash/issues/310 +[#311]: https://www.free-decompiler.com/flash/issues/311 +[#327]: https://www.free-decompiler.com/flash/issues/327 +[#328]: https://www.free-decompiler.com/flash/issues/328 +[#333]: https://www.free-decompiler.com/flash/issues/333 +[#336]: https://www.free-decompiler.com/flash/issues/336 +[#338]: https://www.free-decompiler.com/flash/issues/338 +[#315]: https://www.free-decompiler.com/flash/issues/315 +[#123]: https://www.free-decompiler.com/flash/issues/123 +[#243]: https://www.free-decompiler.com/flash/issues/243 +[#326]: https://www.free-decompiler.com/flash/issues/326 +[#287]: https://www.free-decompiler.com/flash/issues/287 +[#290]: https://www.free-decompiler.com/flash/issues/290 +[#291]: https://www.free-decompiler.com/flash/issues/291 +[#294]: https://www.free-decompiler.com/flash/issues/294 +[#298]: https://www.free-decompiler.com/flash/issues/298 +[#296]: https://www.free-decompiler.com/flash/issues/296 +[#314]: https://www.free-decompiler.com/flash/issues/314 +[#316]: https://www.free-decompiler.com/flash/issues/316 +[#318]: https://www.free-decompiler.com/flash/issues/318 +[#319]: https://www.free-decompiler.com/flash/issues/319 +[#323]: https://www.free-decompiler.com/flash/issues/323 +[#223]: https://www.free-decompiler.com/flash/issues/223 +[#261]: https://www.free-decompiler.com/flash/issues/261 +[#269]: https://www.free-decompiler.com/flash/issues/269 +[#274]: https://www.free-decompiler.com/flash/issues/274 +[#275]: https://www.free-decompiler.com/flash/issues/275 +[#258]: https://www.free-decompiler.com/flash/issues/258 +[#267]: https://www.free-decompiler.com/flash/issues/267 +[#286]: https://www.free-decompiler.com/flash/issues/286 +[#233]: https://www.free-decompiler.com/flash/issues/233 +[#235]: https://www.free-decompiler.com/flash/issues/235 +[#263]: https://www.free-decompiler.com/flash/issues/263 +[#264]: https://www.free-decompiler.com/flash/issues/264 +[#265]: https://www.free-decompiler.com/flash/issues/265 +[#266]: https://www.free-decompiler.com/flash/issues/266 +[#281]: https://www.free-decompiler.com/flash/issues/281 +[#251]: https://www.free-decompiler.com/flash/issues/251 +[#257]: https://www.free-decompiler.com/flash/issues/257 +[#259]: https://www.free-decompiler.com/flash/issues/259 +[#260]: https://www.free-decompiler.com/flash/issues/260 +[#268]: https://www.free-decompiler.com/flash/issues/268 +[#272]: https://www.free-decompiler.com/flash/issues/272 +[#276]: https://www.free-decompiler.com/flash/issues/276 +[#220]: https://www.free-decompiler.com/flash/issues/220 +[#284]: https://www.free-decompiler.com/flash/issues/284 +[#232]: https://www.free-decompiler.com/flash/issues/232 +[#253]: https://www.free-decompiler.com/flash/issues/253 +[#137]: https://www.free-decompiler.com/flash/issues/137 +[#242]: https://www.free-decompiler.com/flash/issues/242 +[#244]: https://www.free-decompiler.com/flash/issues/244 +[#203]: https://www.free-decompiler.com/flash/issues/203 +[#225]: https://www.free-decompiler.com/flash/issues/225 +[#236]: https://www.free-decompiler.com/flash/issues/236 +[#245]: https://www.free-decompiler.com/flash/issues/245 +[#247]: https://www.free-decompiler.com/flash/issues/247 +[#248]: https://www.free-decompiler.com/flash/issues/248 +[#254]: https://www.free-decompiler.com/flash/issues/254 +[#255]: https://www.free-decompiler.com/flash/issues/255 +[#256]: https://www.free-decompiler.com/flash/issues/256 +[#241]: https://www.free-decompiler.com/flash/issues/241 +[#238]: https://www.free-decompiler.com/flash/issues/238 +[#239]: https://www.free-decompiler.com/flash/issues/239 +[#240]: https://www.free-decompiler.com/flash/issues/240 +[#237]: https://www.free-decompiler.com/flash/issues/237 +[#217]: https://www.free-decompiler.com/flash/issues/217 +[#219]: https://www.free-decompiler.com/flash/issues/219 +[#224]: https://www.free-decompiler.com/flash/issues/224 +[#121]: https://www.free-decompiler.com/flash/issues/121 +[#207]: https://www.free-decompiler.com/flash/issues/207 +[#151]: https://www.free-decompiler.com/flash/issues/151 +[#171]: https://www.free-decompiler.com/flash/issues/171 +[#206]: https://www.free-decompiler.com/flash/issues/206 +[#208]: https://www.free-decompiler.com/flash/issues/208 +[#209]: https://www.free-decompiler.com/flash/issues/209 +[#229]: https://www.free-decompiler.com/flash/issues/229 +[#213]: https://www.free-decompiler.com/flash/issues/213 +[#221]: https://www.free-decompiler.com/flash/issues/221 +[#226]: https://www.free-decompiler.com/flash/issues/226 +[#227]: https://www.free-decompiler.com/flash/issues/227 +[#230]: https://www.free-decompiler.com/flash/issues/230 +[#172]: https://www.free-decompiler.com/flash/issues/172 +[#174]: https://www.free-decompiler.com/flash/issues/174 +[#175]: https://www.free-decompiler.com/flash/issues/175 +[#212]: https://www.free-decompiler.com/flash/issues/212 +[#185]: https://www.free-decompiler.com/flash/issues/185 +[#186]: https://www.free-decompiler.com/flash/issues/186 +[#197]: https://www.free-decompiler.com/flash/issues/197 +[#216]: https://www.free-decompiler.com/flash/issues/216 +[#168]: https://www.free-decompiler.com/flash/issues/168 +[#176]: https://www.free-decompiler.com/flash/issues/176 +[#177]: https://www.free-decompiler.com/flash/issues/177 +[#202]: https://www.free-decompiler.com/flash/issues/202 +[#173]: https://www.free-decompiler.com/flash/issues/173 +[#190]: https://www.free-decompiler.com/flash/issues/190 +[#129]: https://www.free-decompiler.com/flash/issues/129 +[#153]: https://www.free-decompiler.com/flash/issues/153 +[#180]: https://www.free-decompiler.com/flash/issues/180 +[#136]: https://www.free-decompiler.com/flash/issues/136 +[#179]: https://www.free-decompiler.com/flash/issues/179 +[#144]: https://www.free-decompiler.com/flash/issues/144 +[#164]: https://www.free-decompiler.com/flash/issues/164 +[#167]: https://www.free-decompiler.com/flash/issues/167 +[#170]: https://www.free-decompiler.com/flash/issues/170 +[#178]: https://www.free-decompiler.com/flash/issues/178 +[#181]: https://www.free-decompiler.com/flash/issues/181 +[#182]: https://www.free-decompiler.com/flash/issues/182 +[#183]: https://www.free-decompiler.com/flash/issues/183 +[#184]: https://www.free-decompiler.com/flash/issues/184 +[#189]: https://www.free-decompiler.com/flash/issues/189 +[#191]: https://www.free-decompiler.com/flash/issues/191 +[#195]: https://www.free-decompiler.com/flash/issues/195 +[#196]: https://www.free-decompiler.com/flash/issues/196 +[#198]: https://www.free-decompiler.com/flash/issues/198 +[#200]: https://www.free-decompiler.com/flash/issues/200 +[#201]: https://www.free-decompiler.com/flash/issues/201 +[#166]: https://www.free-decompiler.com/flash/issues/166 +[#165]: https://www.free-decompiler.com/flash/issues/165 +[#63]: https://www.free-decompiler.com/flash/issues/63 +[#67]: https://www.free-decompiler.com/flash/issues/67 +[#117]: https://www.free-decompiler.com/flash/issues/117 +[#127]: https://www.free-decompiler.com/flash/issues/127 +[#134]: https://www.free-decompiler.com/flash/issues/134 +[#155]: https://www.free-decompiler.com/flash/issues/155 +[#142]: https://www.free-decompiler.com/flash/issues/142 +[#146]: https://www.free-decompiler.com/flash/issues/146 +[#130]: https://www.free-decompiler.com/flash/issues/130 +[#132]: https://www.free-decompiler.com/flash/issues/132 +[#145]: https://www.free-decompiler.com/flash/issues/145 +[#147]: https://www.free-decompiler.com/flash/issues/147 +[#148]: https://www.free-decompiler.com/flash/issues/148 +[#152]: https://www.free-decompiler.com/flash/issues/152 +[#156]: https://www.free-decompiler.com/flash/issues/156 +[#157]: https://www.free-decompiler.com/flash/issues/157 +[#158]: https://www.free-decompiler.com/flash/issues/158 +[#159]: https://www.free-decompiler.com/flash/issues/159 +[#160]: https://www.free-decompiler.com/flash/issues/160 +[#162]: https://www.free-decompiler.com/flash/issues/162 +[#163]: https://www.free-decompiler.com/flash/issues/163 +[#149]: https://www.free-decompiler.com/flash/issues/149 +[#150]: https://www.free-decompiler.com/flash/issues/150 +[#119]: https://www.free-decompiler.com/flash/issues/119 +[#101]: https://www.free-decompiler.com/flash/issues/101 +[#114]: https://www.free-decompiler.com/flash/issues/114 +[#135]: https://www.free-decompiler.com/flash/issues/135 +[#141]: https://www.free-decompiler.com/flash/issues/141 +[#102]: https://www.free-decompiler.com/flash/issues/102 +[#124]: https://www.free-decompiler.com/flash/issues/124 +[#128]: https://www.free-decompiler.com/flash/issues/128 +[#131]: https://www.free-decompiler.com/flash/issues/131 +[#104]: https://www.free-decompiler.com/flash/issues/104 +[#113]: https://www.free-decompiler.com/flash/issues/113 +[#133]: https://www.free-decompiler.com/flash/issues/133 +[#140]: https://www.free-decompiler.com/flash/issues/140 +[#108]: https://www.free-decompiler.com/flash/issues/108 +[#105]: https://www.free-decompiler.com/flash/issues/105 +[#109]: https://www.free-decompiler.com/flash/issues/109 +[#106]: https://www.free-decompiler.com/flash/issues/106 +[#107]: https://www.free-decompiler.com/flash/issues/107 +[#110]: https://www.free-decompiler.com/flash/issues/110 +[#103]: https://www.free-decompiler.com/flash/issues/103 +[#111]: https://www.free-decompiler.com/flash/issues/111 +[#96]: https://www.free-decompiler.com/flash/issues/96 +[#98]: https://www.free-decompiler.com/flash/issues/98 +[#99]: https://www.free-decompiler.com/flash/issues/99 +[#100]: https://www.free-decompiler.com/flash/issues/100 +[#85]: https://www.free-decompiler.com/flash/issues/85 +[#79]: https://www.free-decompiler.com/flash/issues/79 +[#92]: https://www.free-decompiler.com/flash/issues/92 +[#93]: https://www.free-decompiler.com/flash/issues/93 +[#94]: https://www.free-decompiler.com/flash/issues/94 +[#95]: https://www.free-decompiler.com/flash/issues/95 +[#86]: https://www.free-decompiler.com/flash/issues/86 +[#87]: https://www.free-decompiler.com/flash/issues/87 +[#88]: https://www.free-decompiler.com/flash/issues/88 +[#89]: https://www.free-decompiler.com/flash/issues/89 +[#82]: https://www.free-decompiler.com/flash/issues/82 +[#78]: https://www.free-decompiler.com/flash/issues/78 +[#81]: https://www.free-decompiler.com/flash/issues/81 +[#84]: https://www.free-decompiler.com/flash/issues/84 +[#83]: https://www.free-decompiler.com/flash/issues/83 +[#65]: https://www.free-decompiler.com/flash/issues/65 +[#48]: https://www.free-decompiler.com/flash/issues/48 +[#53]: https://www.free-decompiler.com/flash/issues/53 +[#66]: https://www.free-decompiler.com/flash/issues/66 +[#68]: https://www.free-decompiler.com/flash/issues/68 +[#69]: https://www.free-decompiler.com/flash/issues/69 +[#75]: https://www.free-decompiler.com/flash/issues/75 +[#73]: https://www.free-decompiler.com/flash/issues/73 +[#62]: https://www.free-decompiler.com/flash/issues/62 +[#72]: https://www.free-decompiler.com/flash/issues/72 +[#64]: https://www.free-decompiler.com/flash/issues/64 +[#38]: https://www.free-decompiler.com/flash/issues/38 +[#56]: https://www.free-decompiler.com/flash/issues/56 +[#57]: https://www.free-decompiler.com/flash/issues/57 +[#58]: https://www.free-decompiler.com/flash/issues/58 +[#45]: https://www.free-decompiler.com/flash/issues/45 +[#50]: https://www.free-decompiler.com/flash/issues/50 +[#51]: https://www.free-decompiler.com/flash/issues/51 +[#52]: https://www.free-decompiler.com/flash/issues/52 +[#47]: https://www.free-decompiler.com/flash/issues/47 +[#42]: https://www.free-decompiler.com/flash/issues/42 +[#39]: https://www.free-decompiler.com/flash/issues/39 +[#40]: https://www.free-decompiler.com/flash/issues/40 +[#44]: https://www.free-decompiler.com/flash/issues/44 +[#36]: https://www.free-decompiler.com/flash/issues/36 +[#43]: https://www.free-decompiler.com/flash/issues/43 +[#46]: https://www.free-decompiler.com/flash/issues/46 +[#3]: https://www.free-decompiler.com/flash/issues/3 +[#37]: https://www.free-decompiler.com/flash/issues/37 +[#34]: https://www.free-decompiler.com/flash/issues/34 +[#35]: https://www.free-decompiler.com/flash/issues/35 +[#32]: https://www.free-decompiler.com/flash/issues/32 [#31]: https://www.free-decompiler.com/flash/issues/31 \ No newline at end of file diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java index 4321d7334..0a8050cf8 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/DecompilerPool.java @@ -1,182 +1,182 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash; - -import com.jpexs.decompiler.flash.abc.ScriptPack; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.ScriptInfo; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedText; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.tags.base.ASMSource; -import com.jpexs.helpers.ImmediateFuture; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class DecompilerPool { - - private final ThreadPoolExecutor executor; - - public DecompilerPool() { - int threadCount = Configuration.getParallelThreadCount(); - executor = new ThreadPoolExecutor(threadCount, threadCount, - 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>()); - } - - public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - writer.startFunction("!script"); - src.getActionScriptSource(writer, actions); - writer.endFunction(); - - HighlightedText result = new HighlightedText(writer); - SWF swf = src.getSwf(); - if (swf != null) { - swf.as2Cache.put(src, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { - Callable callable = new Callable() { - @Override - public HighlightedText call() throws Exception { - if (listener != null) { - listener.onStart(); - } - - int scriptIndex = pack.scriptIndex; - ScriptInfo script = null; - if (scriptIndex > -1) { - script = pack.abc.script_info.get(scriptIndex); - } - boolean parallel = Configuration.parallelSpeedUp.get(); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); - pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); - - HighlightedText result = new HighlightedText(writer); - SWF swf = pack.getSwf(); - if (swf != null) { - swf.as3Cache.put(pack, result); - } - - if (listener != null) { - listener.onComplete(result); - } - - return result; - } - }; - - return submit(callable); - } - - private Future submit(Callable callable) { - boolean parallel = Configuration.parallelSpeedUp.get(); - if (parallel) { - Future f = executor.submit(callable); - return f; - } else { - boolean cancelled = false; - Throwable throwable = null; - HighlightedText result = null; - try { - result = callable.call(); - } catch (InterruptedException ex) { - cancelled = true; - } catch (Exception ex) { - throwable = ex; - } - - return new ImmediateFuture<>(result, throwable, cancelled); - } - } - - public String getStat() { - return "core: " + executor.getCorePoolSize() - + " size: " + executor.getPoolSize() - + " largest: " + executor.getLargestPoolSize() - + " max: " + executor.getMaximumPoolSize() - + " active: " + executor.getActiveCount() - + " count: " + executor.getTaskCount() - + " completed: " + executor.getCompletedTaskCount(); - } - - public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { - Future future = submitTask(src, actions, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public HighlightedText decompile(ScriptPack pack) throws InterruptedException { - Future future = submitTask(pack, null); - try { - return future.get(); - } catch (InterruptedException ex) { - future.cancel(true); - throw ex; - } catch (ExecutionException ex) { - Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); - } - - return null; - } - - public void shutdown() throws InterruptedException { - executor.shutdown(); - if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.ScriptInfo; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.cache.ScriptDecompiledListener; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.helpers.ImmediateFuture; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class DecompilerPool { + + private final ThreadPoolExecutor executor; + + public DecompilerPool() { + int threadCount = Configuration.getParallelThreadCount(); + executor = new ThreadPoolExecutor(threadCount, threadCount, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>()); + } + + public Future submitTask(ASMSource src, ActionList actions, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + writer.startFunction("!script"); + src.getActionScriptSource(writer, actions); + writer.endFunction(); + + HighlightedText result = new HighlightedText(writer); + SWF swf = src.getSwf(); + if (swf != null) { + swf.as2Cache.put(src, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + public Future submitTask(ScriptPack pack, ScriptDecompiledListener listener) { + Callable callable = new Callable() { + @Override + public HighlightedText call() throws Exception { + if (listener != null) { + listener.onStart(); + } + + int scriptIndex = pack.scriptIndex; + ScriptInfo script = null; + if (scriptIndex > -1) { + script = pack.abc.script_info.get(scriptIndex); + } + boolean parallel = Configuration.parallelSpeedUp.get(); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), true); + pack.toSource(writer, script == null ? null : script.traits.traits, new ConvertData(), ScriptExportMode.AS, parallel); + + HighlightedText result = new HighlightedText(writer); + SWF swf = pack.getSwf(); + if (swf != null) { + swf.as3Cache.put(pack, result); + } + + if (listener != null) { + listener.onComplete(result); + } + + return result; + } + }; + + return submit(callable); + } + + private Future submit(Callable callable) { + boolean parallel = Configuration.parallelSpeedUp.get(); + if (parallel) { + Future f = executor.submit(callable); + return f; + } else { + boolean cancelled = false; + Throwable throwable = null; + HighlightedText result = null; + try { + result = callable.call(); + } catch (InterruptedException ex) { + cancelled = true; + } catch (Exception ex) { + throwable = ex; + } + + return new ImmediateFuture<>(result, throwable, cancelled); + } + } + + public String getStat() { + return "core: " + executor.getCorePoolSize() + + " size: " + executor.getPoolSize() + + " largest: " + executor.getLargestPoolSize() + + " max: " + executor.getMaximumPoolSize() + + " active: " + executor.getActiveCount() + + " count: " + executor.getTaskCount() + + " completed: " + executor.getCompletedTaskCount(); + } + + public HighlightedText decompile(ASMSource src, ActionList actions) throws InterruptedException { + Future future = submitTask(src, actions, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public HighlightedText decompile(ScriptPack pack) throws InterruptedException { + Future future = submitTask(pack, null); + try { + return future.get(); + } catch (InterruptedException ex) { + future.cancel(true); + throw ex; + } catch (ExecutionException ex) { + Logger.getLogger(DecompilerPool.class.getName()).log(Level.SEVERE, null, ex); + } + + return null; + } + + public void shutdown() throws InterruptedException { + executor.shutdown(); + if (!executor.awaitTermination(100, TimeUnit.SECONDS)) { + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java index 362c71b2e..9d68207f4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/commonshape/SVGExporter.java @@ -1,269 +1,269 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.commonshape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.helpers.Helper; -import java.awt.Color; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Stack; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import org.w3c.dom.Attr; -import org.w3c.dom.CDATASection; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * - * @author JPEXS - */ -public class SVGExporter { - - protected static final String sNamespace = "http://www.w3.org/2000/svg"; - - protected static final String xlinkNamespace = "http://www.w3.org/1999/xlink"; - - protected Document _svg; - - protected Element _svgDefs; - - protected CDATASection _svgStyle; - - protected Stack _svgGs = new Stack<>(); - - public List gradients; - - protected int lastPatternId; - - public Map exportedTags = new HashMap<>(); - - public Map> exportedChars = new HashMap<>(); - - private final Map lastIds = new HashMap<>(); - - private final HashSet fontFaces = new HashSet<>(); - - public boolean useTextTag = Configuration.textExportExportFontFace.get(); - - public SVGExporter(ExportRectangle bounds, double zoom) { - - DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); - try { - DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); - DOMImplementation impl = docBuilder.getDOMImplementation(); - DocumentType svgDocType = impl.createDocumentType("svg", "-//W3C//DTD SVG 1.0//EN", - "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); - _svg = impl.createDocument(sNamespace, "svg", svgDocType); - Element svgRoot = _svg.getDocumentElement(); - svgRoot.setAttribute("xmlns:xlink", xlinkNamespace); - if (bounds != null) { - svgRoot.setAttribute("width", (bounds.getWidth() / SWF.unitDivisor) + "px"); - svgRoot.setAttribute("height", (bounds.getHeight() / SWF.unitDivisor) + "px"); - createDefGroup(bounds, null, zoom); - } - } catch (ParserConfigurationException ex) { - Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); - } - gradients = new ArrayList<>(); - } - - private Element getDefs() { - if (_svgDefs == null) { - _svgDefs = _svg.createElement("defs"); - _svg.getDocumentElement().appendChild(_svgDefs); - } - return _svgDefs; - } - - private CDATASection getStyle() { - if (_svgStyle == null) { - Element style = _svg.createElement("style"); - _svgStyle = _svg.createCDATASection(""); - style.appendChild(_svgStyle); - getDefs().appendChild(style); - } - return _svgStyle; - } - - public final void createDefGroup(ExportRectangle bounds, String id) { - createDefGroup(bounds, id, 1); - } - - public final void createDefGroup(ExportRectangle bounds, String id, double zoom) { - Element g = _svg.createElement("g"); - if (bounds != null) { - Matrix mat = Matrix.getTranslateInstance(-bounds.xMin, -bounds.yMin); - mat.scale(zoom); - g.setAttribute("transform", mat.getSvgTransformationString(SWF.unitDivisor, 1)); - } - if (id != null) { - g.setAttribute("id", id); - } - if (_svgGs.size() == 0) { - _svg.getDocumentElement().appendChild(g); - } else { - getDefs().appendChild(g); - } - _svgGs.add(g); - } - - public boolean endGroup() { - Element g = _svgGs.pop(); - if (g.getChildNodes().getLength() == 0) { - g.getParentNode().removeChild(g); - return false; - } - - return true; - } - - public final Element createSubGroup(Matrix transform, String id) { - Element group = createSubGroup(id, "g"); - if (transform != null) { - group.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); - } - - return group; - } - - public final Element createClipPath(Matrix transform, String id) { - Element group = createSubGroup(id, "clipPath"); - Node parent = group.getParentNode(); - if (parent instanceof Element) { - Element parentElement = (Element) parent; - group.setAttribute("transform", parentElement.getAttribute("transform")); - } - return group; - } - - private Element createSubGroup(String id, String tagName) { - Element group = _svg.createElement(tagName); - if (id != null) { - group.setAttribute("id", id); - } - _svgGs.peek().appendChild(group); - _svgGs.add(group); - return group; - } - - public void addToGroup(Node newChild) { - _svgGs.peek().appendChild(newChild); - } - - public void addToDefs(Node newChild) { - getDefs().appendChild(newChild); - } - - public Element createElement(String tagName) { - return _svg.createElement(tagName); - } - - public String getSVG() { - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - StringWriter writer = new StringWriter(); - try { - Transformer transformer = transformerFactory.newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); - DOMSource source = new DOMSource(_svg); - StreamResult result = new StreamResult(writer); - transformer.transform(source, result); - } catch (TransformerException ex) { - Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); - } - return writer.toString(); - } - - public void setBackGroundColor(Color backGroundColor) { - Attr attr = _svg.createAttribute("style"); - attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); - } - - public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName) { - Element image = _svg.createElement("use"); - if (transform != null) { - image.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); - image.setAttribute("width", Double.toString(boundRect.getWidth() / (double) SWF.unitDivisor)); - image.setAttribute("height", Double.toString(boundRect.getHeight() / (double) SWF.unitDivisor)); - } - if (instanceName != null) { - image.setAttribute("id", instanceName); - } - image.setAttribute("xlink:href", "#" + href); - _svgGs.peek().appendChild(image); - return image; - } - - public void addStyle(String fontFace, byte[] data, FontExportMode mode) { - if (!fontFaces.contains(fontFace)) { - fontFaces.add(fontFace); - String base64Data = Helper.byteArrayToBase64String(data); - String value = getStyle().getTextContent(); - value += Helper.newLine; - value += " @font-face {" + Helper.newLine; - value += " font-family: \"" + fontFace + "\";" + Helper.newLine; - switch (mode) { - case TTF: - value += " src: url('data:font/truetype;base64," + base64Data + "') format(\"truetype\");" + Helper.newLine; - break; - case WOFF: - value += " src: url('data:font/woff;base64," + base64Data + "') format(\"woff\");" + Helper.newLine; - break; - } - value += " }" + Helper.newLine; - getStyle().setTextContent(value); - } - } - - public String getUniqueId(String prefix) { - Integer lastId = lastIds.get(prefix); - if (lastId == null) { - lastId = 0; - } else { - lastId++; - } - lastIds.put(prefix, lastId); - return prefix + lastId; - } - - protected static double roundPixels20(double pixels) { - return Math.round(pixels * 100) / 100.0; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.commonshape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.helpers.Helper; +import java.awt.Color; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Stack; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Attr; +import org.w3c.dom.CDATASection; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.DocumentType; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +/** + * + * @author JPEXS + */ +public class SVGExporter { + + protected static final String sNamespace = "http://www.w3.org/2000/svg"; + + protected static final String xlinkNamespace = "http://www.w3.org/1999/xlink"; + + protected Document _svg; + + protected Element _svgDefs; + + protected CDATASection _svgStyle; + + protected Stack _svgGs = new Stack<>(); + + public List gradients; + + protected int lastPatternId; + + public Map exportedTags = new HashMap<>(); + + public Map> exportedChars = new HashMap<>(); + + private final Map lastIds = new HashMap<>(); + + private final HashSet fontFaces = new HashSet<>(); + + public boolean useTextTag = Configuration.textExportExportFontFace.get(); + + public SVGExporter(ExportRectangle bounds, double zoom) { + + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + try { + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + DOMImplementation impl = docBuilder.getDOMImplementation(); + DocumentType svgDocType = impl.createDocumentType("svg", "-//W3C//DTD SVG 1.0//EN", + "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); + _svg = impl.createDocument(sNamespace, "svg", svgDocType); + Element svgRoot = _svg.getDocumentElement(); + svgRoot.setAttribute("xmlns:xlink", xlinkNamespace); + if (bounds != null) { + svgRoot.setAttribute("width", (bounds.getWidth() / SWF.unitDivisor) + "px"); + svgRoot.setAttribute("height", (bounds.getHeight() / SWF.unitDivisor) + "px"); + createDefGroup(bounds, null, zoom); + } + } catch (ParserConfigurationException ex) { + Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); + } + gradients = new ArrayList<>(); + } + + private Element getDefs() { + if (_svgDefs == null) { + _svgDefs = _svg.createElement("defs"); + _svg.getDocumentElement().appendChild(_svgDefs); + } + return _svgDefs; + } + + private CDATASection getStyle() { + if (_svgStyle == null) { + Element style = _svg.createElement("style"); + _svgStyle = _svg.createCDATASection(""); + style.appendChild(_svgStyle); + getDefs().appendChild(style); + } + return _svgStyle; + } + + public final void createDefGroup(ExportRectangle bounds, String id) { + createDefGroup(bounds, id, 1); + } + + public final void createDefGroup(ExportRectangle bounds, String id, double zoom) { + Element g = _svg.createElement("g"); + if (bounds != null) { + Matrix mat = Matrix.getTranslateInstance(-bounds.xMin, -bounds.yMin); + mat.scale(zoom); + g.setAttribute("transform", mat.getSvgTransformationString(SWF.unitDivisor, 1)); + } + if (id != null) { + g.setAttribute("id", id); + } + if (_svgGs.size() == 0) { + _svg.getDocumentElement().appendChild(g); + } else { + getDefs().appendChild(g); + } + _svgGs.add(g); + } + + public boolean endGroup() { + Element g = _svgGs.pop(); + if (g.getChildNodes().getLength() == 0) { + g.getParentNode().removeChild(g); + return false; + } + + return true; + } + + public final Element createSubGroup(Matrix transform, String id) { + Element group = createSubGroup(id, "g"); + if (transform != null) { + group.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); + } + + return group; + } + + public final Element createClipPath(Matrix transform, String id) { + Element group = createSubGroup(id, "clipPath"); + Node parent = group.getParentNode(); + if (parent instanceof Element) { + Element parentElement = (Element) parent; + group.setAttribute("transform", parentElement.getAttribute("transform")); + } + return group; + } + + private Element createSubGroup(String id, String tagName) { + Element group = _svg.createElement(tagName); + if (id != null) { + group.setAttribute("id", id); + } + _svgGs.peek().appendChild(group); + _svgGs.add(group); + return group; + } + + public void addToGroup(Node newChild) { + _svgGs.peek().appendChild(newChild); + } + + public void addToDefs(Node newChild) { + getDefs().appendChild(newChild); + } + + public Element createElement(String tagName) { + return _svg.createElement(tagName); + } + + public String getSVG() { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + StringWriter writer = new StringWriter(); + try { + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); + DOMSource source = new DOMSource(_svg); + StreamResult result = new StreamResult(writer); + transformer.transform(source, result); + } catch (TransformerException ex) { + Logger.getLogger(SVGExporter.class.getName()).log(Level.SEVERE, null, ex); + } + return writer.toString(); + } + + public void setBackGroundColor(Color backGroundColor) { + Attr attr = _svg.createAttribute("style"); + attr.setValue("background: " + new RGBA(backGroundColor).toHexARGB()); + } + + public Element addUse(Matrix transform, RECT boundRect, String href, String instanceName) { + Element image = _svg.createElement("use"); + if (transform != null) { + image.setAttribute("transform", transform.getSvgTransformationString(SWF.unitDivisor, 1)); + image.setAttribute("width", Double.toString(boundRect.getWidth() / (double) SWF.unitDivisor)); + image.setAttribute("height", Double.toString(boundRect.getHeight() / (double) SWF.unitDivisor)); + } + if (instanceName != null) { + image.setAttribute("id", instanceName); + } + image.setAttribute("xlink:href", "#" + href); + _svgGs.peek().appendChild(image); + return image; + } + + public void addStyle(String fontFace, byte[] data, FontExportMode mode) { + if (!fontFaces.contains(fontFace)) { + fontFaces.add(fontFace); + String base64Data = Helper.byteArrayToBase64String(data); + String value = getStyle().getTextContent(); + value += Helper.newLine; + value += " @font-face {" + Helper.newLine; + value += " font-family: \"" + fontFace + "\";" + Helper.newLine; + switch (mode) { + case TTF: + value += " src: url('data:font/truetype;base64," + base64Data + "') format(\"truetype\");" + Helper.newLine; + break; + case WOFF: + value += " src: url('data:font/woff;base64," + base64Data + "') format(\"woff\");" + Helper.newLine; + break; + } + value += " }" + Helper.newLine; + getStyle().setTextContent(value); + } + } + + public String getUniqueId(String prefix) { + Integer lastId = lastIds.get(prefix); + if (lastId == null) { + lastId = 0; + } else { + lastId++; + } + lastIds.put(prefix, lastId); + return prefix + lastId; + } + + protected static double roundPixels20(double pixels) { + return Math.round(pixels * 100) / 100.0; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java index 72680fc31..947f003ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/morphshape/SVGMorphShapeExporter.java @@ -1,463 +1,463 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.morphshape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.GRADIENT; -import com.jpexs.decompiler.flash.types.GRADRECORD; -import com.jpexs.decompiler.flash.types.LINESTYLE2; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS, Claus Wahlers - */ -public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { - - protected Element path; - - protected int id; - - protected int lastPatternId; - - private final Color defaultColor; - - private final SWF swf; - - private final SVGExporter exporter; - - public SVGMorphShapeExporter(SWF swf, SHAPE shape, SHAPE endShape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { - super(shape, endShape, colorTransform, zoom); - this.swf = swf; - this.id = id; - this.defaultColor = defaultColor; - this.exporter = exporter; - } - - @Override - public void beginFill(RGB color, RGB colorEnd) { - if (color == null) { - color = new RGB(defaultColor == null ? Color.black : defaultColor); - } - if (colorEnd == null) { - colorEnd = new RGB(defaultColor == null ? Color.black : defaultColor); - } - finalizePath(); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", color.toHexRGB()); - path.setAttribute("fill-rule", "evenodd"); - path.appendChild(createAnimateElement("fill", color.toHexRGB(), colorEnd.toHexRGB())); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - } - - @Override - public void beginGradientFill(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { - finalizePath(); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", "url(#gradient" + id + ")"); - path.setAttribute("fill-rule", "evenodd"); - exporter.addToDefs(gradient); - } - - @Override - public void beginBitmapFill(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform) { - finalizePath(); - ImageTag image = swf.getImage(bitmapId); - if (image != null) { - SerializableImage img = image.getImageCached(); - if (img != null) { - if (colorTransform != null) { - colorTransform.apply(img); - } - - int width = img.getWidth(); - int height = img.getHeight(); - lastPatternId++; - String patternId = "PatternID_" + id + "_" + lastPatternId; - ImageFormat format = image.getImageFormat(); - byte[] imageData = Helper.readStream(image.getImageData()); - String base64ImgData = Helper.byteArrayToBase64String(imageData); - path.setAttribute("style", "fill:url(#" + patternId + ")"); - Element pattern = exporter.createElement("pattern"); - pattern.setAttribute("id", patternId); - pattern.setAttribute("patternUnits", "userSpaceOnUse"); - pattern.setAttribute("overflow", "visible"); - pattern.setAttribute("width", "" + width); - pattern.setAttribute("height", "" + height); - pattern.setAttribute("viewBox", "0 0 " + width + " " + height); - if (matrix != null) { - matrix = matrix.clone(); - matrix.rotateSkew0 *= zoom / SWF.unitDivisor; - matrix.rotateSkew1 *= zoom / SWF.unitDivisor; - matrix.scaleX *= zoom / SWF.unitDivisor; - matrix.scaleY *= zoom / SWF.unitDivisor; - matrixEnd = matrixEnd.clone(); - matrixEnd.rotateSkew0 *= zoom / SWF.unitDivisor; - matrixEnd.rotateSkew1 *= zoom / SWF.unitDivisor; - matrixEnd.scaleX *= zoom / SWF.unitDivisor; - matrixEnd.scaleY *= zoom / SWF.unitDivisor; - addMatrixAnimation(pattern, "patternTransform", matrix, matrixEnd); - } - Element imageElement = exporter.createElement("image"); - imageElement.setAttribute("width", "" + width); - imageElement.setAttribute("height", "" + height); - imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); - pattern.appendChild(imageElement); - exporter.addToGroup(pattern); - } - } - } - - @Override - public void lineStyle(double thickness, double thicknessEnd, RGB color, RGB colorEnd, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { - finalizePath(); - thickness *= zoom / SWF.unitDivisor; - thicknessEnd *= zoom / SWF.unitDivisor; - path.setAttribute("fill", "none"); - if (color != null) { - path.setAttribute("stroke", color.toHexRGB()); - path.appendChild(createAnimateElement("stroke", color.toHexRGB(), colorEnd.toHexRGB())); - } - path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); - path.appendChild(createAnimateElement("stroke-width", thickness, thicknessEnd)); - - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - switch (startCaps) { - case LINESTYLE2.NO_CAP: - path.setAttribute("stroke-linecap", "butt"); - break; - case LINESTYLE2.SQUARE_CAP: - path.setAttribute("stroke-linecap", "square"); - break; - default: - path.setAttribute("stroke-linecap", "round"); - break; - } - switch (joints) { - case LINESTYLE2.BEVEL_JOIN: - path.setAttribute("stroke-linejoin", "bevel"); - break; - case LINESTYLE2.ROUND_JOIN: - path.setAttribute("stroke-linejoin", "round"); - break; - default: - path.setAttribute("stroke-linejoin", "miter"); - if (miterLimit >= 1 && miterLimit != 4f) { - path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); - } - break; - } - } - - @Override - public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { - path.removeAttribute("stroke-opacity"); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "url(#gradient" + id + ")"); - path.setAttribute("fill", "none"); - exporter.addToDefs(gradient); - } - - private Element createAnimateElement(String attributeName, Object startValue, Object endValue) { - Element animate = exporter.createElement("animate"); - animate.setAttribute("dur", "2s"); // todo - animate.setAttribute("repeatCount", "indefinite"); - animate.setAttribute("attributeName", attributeName); - animate.setAttribute("values", startValue + ";" + endValue); - return animate; - } - - @Override - protected void finalizePath() { - if (path != null && pathData != null && pathData.length() > 0) { - path.setAttribute("d", pathData.toString().trim()); - path.appendChild(createAnimateElement("d", pathData.toString().trim(), pathDataEnd.toString().trim())); - exporter.addToGroup(path); - } - path = exporter.createElement("path"); - super.finalizePath(); - } - - private void addMatrixAnimation(Element element, String attribute, Matrix matrix, Matrix matrixEnd) { - final int animationLength = 2; // todo - final String animationLengthStr = animationLength + "s"; - - element.setAttribute(attribute, matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); - - // QR decomposition - double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); - double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); - double a = matrix.scaleX; - double b = matrix.rotateSkew0; - double c = matrix.rotateSkew1; - double d = matrix.scaleY; - double r = Math.sqrt(a * a + b * b); - double det = a * d - b * c; - double rotate = roundPixels400(Math.signum(b) * Math.acos(a / r) * 180 / Math.PI); - double scaleX = roundPixels400(r); - double scaleY = roundPixels400(det / r); - double skewX = roundPixels400(Math.atan((a * c + b * d) / (r * r)) * 180 / Math.PI); - - double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); - double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); - a = matrixEnd.scaleX; - b = matrixEnd.rotateSkew0; - c = matrixEnd.rotateSkew1; - d = matrixEnd.scaleY; - double rEnd = Math.sqrt(a * a + b * b); - double detEnd = a * d - b * c; - double rotateEnd = roundPixels400(Math.signum(b) * Math.acos(a / rEnd) * 180 / Math.PI); - double scaleXEnd = roundPixels400(rEnd); - double scaleYEnd = roundPixels400(detEnd / rEnd); - double skewXEnd = roundPixels400(Math.atan((a * c + b * d) / (rEnd * rEnd)) * 180 / Math.PI); - - Element animateClear = exporter.createElement("animateTransform"); - animateClear.setAttribute("dur", animationLengthStr); - animateClear.setAttribute("repeatCount", "indefinite"); - animateClear.setAttribute("attributeName", attribute); - animateClear.setAttribute("type", "scale"); - animateClear.setAttribute("additive", "replace"); - animateClear.setAttribute("from", "1"); - animateClear.setAttribute("to", "1"); - - Element animateTranslate = exporter.createElement("animateTransform"); - animateTranslate.setAttribute("dur", animationLengthStr); - animateTranslate.setAttribute("repeatCount", "indefinite"); - animateTranslate.setAttribute("attributeName", attribute); - animateTranslate.setAttribute("type", "translate"); - animateTranslate.setAttribute("additive", "sum"); - animateTranslate.setAttribute("from", translateX + " " + translateY); - animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); - - Element animateRotate = exporter.createElement("animateTransform"); - animateRotate.setAttribute("dur", animationLengthStr); - animateRotate.setAttribute("repeatCount", "indefinite"); - animateRotate.setAttribute("attributeName", attribute); - animateRotate.setAttribute("type", "rotate"); - animateRotate.setAttribute("additive", "sum"); - animateRotate.setAttribute("from", Double.toString(rotate)); - animateRotate.setAttribute("to", Double.toString(rotateEnd)); - - Element animateScale = exporter.createElement("animateTransform"); - animateScale.setAttribute("dur", animationLengthStr); - animateScale.setAttribute("repeatCount", "indefinite"); - animateScale.setAttribute("attributeName", attribute); - animateScale.setAttribute("type", "scale"); - animateScale.setAttribute("additive", "sum"); - animateScale.setAttribute("from", scaleX + " " + scaleY); - animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); - - Element animateSkewX = exporter.createElement("animateTransform"); - animateSkewX.setAttribute("dur", animationLengthStr); - animateSkewX.setAttribute("repeatCount", "indefinite"); - animateSkewX.setAttribute("attributeName", attribute); - animateSkewX.setAttribute("type", "skewX"); - animateSkewX.setAttribute("additive", "sum"); - animateSkewX.setAttribute("from", Double.toString(skewX)); - animateSkewX.setAttribute("to", Double.toString(skewXEnd)); - - element.appendChild(animateClear); - element.appendChild(animateTranslate); - element.appendChild(animateRotate); - element.appendChild(animateScale); - element.appendChild(animateSkewX); - - /* - // LDU decomposition - - double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); - double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); - double a = matrix.scaleX; - double b = matrix.rotateSkew0; - double c = matrix.rotateSkew1; - double d = matrix.scaleY; - double det = a * d - b * c; - double skewY = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); - double scaleX = roundPixels400(a); - double scaleY = roundPixels400(det / a); - double skewX = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); - - double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); - double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); - a = matrixEnd.scaleX; - b = matrixEnd.rotateSkew0; - c = matrixEnd.rotateSkew1; - d = matrixEnd.scaleY; - double detEnd = a * d - b * c; - double skewYEnd = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); - double scaleXEnd = roundPixels400(a); - double scaleYEnd = roundPixels400(detEnd / a); - double skewXEnd = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); - - Element animateClear = exporter.createElement("animateTransform"); - animateClear.setAttribute("dur", animationLengthStr); - animateClear.setAttribute("repeatCount", "indefinite"); - animateClear.setAttribute("attributeName", attribute); - animateClear.setAttribute("type", "scale"); - animateClear.setAttribute("additive", "replace"); - animateClear.setAttribute("from", "1"); - animateClear.setAttribute("to", "1"); - - Element animateTranslate = exporter.createElement("animateTransform"); - animateTranslate.setAttribute("dur", animationLengthStr); - animateTranslate.setAttribute("repeatCount", "indefinite"); - animateTranslate.setAttribute("attributeName", attribute); - animateTranslate.setAttribute("type", "translate"); - animateTranslate.setAttribute("additive", "sum"); - animateTranslate.setAttribute("from", translateX + " " + translateY); - animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); - - Element animateSkewY = exporter.createElement("animateTransform"); - animateSkewY.setAttribute("dur", animationLengthStr); - animateSkewY.setAttribute("repeatCount", "indefinite"); - animateSkewY.setAttribute("attributeName", attribute); - animateSkewY.setAttribute("type", "skewY"); - animateSkewY.setAttribute("additive", "sum"); - animateSkewY.setAttribute("from", Double.toString(skewY)); - animateSkewY.setAttribute("to", Double.toString(skewYEnd)); - - Element animateScale = exporter.createElement("animateTransform"); - animateScale.setAttribute("dur", animationLengthStr); - animateScale.setAttribute("repeatCount", "indefinite"); - animateScale.setAttribute("attributeName", attribute); - animateScale.setAttribute("type", "scale"); - animateScale.setAttribute("additive", "sum"); - animateScale.setAttribute("from", scaleX + " " + scaleY); - animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); - - Element animateSkewX = exporter.createElement("animateTransform"); - animateSkewX.setAttribute("dur", animationLengthStr); - animateSkewX.setAttribute("repeatCount", "indefinite"); - animateSkewX.setAttribute("attributeName", attribute); - animateSkewX.setAttribute("type", "skewX"); - animateSkewX.setAttribute("additive", "sum"); - animateSkewX.setAttribute("from", Double.toString(skewX)); - animateSkewX.setAttribute("to", Double.toString(skewXEnd)); - - element.appendChild(animateClear); - element.appendChild(animateTranslate); - element.appendChild(animateSkewY); - element.appendChild(animateScale); - element.appendChild(animateSkewX);*/ - } - - protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio) { - gradient.setAttribute("gradientUnits", "userSpaceOnUse"); - if (type == FILLSTYLE.LINEAR_GRADIENT) { - gradient.setAttribute("x1", "-819.2"); - gradient.setAttribute("x2", "819.2"); - } else { - gradient.setAttribute("r", "819.2"); - gradient.setAttribute("cx", "0"); - gradient.setAttribute("cy", "0"); - if (focalPointRatio != 0) { - gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); - gradient.setAttribute("fy", "0"); - } - } - switch (spreadMethod) { - case GRADIENT.SPREAD_PAD_MODE: - gradient.setAttribute("spreadMethod", "pad"); - break; - case GRADIENT.SPREAD_REFLECT_MODE: - gradient.setAttribute("spreadMethod", "reflect"); - break; - case GRADIENT.SPREAD_REPEAT_MODE: - gradient.setAttribute("spreadMethod", "repeat"); - break; - } - if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { - gradient.setAttribute("color-interpolation", "linearRGB"); - } - if (matrix != null) { - addMatrixAnimation(gradient, "gradientTransform", matrix, matrixEnd); - } - for (int i = 0; i < gradientRecords.length; i++) { - GRADRECORD record = gradientRecords[i]; - GRADRECORD recordEnd = gradientRecordsEnd[i]; - Element gradientEntry = exporter.createElement("stop"); - gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); - gradientEntry.appendChild(createAnimateElement("offset", record.ratio / 255.0, recordEnd.ratio / 255.0)); - RGB color = record.color; - RGB colorEnd = recordEnd.color; - //if(colors.get(i) != 0) { - gradientEntry.setAttribute("stop-color", color.toHexRGB()); - gradientEntry.appendChild(createAnimateElement("stop-color", color.toHexRGB(), colorEnd.toHexRGB())); - //} - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); - } - RGBA colorAEnd = (RGBA) colorEnd; - gradientEntry.appendChild(createAnimateElement("stop-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); - } - gradient.appendChild(gradientEntry); - } - } - - protected double roundPixels400(double pixels) { - return Math.round(pixels * 10000) / 10000.0; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.morphshape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.GRADIENT; +import com.jpexs.decompiler.flash.types.GRADRECORD; +import com.jpexs.decompiler.flash.types.LINESTYLE2; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS, Claus Wahlers + */ +public class SVGMorphShapeExporter extends DefaultSVGMorphShapeExporter { + + protected Element path; + + protected int id; + + protected int lastPatternId; + + private final Color defaultColor; + + private final SWF swf; + + private final SVGExporter exporter; + + public SVGMorphShapeExporter(SWF swf, SHAPE shape, SHAPE endShape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { + super(shape, endShape, colorTransform, zoom); + this.swf = swf; + this.id = id; + this.defaultColor = defaultColor; + this.exporter = exporter; + } + + @Override + public void beginFill(RGB color, RGB colorEnd) { + if (color == null) { + color = new RGB(defaultColor == null ? Color.black : defaultColor); + } + if (colorEnd == null) { + colorEnd = new RGB(defaultColor == null ? Color.black : defaultColor); + } + finalizePath(); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", color.toHexRGB()); + path.setAttribute("fill-rule", "evenodd"); + path.appendChild(createAnimateElement("fill", color.toHexRGB(), colorEnd.toHexRGB())); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + } + + @Override + public void beginGradientFill(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { + finalizePath(); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", "url(#gradient" + id + ")"); + path.setAttribute("fill-rule", "evenodd"); + exporter.addToDefs(gradient); + } + + @Override + public void beginBitmapFill(int bitmapId, Matrix matrix, Matrix matrixEnd, boolean repeat, boolean smooth, ColorTransform colorTransform) { + finalizePath(); + ImageTag image = swf.getImage(bitmapId); + if (image != null) { + SerializableImage img = image.getImageCached(); + if (img != null) { + if (colorTransform != null) { + colorTransform.apply(img); + } + + int width = img.getWidth(); + int height = img.getHeight(); + lastPatternId++; + String patternId = "PatternID_" + id + "_" + lastPatternId; + ImageFormat format = image.getImageFormat(); + byte[] imageData = Helper.readStream(image.getImageData()); + String base64ImgData = Helper.byteArrayToBase64String(imageData); + path.setAttribute("style", "fill:url(#" + patternId + ")"); + Element pattern = exporter.createElement("pattern"); + pattern.setAttribute("id", patternId); + pattern.setAttribute("patternUnits", "userSpaceOnUse"); + pattern.setAttribute("overflow", "visible"); + pattern.setAttribute("width", "" + width); + pattern.setAttribute("height", "" + height); + pattern.setAttribute("viewBox", "0 0 " + width + " " + height); + if (matrix != null) { + matrix = matrix.clone(); + matrix.rotateSkew0 *= zoom / SWF.unitDivisor; + matrix.rotateSkew1 *= zoom / SWF.unitDivisor; + matrix.scaleX *= zoom / SWF.unitDivisor; + matrix.scaleY *= zoom / SWF.unitDivisor; + matrixEnd = matrixEnd.clone(); + matrixEnd.rotateSkew0 *= zoom / SWF.unitDivisor; + matrixEnd.rotateSkew1 *= zoom / SWF.unitDivisor; + matrixEnd.scaleX *= zoom / SWF.unitDivisor; + matrixEnd.scaleY *= zoom / SWF.unitDivisor; + addMatrixAnimation(pattern, "patternTransform", matrix, matrixEnd); + } + Element imageElement = exporter.createElement("image"); + imageElement.setAttribute("width", "" + width); + imageElement.setAttribute("height", "" + height); + imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); + pattern.appendChild(imageElement); + exporter.addToGroup(pattern); + } + } + } + + @Override + public void lineStyle(double thickness, double thicknessEnd, RGB color, RGB colorEnd, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { + finalizePath(); + thickness *= zoom / SWF.unitDivisor; + thicknessEnd *= zoom / SWF.unitDivisor; + path.setAttribute("fill", "none"); + if (color != null) { + path.setAttribute("stroke", color.toHexRGB()); + path.appendChild(createAnimateElement("stroke", color.toHexRGB(), colorEnd.toHexRGB())); + } + path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); + path.appendChild(createAnimateElement("stroke-width", thickness, thicknessEnd)); + + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + path.appendChild(createAnimateElement("fill-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + switch (startCaps) { + case LINESTYLE2.NO_CAP: + path.setAttribute("stroke-linecap", "butt"); + break; + case LINESTYLE2.SQUARE_CAP: + path.setAttribute("stroke-linecap", "square"); + break; + default: + path.setAttribute("stroke-linecap", "round"); + break; + } + switch (joints) { + case LINESTYLE2.BEVEL_JOIN: + path.setAttribute("stroke-linejoin", "bevel"); + break; + case LINESTYLE2.ROUND_JOIN: + path.setAttribute("stroke-linejoin", "round"); + break; + default: + path.setAttribute("stroke-linejoin", "miter"); + if (miterLimit >= 1 && miterLimit != 4f) { + path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); + } + break; + } + } + + @Override + public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio, float focalPointRatioEnd) { + path.removeAttribute("stroke-opacity"); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, gradientRecordsEnd, matrix, matrixEnd, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "url(#gradient" + id + ")"); + path.setAttribute("fill", "none"); + exporter.addToDefs(gradient); + } + + private Element createAnimateElement(String attributeName, Object startValue, Object endValue) { + Element animate = exporter.createElement("animate"); + animate.setAttribute("dur", "2s"); // todo + animate.setAttribute("repeatCount", "indefinite"); + animate.setAttribute("attributeName", attributeName); + animate.setAttribute("values", startValue + ";" + endValue); + return animate; + } + + @Override + protected void finalizePath() { + if (path != null && pathData != null && pathData.length() > 0) { + path.setAttribute("d", pathData.toString().trim()); + path.appendChild(createAnimateElement("d", pathData.toString().trim(), pathDataEnd.toString().trim())); + exporter.addToGroup(path); + } + path = exporter.createElement("path"); + super.finalizePath(); + } + + private void addMatrixAnimation(Element element, String attribute, Matrix matrix, Matrix matrixEnd) { + final int animationLength = 2; // todo + final String animationLengthStr = animationLength + "s"; + + element.setAttribute(attribute, matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); + + // QR decomposition + double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); + double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); + double a = matrix.scaleX; + double b = matrix.rotateSkew0; + double c = matrix.rotateSkew1; + double d = matrix.scaleY; + double r = Math.sqrt(a * a + b * b); + double det = a * d - b * c; + double rotate = roundPixels400(Math.signum(b) * Math.acos(a / r) * 180 / Math.PI); + double scaleX = roundPixels400(r); + double scaleY = roundPixels400(det / r); + double skewX = roundPixels400(Math.atan((a * c + b * d) / (r * r)) * 180 / Math.PI); + + double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); + double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); + a = matrixEnd.scaleX; + b = matrixEnd.rotateSkew0; + c = matrixEnd.rotateSkew1; + d = matrixEnd.scaleY; + double rEnd = Math.sqrt(a * a + b * b); + double detEnd = a * d - b * c; + double rotateEnd = roundPixels400(Math.signum(b) * Math.acos(a / rEnd) * 180 / Math.PI); + double scaleXEnd = roundPixels400(rEnd); + double scaleYEnd = roundPixels400(detEnd / rEnd); + double skewXEnd = roundPixels400(Math.atan((a * c + b * d) / (rEnd * rEnd)) * 180 / Math.PI); + + Element animateClear = exporter.createElement("animateTransform"); + animateClear.setAttribute("dur", animationLengthStr); + animateClear.setAttribute("repeatCount", "indefinite"); + animateClear.setAttribute("attributeName", attribute); + animateClear.setAttribute("type", "scale"); + animateClear.setAttribute("additive", "replace"); + animateClear.setAttribute("from", "1"); + animateClear.setAttribute("to", "1"); + + Element animateTranslate = exporter.createElement("animateTransform"); + animateTranslate.setAttribute("dur", animationLengthStr); + animateTranslate.setAttribute("repeatCount", "indefinite"); + animateTranslate.setAttribute("attributeName", attribute); + animateTranslate.setAttribute("type", "translate"); + animateTranslate.setAttribute("additive", "sum"); + animateTranslate.setAttribute("from", translateX + " " + translateY); + animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); + + Element animateRotate = exporter.createElement("animateTransform"); + animateRotate.setAttribute("dur", animationLengthStr); + animateRotate.setAttribute("repeatCount", "indefinite"); + animateRotate.setAttribute("attributeName", attribute); + animateRotate.setAttribute("type", "rotate"); + animateRotate.setAttribute("additive", "sum"); + animateRotate.setAttribute("from", Double.toString(rotate)); + animateRotate.setAttribute("to", Double.toString(rotateEnd)); + + Element animateScale = exporter.createElement("animateTransform"); + animateScale.setAttribute("dur", animationLengthStr); + animateScale.setAttribute("repeatCount", "indefinite"); + animateScale.setAttribute("attributeName", attribute); + animateScale.setAttribute("type", "scale"); + animateScale.setAttribute("additive", "sum"); + animateScale.setAttribute("from", scaleX + " " + scaleY); + animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); + + Element animateSkewX = exporter.createElement("animateTransform"); + animateSkewX.setAttribute("dur", animationLengthStr); + animateSkewX.setAttribute("repeatCount", "indefinite"); + animateSkewX.setAttribute("attributeName", attribute); + animateSkewX.setAttribute("type", "skewX"); + animateSkewX.setAttribute("additive", "sum"); + animateSkewX.setAttribute("from", Double.toString(skewX)); + animateSkewX.setAttribute("to", Double.toString(skewXEnd)); + + element.appendChild(animateClear); + element.appendChild(animateTranslate); + element.appendChild(animateRotate); + element.appendChild(animateScale); + element.appendChild(animateSkewX); + + /* + // LDU decomposition + + double translateX = roundPixels400(matrix.translateX * zoom / SWF.unitDivisor); + double translateY = roundPixels400(matrix.translateY * zoom / SWF.unitDivisor); + double a = matrix.scaleX; + double b = matrix.rotateSkew0; + double c = matrix.rotateSkew1; + double d = matrix.scaleY; + double det = a * d - b * c; + double skewY = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); + double scaleX = roundPixels400(a); + double scaleY = roundPixels400(det / a); + double skewX = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); + + double translateXEnd = roundPixels400(matrixEnd.translateX * zoom / SWF.unitDivisor); + double translateYEnd = roundPixels400(matrixEnd.translateY * zoom / SWF.unitDivisor); + a = matrixEnd.scaleX; + b = matrixEnd.rotateSkew0; + c = matrixEnd.rotateSkew1; + d = matrixEnd.scaleY; + double detEnd = a * d - b * c; + double skewYEnd = roundPixels400(Math.atan2(b, a) * 180 / Math.PI); + double scaleXEnd = roundPixels400(a); + double scaleYEnd = roundPixels400(detEnd / a); + double skewXEnd = roundPixels400(Math.atan2(c, a) * 180 / Math.PI); + + Element animateClear = exporter.createElement("animateTransform"); + animateClear.setAttribute("dur", animationLengthStr); + animateClear.setAttribute("repeatCount", "indefinite"); + animateClear.setAttribute("attributeName", attribute); + animateClear.setAttribute("type", "scale"); + animateClear.setAttribute("additive", "replace"); + animateClear.setAttribute("from", "1"); + animateClear.setAttribute("to", "1"); + + Element animateTranslate = exporter.createElement("animateTransform"); + animateTranslate.setAttribute("dur", animationLengthStr); + animateTranslate.setAttribute("repeatCount", "indefinite"); + animateTranslate.setAttribute("attributeName", attribute); + animateTranslate.setAttribute("type", "translate"); + animateTranslate.setAttribute("additive", "sum"); + animateTranslate.setAttribute("from", translateX + " " + translateY); + animateTranslate.setAttribute("to", translateXEnd + " " + translateYEnd); + + Element animateSkewY = exporter.createElement("animateTransform"); + animateSkewY.setAttribute("dur", animationLengthStr); + animateSkewY.setAttribute("repeatCount", "indefinite"); + animateSkewY.setAttribute("attributeName", attribute); + animateSkewY.setAttribute("type", "skewY"); + animateSkewY.setAttribute("additive", "sum"); + animateSkewY.setAttribute("from", Double.toString(skewY)); + animateSkewY.setAttribute("to", Double.toString(skewYEnd)); + + Element animateScale = exporter.createElement("animateTransform"); + animateScale.setAttribute("dur", animationLengthStr); + animateScale.setAttribute("repeatCount", "indefinite"); + animateScale.setAttribute("attributeName", attribute); + animateScale.setAttribute("type", "scale"); + animateScale.setAttribute("additive", "sum"); + animateScale.setAttribute("from", scaleX + " " + scaleY); + animateScale.setAttribute("to", scaleXEnd + " " + scaleYEnd); + + Element animateSkewX = exporter.createElement("animateTransform"); + animateSkewX.setAttribute("dur", animationLengthStr); + animateSkewX.setAttribute("repeatCount", "indefinite"); + animateSkewX.setAttribute("attributeName", attribute); + animateSkewX.setAttribute("type", "skewX"); + animateSkewX.setAttribute("additive", "sum"); + animateSkewX.setAttribute("from", Double.toString(skewX)); + animateSkewX.setAttribute("to", Double.toString(skewXEnd)); + + element.appendChild(animateClear); + element.appendChild(animateTranslate); + element.appendChild(animateSkewY); + element.appendChild(animateScale); + element.appendChild(animateSkewX);*/ + } + + protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, GRADRECORD[] gradientRecordsEnd, Matrix matrix, Matrix matrixEnd, int spreadMethod, int interpolationMethod, float focalPointRatio) { + gradient.setAttribute("gradientUnits", "userSpaceOnUse"); + if (type == FILLSTYLE.LINEAR_GRADIENT) { + gradient.setAttribute("x1", "-819.2"); + gradient.setAttribute("x2", "819.2"); + } else { + gradient.setAttribute("r", "819.2"); + gradient.setAttribute("cx", "0"); + gradient.setAttribute("cy", "0"); + if (focalPointRatio != 0) { + gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); + gradient.setAttribute("fy", "0"); + } + } + switch (spreadMethod) { + case GRADIENT.SPREAD_PAD_MODE: + gradient.setAttribute("spreadMethod", "pad"); + break; + case GRADIENT.SPREAD_REFLECT_MODE: + gradient.setAttribute("spreadMethod", "reflect"); + break; + case GRADIENT.SPREAD_REPEAT_MODE: + gradient.setAttribute("spreadMethod", "repeat"); + break; + } + if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { + gradient.setAttribute("color-interpolation", "linearRGB"); + } + if (matrix != null) { + addMatrixAnimation(gradient, "gradientTransform", matrix, matrixEnd); + } + for (int i = 0; i < gradientRecords.length; i++) { + GRADRECORD record = gradientRecords[i]; + GRADRECORD recordEnd = gradientRecordsEnd[i]; + Element gradientEntry = exporter.createElement("stop"); + gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); + gradientEntry.appendChild(createAnimateElement("offset", record.ratio / 255.0, recordEnd.ratio / 255.0)); + RGB color = record.color; + RGB colorEnd = recordEnd.color; + //if(colors.get(i) != 0) { + gradientEntry.setAttribute("stop-color", color.toHexRGB()); + gradientEntry.appendChild(createAnimateElement("stop-color", color.toHexRGB(), colorEnd.toHexRGB())); + //} + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); + } + RGBA colorAEnd = (RGBA) colorEnd; + gradientEntry.appendChild(createAnimateElement("stop-opacity", colorA.getAlphaFloat(), colorAEnd.getAlphaFloat())); + } + gradient.appendChild(gradientEntry); + } + } + + protected double roundPixels400(double pixels) { + return Math.round(pixels * 10000) / 10000.0; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java index 252012bab..e740ac8c2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/exporters/shape/SVGShapeExporter.java @@ -1,264 +1,264 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.exporters.shape; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.GRADIENT; -import com.jpexs.decompiler.flash.types.GRADRECORD; -import com.jpexs.decompiler.flash.types.LINESTYLE2; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS, Claus Wahlers - */ -public class SVGShapeExporter extends DefaultSVGShapeExporter { - - protected Element path; - - protected int id; - - protected int lastPatternId; - - private final Color defaultColor; - - private final SWF swf; - - private final SVGExporter exporter; - - public SVGShapeExporter(SWF swf, SHAPE shape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { - super(swf, shape, colorTransform, zoom); - this.swf = swf; - this.id = id; - this.defaultColor = defaultColor; - this.exporter = exporter; - } - - @Override - public void beginFill(RGB color) { - if (color == null && defaultColor != null) { - color = new RGB(defaultColor); - } - finalizePath(); - path.setAttribute("stroke", "none"); - if (color != null) { - path.setAttribute("fill", color.toHexRGB()); - } - path.setAttribute("fill-rule", "evenodd"); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - } - - @Override - public void beginGradientFill(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - finalizePath(); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - String gradientId = "gradient" + id; - gradient.setAttribute("id", gradientId); - path.setAttribute("stroke", "none"); - path.setAttribute("fill", "url(#" + gradientId + ")"); - path.setAttribute("fill-rule", "evenodd"); - exporter.addToDefs(gradient); - } - - @Override - public void beginBitmapFill(int bitmapId, Matrix matrix, boolean repeat, boolean smooth, ColorTransform colorTransform) { - finalizePath(); - ImageTag image = swf.getImage(bitmapId); - if (image != null) { - SerializableImage img = image.getImageCached(); - if (img != null) { - if (colorTransform != null) { - colorTransform.apply(img); - } - - int width = img.getWidth(); - int height = img.getHeight(); - lastPatternId++; - String patternId = "PatternID_" + id + "_" + lastPatternId; - ImageFormat format = image.getImageFormat(); - byte[] imageData = Helper.readStream(image.getImageData()); - String base64ImgData = Helper.byteArrayToBase64String(imageData); - path.setAttribute("style", "fill:url(#" + patternId + ")"); - Element pattern = exporter.createElement("pattern"); - pattern.setAttribute("id", patternId); - pattern.setAttribute("patternUnits", "userSpaceOnUse"); - pattern.setAttribute("overflow", "visible"); - pattern.setAttribute("width", "" + width); - pattern.setAttribute("height", "" + height); - pattern.setAttribute("viewBox", "0 0 " + width + " " + height); - if (matrix != null) { - pattern.setAttribute("patternTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, SWF.unitDivisor / zoom)); - } - Element imageElement = exporter.createElement("image"); - imageElement.setAttribute("width", "" + width); - imageElement.setAttribute("height", "" + height); - imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); - pattern.appendChild(imageElement); - exporter.addToGroup(pattern); - return; - } - } - - path.setAttribute("fill", "#ff0000"); - } - - @Override - public void lineStyle(double thickness, RGB color, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { - finalizePath(); - thickness *= zoom / SWF.unitDivisor; - path.setAttribute("fill", "none"); - if (color != null) { - path.setAttribute("stroke", color.toHexRGB()); - } - path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - switch (startCaps) { - case LINESTYLE2.NO_CAP: - path.setAttribute("stroke-linecap", "butt"); - break; - case LINESTYLE2.SQUARE_CAP: - path.setAttribute("stroke-linecap", "square"); - break; - default: - path.setAttribute("stroke-linecap", "round"); - break; - } - switch (joints) { - case LINESTYLE2.BEVEL_JOIN: - path.setAttribute("stroke-linejoin", "bevel"); - break; - case LINESTYLE2.ROUND_JOIN: - path.setAttribute("stroke-linejoin", "round"); - break; - default: - path.setAttribute("stroke-linejoin", "miter"); - if (miterLimit >= 1 && miterLimit != 4f) { - path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); - } - break; - } - } - - @Override - public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - path.removeAttribute("stroke-opacity"); - Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) - ? exporter.createElement("linearGradient") - : exporter.createElement("radialGradient"); - populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); - int id = exporter.gradients.indexOf(gradient); - if (id < 0) { - // todo: filter same gradients - id = exporter.gradients.size(); - exporter.gradients.add(gradient); - } - gradient.setAttribute("id", "gradient" + id); - path.setAttribute("stroke", "url(#gradient" + id + ")"); - path.setAttribute("fill", "none"); - exporter.addToDefs(gradient); - } - - @Override - protected void finalizePath() { - if (path != null && pathData != null && pathData.length() > 0) { - path.setAttribute("d", pathData.toString().trim()); - exporter.addToGroup(path); - } - path = exporter.createElement("path"); - super.finalizePath(); - } - - protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { - gradient.setAttribute("gradientUnits", "userSpaceOnUse"); - if (type == FILLSTYLE.LINEAR_GRADIENT) { - gradient.setAttribute("x1", "-819.2"); - gradient.setAttribute("x2", "819.2"); - } else { - gradient.setAttribute("r", "819.2"); - gradient.setAttribute("cx", "0"); - gradient.setAttribute("cy", "0"); - if (focalPointRatio != 0) { - gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); - gradient.setAttribute("fy", "0"); - } - } - switch (spreadMethod) { - case GRADIENT.SPREAD_PAD_MODE: - gradient.setAttribute("spreadMethod", "pad"); - break; - case GRADIENT.SPREAD_REFLECT_MODE: - gradient.setAttribute("spreadMethod", "reflect"); - break; - case GRADIENT.SPREAD_REPEAT_MODE: - gradient.setAttribute("spreadMethod", "repeat"); - break; - } - if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { - gradient.setAttribute("color-interpolation", "linearRGB"); - } - if (matrix != null) { - gradient.setAttribute("gradientTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); - } - for (int i = 0; i < gradientRecords.length; i++) { - GRADRECORD record = gradientRecords[i]; - Element gradientEntry = exporter.createElement("stop"); - gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); - RGB color = record.color; - //if(colors.get(i) != 0) { - gradientEntry.setAttribute("stop-color", color.toHexRGB()); - //} - if (color instanceof RGBA) { - RGBA colorA = (RGBA) color; - if (colorA.alpha != 255) { - gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - gradient.appendChild(gradientEntry); - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.exporters.shape; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.GRADIENT; +import com.jpexs.decompiler.flash.types.GRADRECORD; +import com.jpexs.decompiler.flash.types.LINESTYLE2; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS, Claus Wahlers + */ +public class SVGShapeExporter extends DefaultSVGShapeExporter { + + protected Element path; + + protected int id; + + protected int lastPatternId; + + private final Color defaultColor; + + private final SWF swf; + + private final SVGExporter exporter; + + public SVGShapeExporter(SWF swf, SHAPE shape, int id, SVGExporter exporter, Color defaultColor, ColorTransform colorTransform, double zoom) { + super(swf, shape, colorTransform, zoom); + this.swf = swf; + this.id = id; + this.defaultColor = defaultColor; + this.exporter = exporter; + } + + @Override + public void beginFill(RGB color) { + if (color == null && defaultColor != null) { + color = new RGB(defaultColor); + } + finalizePath(); + path.setAttribute("stroke", "none"); + if (color != null) { + path.setAttribute("fill", color.toHexRGB()); + } + path.setAttribute("fill-rule", "evenodd"); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + } + + @Override + public void beginGradientFill(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + finalizePath(); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + String gradientId = "gradient" + id; + gradient.setAttribute("id", gradientId); + path.setAttribute("stroke", "none"); + path.setAttribute("fill", "url(#" + gradientId + ")"); + path.setAttribute("fill-rule", "evenodd"); + exporter.addToDefs(gradient); + } + + @Override + public void beginBitmapFill(int bitmapId, Matrix matrix, boolean repeat, boolean smooth, ColorTransform colorTransform) { + finalizePath(); + ImageTag image = swf.getImage(bitmapId); + if (image != null) { + SerializableImage img = image.getImageCached(); + if (img != null) { + if (colorTransform != null) { + colorTransform.apply(img); + } + + int width = img.getWidth(); + int height = img.getHeight(); + lastPatternId++; + String patternId = "PatternID_" + id + "_" + lastPatternId; + ImageFormat format = image.getImageFormat(); + byte[] imageData = Helper.readStream(image.getImageData()); + String base64ImgData = Helper.byteArrayToBase64String(imageData); + path.setAttribute("style", "fill:url(#" + patternId + ")"); + Element pattern = exporter.createElement("pattern"); + pattern.setAttribute("id", patternId); + pattern.setAttribute("patternUnits", "userSpaceOnUse"); + pattern.setAttribute("overflow", "visible"); + pattern.setAttribute("width", "" + width); + pattern.setAttribute("height", "" + height); + pattern.setAttribute("viewBox", "0 0 " + width + " " + height); + if (matrix != null) { + pattern.setAttribute("patternTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, SWF.unitDivisor / zoom)); + } + Element imageElement = exporter.createElement("image"); + imageElement.setAttribute("width", "" + width); + imageElement.setAttribute("height", "" + height); + imageElement.setAttribute("xlink:href", "data:image/" + format + ";base64," + base64ImgData); + pattern.appendChild(imageElement); + exporter.addToGroup(pattern); + return; + } + } + + path.setAttribute("fill", "#ff0000"); + } + + @Override + public void lineStyle(double thickness, RGB color, boolean pixelHinting, String scaleMode, int startCaps, int endCaps, int joints, float miterLimit) { + finalizePath(); + thickness *= zoom / SWF.unitDivisor; + path.setAttribute("fill", "none"); + if (color != null) { + path.setAttribute("stroke", color.toHexRGB()); + } + path.setAttribute("stroke-width", Double.toString(thickness == 0 ? 1 : thickness)); + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + path.setAttribute("stroke-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + switch (startCaps) { + case LINESTYLE2.NO_CAP: + path.setAttribute("stroke-linecap", "butt"); + break; + case LINESTYLE2.SQUARE_CAP: + path.setAttribute("stroke-linecap", "square"); + break; + default: + path.setAttribute("stroke-linecap", "round"); + break; + } + switch (joints) { + case LINESTYLE2.BEVEL_JOIN: + path.setAttribute("stroke-linejoin", "bevel"); + break; + case LINESTYLE2.ROUND_JOIN: + path.setAttribute("stroke-linejoin", "round"); + break; + default: + path.setAttribute("stroke-linejoin", "miter"); + if (miterLimit >= 1 && miterLimit != 4f) { + path.setAttribute("stroke-miterlimit", Double.toString(miterLimit)); + } + break; + } + } + + @Override + public void lineGradientStyle(int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + path.removeAttribute("stroke-opacity"); + Element gradient = (type == FILLSTYLE.LINEAR_GRADIENT) + ? exporter.createElement("linearGradient") + : exporter.createElement("radialGradient"); + populateGradientElement(gradient, type, gradientRecords, matrix, spreadMethod, interpolationMethod, focalPointRatio); + int id = exporter.gradients.indexOf(gradient); + if (id < 0) { + // todo: filter same gradients + id = exporter.gradients.size(); + exporter.gradients.add(gradient); + } + gradient.setAttribute("id", "gradient" + id); + path.setAttribute("stroke", "url(#gradient" + id + ")"); + path.setAttribute("fill", "none"); + exporter.addToDefs(gradient); + } + + @Override + protected void finalizePath() { + if (path != null && pathData != null && pathData.length() > 0) { + path.setAttribute("d", pathData.toString().trim()); + exporter.addToGroup(path); + } + path = exporter.createElement("path"); + super.finalizePath(); + } + + protected void populateGradientElement(Element gradient, int type, GRADRECORD[] gradientRecords, Matrix matrix, int spreadMethod, int interpolationMethod, float focalPointRatio) { + gradient.setAttribute("gradientUnits", "userSpaceOnUse"); + if (type == FILLSTYLE.LINEAR_GRADIENT) { + gradient.setAttribute("x1", "-819.2"); + gradient.setAttribute("x2", "819.2"); + } else { + gradient.setAttribute("r", "819.2"); + gradient.setAttribute("cx", "0"); + gradient.setAttribute("cy", "0"); + if (focalPointRatio != 0) { + gradient.setAttribute("fx", Double.toString(819.2 * focalPointRatio)); + gradient.setAttribute("fy", "0"); + } + } + switch (spreadMethod) { + case GRADIENT.SPREAD_PAD_MODE: + gradient.setAttribute("spreadMethod", "pad"); + break; + case GRADIENT.SPREAD_REFLECT_MODE: + gradient.setAttribute("spreadMethod", "reflect"); + break; + case GRADIENT.SPREAD_REPEAT_MODE: + gradient.setAttribute("spreadMethod", "repeat"); + break; + } + if (interpolationMethod == GRADIENT.INTERPOLATION_LINEAR_RGB_MODE) { + gradient.setAttribute("color-interpolation", "linearRGB"); + } + if (matrix != null) { + gradient.setAttribute("gradientTransform", matrix.getSvgTransformationString(SWF.unitDivisor / zoom, 1)); + } + for (int i = 0; i < gradientRecords.length; i++) { + GRADRECORD record = gradientRecords[i]; + Element gradientEntry = exporter.createElement("stop"); + gradientEntry.setAttribute("offset", Double.toString(record.ratio / 255.0)); + RGB color = record.color; + //if(colors.get(i) != 0) { + gradientEntry.setAttribute("stop-color", color.toHexRGB()); + //} + if (color instanceof RGBA) { + RGBA colorA = (RGBA) color; + if (colorA.alpha != 255) { + gradientEntry.setAttribute("stop-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + gradient.appendChild(gradientEntry); + } + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java index b5e9386e8..8e1b7b029 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ImageTag.java @@ -1,281 +1,281 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.ImageHelper; -import com.jpexs.decompiler.flash.tags.TagInfo; -import com.jpexs.decompiler.flash.tags.enums.ImageFormat; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.LINESTYLE; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MATRIX; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Dimension; -import java.awt.Shape; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Set; - -/** - * - * @author JPEXS - */ -public abstract class ImageTag extends DrawableTag { - - @SWFType(BasicType.UI16) - public int characterID; - - protected SerializableImage cachedImage; - - public ImageTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract InputStream getOriginalImageData(); - - protected abstract SerializableImage getImage(); - - public abstract Dimension getImageDimension(); - - public abstract void setImage(byte[] data) throws IOException; - - public abstract ImageFormat getImageFormat(); - - public abstract ImageFormat getOriginalImageFormat(); - - public boolean importSupported() { - return true; - } - - public static ImageFormat getImageFormat(byte[] data) { - return getImageFormat(new ByteArrayRange(data)); - } - - public static ImageFormat getImageFormat(ByteArrayRange data) { - if (hasErrorHeader(data)) { - return ImageFormat.JPEG; - } - - if (data.getLength() > 2 && ((data.get(0) & 0xff) == 0xff) && ((data.get(1) & 0xff) == 0xd8)) { - return ImageFormat.JPEG; - } - - if (data.getLength() > 6 && ((data.get(0) & 0xff) == 0x47) && ((data.get(1) & 0xff) == 0x49) && ((data.get(2) & 0xff) == 0x46) && ((data.get(3) & 0xff) == 0x38) && ((data.get(4) & 0xff) == 0x39) && ((data.get(5) & 0xff) == 0x61)) { - return ImageFormat.GIF; - } - - if (data.getLength() > 8 && ((data.get(0) & 0xff) == 0x89) && ((data.get(1) & 0xff) == 0x50) && ((data.get(2) & 0xff) == 0x4e) && ((data.get(3) & 0xff) == 0x47) && ((data.get(4) & 0xff) == 0x0d) && ((data.get(5) & 0xff) == 0x0a) && ((data.get(6) & 0xff) == 0x1a) && ((data.get(7) & 0xff) == 0x0a)) { - return ImageFormat.PNG; - } - - return ImageFormat.UNKNOWN; - } - - public SerializableImage getImageCached() { - if (cachedImage != null) { - return cachedImage; - } - - SerializableImage image = getImage(); - if (Configuration.cacheImages.get()) { - cachedImage = image; - } - - return image; - } - - public InputStream getImageData() { - InputStream is = getOriginalImageData(); - if (is != null) { - return is; - } - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ImageHelper.write(getImage().getBufferedImage(), getImageFormat(), baos); - return new ByteArrayInputStream(baos.toByteArray()); - } - - public static boolean hasErrorHeader(byte[] data) { - return hasErrorHeader(new ByteArrayRange(data)); - } - - public static boolean hasErrorHeader(ByteArrayRange data) { - if (data.getLength() > 4) { - if ((data.get(0) & 0xff) == 0xff && (data.get(1) & 0xff) == 0xd9 - && (data.get(2) & 0xff) == 0xff && (data.get(3) & 0xff) == 0xd8) { - return true; - } - } - return false; - } - - private SHAPEWITHSTYLE getShape() { - RECT rect = getRect(); - return getShape(rect, false); - } - - public SHAPEWITHSTYLE getShape(RECT rect, boolean fill) { - boolean translated = rect.Xmin != 0 || rect.Ymin != 0; - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = new FILLSTYLEARRAY(); - shape.fillStyles.fillStyles = new FILLSTYLE[1]; - FILLSTYLE fillStyle = new FILLSTYLE(); - fillStyle.fillStyleType = Configuration.shapeImportUseNonSmoothedFill.get() - ? FILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP : FILLSTYLE.REPEATING_BITMAP; - fillStyle.bitmapId = getCharacterId(); - MATRIX matrix = new MATRIX(); - matrix.hasScale = true; - if (fill) { - RECT imageRect = getRect(); - matrix.scaleX = (int) ((((long) SWF.unitDivisor) << 16) * rect.getWidth() / imageRect.getWidth()); - matrix.scaleY = (int) ((((long) SWF.unitDivisor) << 16) * rect.getHeight() / imageRect.getHeight()); - } else { - matrix.scaleX = ((int) SWF.unitDivisor) << 16; - matrix.scaleY = matrix.scaleX; - } - if (translated) { - matrix.translateX = rect.Xmin; - matrix.translateY = rect.Ymin; - } - fillStyle.bitmapMatrix = matrix; - shape.fillStyles.fillStyles[0] = fillStyle; - - shape.lineStyles = new LINESTYLEARRAY(); - shape.lineStyles.lineStyles = new LINESTYLE[0]; - shape.shapeRecords = new ArrayList<>(); - StyleChangeRecord style = new StyleChangeRecord(); - style.stateFillStyle0 = true; - style.fillStyle0 = 1; - style.stateMoveTo = true; - if (translated) { - style.moveDeltaX = rect.Xmin; - style.moveDeltaY = rect.Ymin; - } - shape.shapeRecords.add(style); - StraightEdgeRecord top = new StraightEdgeRecord(); - top.generalLineFlag = true; - top.deltaX = rect.getWidth(); - StraightEdgeRecord right = new StraightEdgeRecord(); - right.generalLineFlag = true; - right.deltaY = rect.getHeight(); - StraightEdgeRecord bottom = new StraightEdgeRecord(); - bottom.generalLineFlag = true; - bottom.deltaX = -rect.getWidth(); - StraightEdgeRecord left = new StraightEdgeRecord(); - left.generalLineFlag = true; - left.deltaY = -rect.getHeight(); - shape.shapeRecords.add(top); - shape.shapeRecords.add(right); - shape.shapeRecords.add(bottom); - shape.shapeRecords.add(left); - shape.shapeRecords.add(new EndShapeRecord()); - return shape; - } - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - @Override - public RECT getRect(Set added) { - Dimension dimension = getImageDimension(); - int widthInTwips = (int) (dimension.getWidth() * SWF.unitDivisor); - int heightInTwips = (int) (dimension.getHeight() * SWF.unitDivisor); - return new RECT(0, widthInTwips, 0, heightInTwips); - } - - @Override - public int getUsedParameters() { - return 0; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShape().getOutline(swf, stroked)); - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - BitmapExporter.export(swf, getShape(), null, image, transformation, strokeTransformation, colorTransform); - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShape(), getCharacterId(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShape(), null, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - } - - @Override - public int getNumFrames() { - return 1; - } - - @Override - public boolean isSingleFrame() { - return true; - } - - public void clearCache() { - cachedImage = null; - } - - @Override - public void getTagInfo(TagInfo tagInfo) { - super.getTagInfo(tagInfo); - Dimension dimension = getImageDimension(); - tagInfo.addInfo("general", "width", dimension.getWidth()); - tagInfo.addInfo("general", "height", dimension.getHeight()); - } - - @Override - public int getCharacterId() { - return characterID; - } - - @Override - public void setCharacterId(int characterId) { - this.characterID = characterId; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.ImageHelper; +import com.jpexs.decompiler.flash.tags.TagInfo; +import com.jpexs.decompiler.flash.tags.enums.ImageFormat; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.LINESTYLE; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MATRIX; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Dimension; +import java.awt.Shape; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public abstract class ImageTag extends DrawableTag { + + @SWFType(BasicType.UI16) + public int characterID; + + protected SerializableImage cachedImage; + + public ImageTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract InputStream getOriginalImageData(); + + protected abstract SerializableImage getImage(); + + public abstract Dimension getImageDimension(); + + public abstract void setImage(byte[] data) throws IOException; + + public abstract ImageFormat getImageFormat(); + + public abstract ImageFormat getOriginalImageFormat(); + + public boolean importSupported() { + return true; + } + + public static ImageFormat getImageFormat(byte[] data) { + return getImageFormat(new ByteArrayRange(data)); + } + + public static ImageFormat getImageFormat(ByteArrayRange data) { + if (hasErrorHeader(data)) { + return ImageFormat.JPEG; + } + + if (data.getLength() > 2 && ((data.get(0) & 0xff) == 0xff) && ((data.get(1) & 0xff) == 0xd8)) { + return ImageFormat.JPEG; + } + + if (data.getLength() > 6 && ((data.get(0) & 0xff) == 0x47) && ((data.get(1) & 0xff) == 0x49) && ((data.get(2) & 0xff) == 0x46) && ((data.get(3) & 0xff) == 0x38) && ((data.get(4) & 0xff) == 0x39) && ((data.get(5) & 0xff) == 0x61)) { + return ImageFormat.GIF; + } + + if (data.getLength() > 8 && ((data.get(0) & 0xff) == 0x89) && ((data.get(1) & 0xff) == 0x50) && ((data.get(2) & 0xff) == 0x4e) && ((data.get(3) & 0xff) == 0x47) && ((data.get(4) & 0xff) == 0x0d) && ((data.get(5) & 0xff) == 0x0a) && ((data.get(6) & 0xff) == 0x1a) && ((data.get(7) & 0xff) == 0x0a)) { + return ImageFormat.PNG; + } + + return ImageFormat.UNKNOWN; + } + + public SerializableImage getImageCached() { + if (cachedImage != null) { + return cachedImage; + } + + SerializableImage image = getImage(); + if (Configuration.cacheImages.get()) { + cachedImage = image; + } + + return image; + } + + public InputStream getImageData() { + InputStream is = getOriginalImageData(); + if (is != null) { + return is; + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageHelper.write(getImage().getBufferedImage(), getImageFormat(), baos); + return new ByteArrayInputStream(baos.toByteArray()); + } + + public static boolean hasErrorHeader(byte[] data) { + return hasErrorHeader(new ByteArrayRange(data)); + } + + public static boolean hasErrorHeader(ByteArrayRange data) { + if (data.getLength() > 4) { + if ((data.get(0) & 0xff) == 0xff && (data.get(1) & 0xff) == 0xd9 + && (data.get(2) & 0xff) == 0xff && (data.get(3) & 0xff) == 0xd8) { + return true; + } + } + return false; + } + + private SHAPEWITHSTYLE getShape() { + RECT rect = getRect(); + return getShape(rect, false); + } + + public SHAPEWITHSTYLE getShape(RECT rect, boolean fill) { + boolean translated = rect.Xmin != 0 || rect.Ymin != 0; + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = new FILLSTYLEARRAY(); + shape.fillStyles.fillStyles = new FILLSTYLE[1]; + FILLSTYLE fillStyle = new FILLSTYLE(); + fillStyle.fillStyleType = Configuration.shapeImportUseNonSmoothedFill.get() + ? FILLSTYLE.NON_SMOOTHED_REPEATING_BITMAP : FILLSTYLE.REPEATING_BITMAP; + fillStyle.bitmapId = getCharacterId(); + MATRIX matrix = new MATRIX(); + matrix.hasScale = true; + if (fill) { + RECT imageRect = getRect(); + matrix.scaleX = (int) ((((long) SWF.unitDivisor) << 16) * rect.getWidth() / imageRect.getWidth()); + matrix.scaleY = (int) ((((long) SWF.unitDivisor) << 16) * rect.getHeight() / imageRect.getHeight()); + } else { + matrix.scaleX = ((int) SWF.unitDivisor) << 16; + matrix.scaleY = matrix.scaleX; + } + if (translated) { + matrix.translateX = rect.Xmin; + matrix.translateY = rect.Ymin; + } + fillStyle.bitmapMatrix = matrix; + shape.fillStyles.fillStyles[0] = fillStyle; + + shape.lineStyles = new LINESTYLEARRAY(); + shape.lineStyles.lineStyles = new LINESTYLE[0]; + shape.shapeRecords = new ArrayList<>(); + StyleChangeRecord style = new StyleChangeRecord(); + style.stateFillStyle0 = true; + style.fillStyle0 = 1; + style.stateMoveTo = true; + if (translated) { + style.moveDeltaX = rect.Xmin; + style.moveDeltaY = rect.Ymin; + } + shape.shapeRecords.add(style); + StraightEdgeRecord top = new StraightEdgeRecord(); + top.generalLineFlag = true; + top.deltaX = rect.getWidth(); + StraightEdgeRecord right = new StraightEdgeRecord(); + right.generalLineFlag = true; + right.deltaY = rect.getHeight(); + StraightEdgeRecord bottom = new StraightEdgeRecord(); + bottom.generalLineFlag = true; + bottom.deltaX = -rect.getWidth(); + StraightEdgeRecord left = new StraightEdgeRecord(); + left.generalLineFlag = true; + left.deltaY = -rect.getHeight(); + shape.shapeRecords.add(top); + shape.shapeRecords.add(right); + shape.shapeRecords.add(bottom); + shape.shapeRecords.add(left); + shape.shapeRecords.add(new EndShapeRecord()); + return shape; + } + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + @Override + public RECT getRect(Set added) { + Dimension dimension = getImageDimension(); + int widthInTwips = (int) (dimension.getWidth() * SWF.unitDivisor); + int heightInTwips = (int) (dimension.getHeight() * SWF.unitDivisor); + return new RECT(0, widthInTwips, 0, heightInTwips); + } + + @Override + public int getUsedParameters() { + return 0; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShape().getOutline(swf, stroked)); + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + BitmapExporter.export(swf, getShape(), null, image, transformation, strokeTransformation, colorTransform); + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShape(), getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShape(), null, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + } + + @Override + public int getNumFrames() { + return 1; + } + + @Override + public boolean isSingleFrame() { + return true; + } + + public void clearCache() { + cachedImage = null; + } + + @Override + public void getTagInfo(TagInfo tagInfo) { + super.getTagInfo(tagInfo); + Dimension dimension = getImageDimension(); + tagInfo.addInfo("general", "width", dimension.getWidth()); + tagInfo.addInfo("general", "height", dimension.getHeight()); + } + + @Override + public int getCharacterId() { + return characterID; + } + + @Override + public void setCharacterId(int characterId) { + this.characterID = characterId; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java index a1061bed5..fe8438a83 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/MorphShapeTag.java @@ -1,327 +1,327 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.morphshape.CanvasMorphShapeExporter; -import com.jpexs.decompiler.flash.exporters.morphshape.SVGMorphShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MORPHFILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.MORPHLINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.decompiler.flash.types.shaperecords.CurvedEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Shape; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * - * @author JPEXS - */ -public abstract class MorphShapeTag extends DrawableTag { - - public static final int MAX_RATIO = 65535; - - @SWFType(BasicType.UI16) - public int characterId; - - public RECT startBounds; - - public RECT endBounds; - - public MORPHFILLSTYLEARRAY morphFillStyles; - - public MORPHLINESTYLEARRAY morphLineStyles; - - public SHAPE startEdges; - - public SHAPE endEdges; - - public MorphShapeTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract int getShapeNum(); - - @Override - public RECT getRect() { - return getRect(new HashSet<>()); - } - - @Override - public void getNeededCharacters(Set needed) { - morphFillStyles.getNeededCharacters(needed); - startEdges.getNeededCharacters(needed); - endEdges.getNeededCharacters(needed); - } - - @Override - public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { - boolean modified = false; - modified |= morphFillStyles.replaceCharacter(oldCharacterId, newCharacterId); - modified |= startEdges.replaceCharacter(oldCharacterId, newCharacterId); - modified |= endEdges.replaceCharacter(oldCharacterId, newCharacterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public boolean removeCharacter(int characterId) { - boolean modified = false; - modified |= morphFillStyles.removeCharacter(characterId); - modified |= startEdges.removeCharacter(characterId); - modified |= endEdges.removeCharacter(characterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public int getCharacterId() { - return characterId; - } - - @Override - public void setCharacterId(int characterId) { - this.characterId = characterId; - } - - @Override - public RECT getRect(Set added) { - RECT rect = new RECT(); - rect.Xmin = Math.min(startBounds.Xmin, endBounds.Xmin); - rect.Ymin = Math.min(startBounds.Ymin, endBounds.Ymin); - rect.Xmax = Math.max(startBounds.Xmax, endBounds.Xmax); - rect.Ymax = Math.max(startBounds.Ymax, endBounds.Ymax); - return rect; - } - - public RECT getStartBounds() { - return startBounds; - } - - public RECT getEndBounds() { - return endBounds; - } - - public MORPHFILLSTYLEARRAY getFillStyles() { - return morphFillStyles; - } - - public MORPHLINESTYLEARRAY getLineStyles() { - return morphLineStyles; - } - - public SHAPE getStartEdges() { - return startEdges; - } - - public SHAPE getEndEdges() { - return endEdges; - } - - public SHAPEWITHSTYLE getShapeAtRatio(int ratio) { - List finalRecords = new ArrayList<>(); - FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(ratio); - LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), ratio); - - int startPosX = 0, startPosY = 0; - int endPosX = 0, endPosY = 0; - int posX = 0, posY = 0; - - for (int startIndex = 0, endIndex = 0; - startIndex < startEdges.shapeRecords.size() - && endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) { - - SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex); - SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex); - if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) { - StyleChangeRecord scr1; - if (edge1 instanceof StyleChangeRecord) { - scr1 = (StyleChangeRecord) edge1; - if (scr1.stateMoveTo) { - startPosX = scr1.moveDeltaX; - startPosY = scr1.moveDeltaY; - } - } else { - scr1 = new StyleChangeRecord(); - startIndex--; - } - StyleChangeRecord scr2; - if (edge2 instanceof StyleChangeRecord) { - scr2 = (StyleChangeRecord) edge2; - if (scr2.stateMoveTo) { - endPosX = scr2.moveDeltaX; - endPosY = scr2.moveDeltaY; - } - } else { - scr2 = new StyleChangeRecord(); - endIndex--; - } - StyleChangeRecord scr = scr1.clone(); - if (scr1.stateMoveTo || scr2.stateMoveTo) { - scr.moveDeltaX = startPosX + (endPosX - startPosX) * ratio / MAX_RATIO; - scr.moveDeltaY = startPosY + (endPosY - startPosY) * ratio / MAX_RATIO; - scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY; - } - finalRecords.add(scr); - continue; - } - - if (edge1 instanceof EndShapeRecord) { - finalRecords.add(edge1); - break; - } - if (edge2 instanceof EndShapeRecord) { - finalRecords.add(edge2); - break; - } - - if (edge1 instanceof CurvedEdgeRecord || edge2 instanceof CurvedEdgeRecord) { - CurvedEdgeRecord cer1 = null; - if (edge1 instanceof CurvedEdgeRecord) { - cer1 = (CurvedEdgeRecord) edge1; - } else if (edge1 instanceof StraightEdgeRecord) { - cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1); - } - CurvedEdgeRecord cer2 = null; - if (edge2 instanceof CurvedEdgeRecord) { - cer2 = (CurvedEdgeRecord) edge2; - } else if (edge2 instanceof StraightEdgeRecord) { - cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2); - } - if ((cer2 == null) || (cer1 == null)) { - continue; - } - CurvedEdgeRecord cer = new CurvedEdgeRecord(); - cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * ratio / MAX_RATIO; - cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * ratio / MAX_RATIO; - cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / MAX_RATIO; - cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / MAX_RATIO; - startPosX += cer1.controlDeltaX + cer1.anchorDeltaX; - startPosY += cer1.controlDeltaY + cer1.anchorDeltaY; - endPosX += cer2.controlDeltaX + cer2.anchorDeltaX; - endPosY += cer2.controlDeltaY + cer2.anchorDeltaY; - posX += cer.controlDeltaX + cer.anchorDeltaX; - posY += cer.controlDeltaY + cer.anchorDeltaY; - finalRecords.add(cer); - } else { - StraightEdgeRecord ser1 = null; - if (edge1 instanceof StraightEdgeRecord) { - ser1 = (StraightEdgeRecord) edge1; - } - StraightEdgeRecord ser2 = null; - if (edge2 instanceof StraightEdgeRecord) { - ser2 = (StraightEdgeRecord) edge2; - } - if ((ser2 == null) || (ser1 == null)) { - continue; - } - StraightEdgeRecord ser = new StraightEdgeRecord(); - ser.generalLineFlag = true; - ser.vertLineFlag = false; - ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * ratio / MAX_RATIO; - ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * ratio / MAX_RATIO; - startPosX += ser1.deltaX; - startPosY += ser1.deltaY; - endPosX += ser2.deltaX; - endPosY += ser2.deltaY; - posX += ser.deltaX; - posY += ser.deltaX; - finalRecords.add(ser); - } - } - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = fillStyles; - shape.lineStyles = lineStyles; - shape.shapeRecords = finalRecords; - return shape; - } - - @Override - public int getUsedParameters() { - return PARAMETER_RATIO; - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - SHAPEWITHSTYLE shape = getShapeAtRatio(ratio); - // morphShape using shapeNum=3, morphShape2 using shapeNum=4 - // todo: Currently the generated image is not cached, because the cache - // key contains the hashCode of the finalRecord object, and it is always - // recreated - BitmapExporter.export(swf, shape, null, image, transformation, strokeTransformation, colorTransform); - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { - if (ratio == -2) { - SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); - SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); - SVGMorphShapeExporter shapeExporter = new SVGMorphShapeExporter(swf, beginShapes, endShapes, getCharacterId(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } else { - SHAPEWITHSTYLE shapes = getShapeAtRatio(ratio); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shapes, getCharacterId(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } - } - - @Override - public int getNumFrames() { - return 65536; - } - - @Override - public boolean isSingleFrame() { - // Morpshape is a single frame specified with the ratio - return true; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline(swf, stroked)); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasMorphShapeExporter cmse = new CanvasMorphShapeExporter(swf, getShapeAtRatio(0), getShapeAtRatio(MAX_RATIO), null, unitDivisor, 0, 0); - cmse.export(); - result.append(cmse.getShapeData()); - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.morphshape.CanvasMorphShapeExporter; +import com.jpexs.decompiler.flash.exporters.morphshape.SVGMorphShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MORPHFILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.MORPHLINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.decompiler.flash.types.shaperecords.CurvedEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Shape; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public abstract class MorphShapeTag extends DrawableTag { + + public static final int MAX_RATIO = 65535; + + @SWFType(BasicType.UI16) + public int characterId; + + public RECT startBounds; + + public RECT endBounds; + + public MORPHFILLSTYLEARRAY morphFillStyles; + + public MORPHLINESTYLEARRAY morphLineStyles; + + public SHAPE startEdges; + + public SHAPE endEdges; + + public MorphShapeTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract int getShapeNum(); + + @Override + public RECT getRect() { + return getRect(new HashSet<>()); + } + + @Override + public void getNeededCharacters(Set needed) { + morphFillStyles.getNeededCharacters(needed); + startEdges.getNeededCharacters(needed); + endEdges.getNeededCharacters(needed); + } + + @Override + public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { + boolean modified = false; + modified |= morphFillStyles.replaceCharacter(oldCharacterId, newCharacterId); + modified |= startEdges.replaceCharacter(oldCharacterId, newCharacterId); + modified |= endEdges.replaceCharacter(oldCharacterId, newCharacterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public boolean removeCharacter(int characterId) { + boolean modified = false; + modified |= morphFillStyles.removeCharacter(characterId); + modified |= startEdges.removeCharacter(characterId); + modified |= endEdges.removeCharacter(characterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public int getCharacterId() { + return characterId; + } + + @Override + public void setCharacterId(int characterId) { + this.characterId = characterId; + } + + @Override + public RECT getRect(Set added) { + RECT rect = new RECT(); + rect.Xmin = Math.min(startBounds.Xmin, endBounds.Xmin); + rect.Ymin = Math.min(startBounds.Ymin, endBounds.Ymin); + rect.Xmax = Math.max(startBounds.Xmax, endBounds.Xmax); + rect.Ymax = Math.max(startBounds.Ymax, endBounds.Ymax); + return rect; + } + + public RECT getStartBounds() { + return startBounds; + } + + public RECT getEndBounds() { + return endBounds; + } + + public MORPHFILLSTYLEARRAY getFillStyles() { + return morphFillStyles; + } + + public MORPHLINESTYLEARRAY getLineStyles() { + return morphLineStyles; + } + + public SHAPE getStartEdges() { + return startEdges; + } + + public SHAPE getEndEdges() { + return endEdges; + } + + public SHAPEWITHSTYLE getShapeAtRatio(int ratio) { + List finalRecords = new ArrayList<>(); + FILLSTYLEARRAY fillStyles = morphFillStyles.getFillStylesAt(ratio); + LINESTYLEARRAY lineStyles = morphLineStyles.getLineStylesAt(getShapeNum(), ratio); + + int startPosX = 0, startPosY = 0; + int endPosX = 0, endPosY = 0; + int posX = 0, posY = 0; + + for (int startIndex = 0, endIndex = 0; + startIndex < startEdges.shapeRecords.size() + && endIndex < endEdges.shapeRecords.size(); startIndex++, endIndex++) { + + SHAPERECORD edge1 = startEdges.shapeRecords.get(startIndex); + SHAPERECORD edge2 = endEdges.shapeRecords.get(endIndex); + if (edge1 instanceof StyleChangeRecord || edge2 instanceof StyleChangeRecord) { + StyleChangeRecord scr1; + if (edge1 instanceof StyleChangeRecord) { + scr1 = (StyleChangeRecord) edge1; + if (scr1.stateMoveTo) { + startPosX = scr1.moveDeltaX; + startPosY = scr1.moveDeltaY; + } + } else { + scr1 = new StyleChangeRecord(); + startIndex--; + } + StyleChangeRecord scr2; + if (edge2 instanceof StyleChangeRecord) { + scr2 = (StyleChangeRecord) edge2; + if (scr2.stateMoveTo) { + endPosX = scr2.moveDeltaX; + endPosY = scr2.moveDeltaY; + } + } else { + scr2 = new StyleChangeRecord(); + endIndex--; + } + StyleChangeRecord scr = scr1.clone(); + if (scr1.stateMoveTo || scr2.stateMoveTo) { + scr.moveDeltaX = startPosX + (endPosX - startPosX) * ratio / MAX_RATIO; + scr.moveDeltaY = startPosY + (endPosY - startPosY) * ratio / MAX_RATIO; + scr.stateMoveTo = scr.moveDeltaX != posX || scr.moveDeltaY != posY; + } + finalRecords.add(scr); + continue; + } + + if (edge1 instanceof EndShapeRecord) { + finalRecords.add(edge1); + break; + } + if (edge2 instanceof EndShapeRecord) { + finalRecords.add(edge2); + break; + } + + if (edge1 instanceof CurvedEdgeRecord || edge2 instanceof CurvedEdgeRecord) { + CurvedEdgeRecord cer1 = null; + if (edge1 instanceof CurvedEdgeRecord) { + cer1 = (CurvedEdgeRecord) edge1; + } else if (edge1 instanceof StraightEdgeRecord) { + cer1 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge1); + } + CurvedEdgeRecord cer2 = null; + if (edge2 instanceof CurvedEdgeRecord) { + cer2 = (CurvedEdgeRecord) edge2; + } else if (edge2 instanceof StraightEdgeRecord) { + cer2 = SHAPERECORD.straightToCurve((StraightEdgeRecord) edge2); + } + if ((cer2 == null) || (cer1 == null)) { + continue; + } + CurvedEdgeRecord cer = new CurvedEdgeRecord(); + cer.controlDeltaX = cer1.controlDeltaX + (cer2.controlDeltaX - cer1.controlDeltaX) * ratio / MAX_RATIO; + cer.controlDeltaY = cer1.controlDeltaY + (cer2.controlDeltaY - cer1.controlDeltaY) * ratio / MAX_RATIO; + cer.anchorDeltaX = cer1.anchorDeltaX + (cer2.anchorDeltaX - cer1.anchorDeltaX) * ratio / MAX_RATIO; + cer.anchorDeltaY = cer1.anchorDeltaY + (cer2.anchorDeltaY - cer1.anchorDeltaY) * ratio / MAX_RATIO; + startPosX += cer1.controlDeltaX + cer1.anchorDeltaX; + startPosY += cer1.controlDeltaY + cer1.anchorDeltaY; + endPosX += cer2.controlDeltaX + cer2.anchorDeltaX; + endPosY += cer2.controlDeltaY + cer2.anchorDeltaY; + posX += cer.controlDeltaX + cer.anchorDeltaX; + posY += cer.controlDeltaY + cer.anchorDeltaY; + finalRecords.add(cer); + } else { + StraightEdgeRecord ser1 = null; + if (edge1 instanceof StraightEdgeRecord) { + ser1 = (StraightEdgeRecord) edge1; + } + StraightEdgeRecord ser2 = null; + if (edge2 instanceof StraightEdgeRecord) { + ser2 = (StraightEdgeRecord) edge2; + } + if ((ser2 == null) || (ser1 == null)) { + continue; + } + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.generalLineFlag = true; + ser.vertLineFlag = false; + ser.deltaX = ser1.deltaX + (ser2.deltaX - ser1.deltaX) * ratio / MAX_RATIO; + ser.deltaY = ser1.deltaY + (ser2.deltaY - ser1.deltaY) * ratio / MAX_RATIO; + startPosX += ser1.deltaX; + startPosY += ser1.deltaY; + endPosX += ser2.deltaX; + endPosY += ser2.deltaY; + posX += ser.deltaX; + posY += ser.deltaX; + finalRecords.add(ser); + } + } + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = fillStyles; + shape.lineStyles = lineStyles; + shape.shapeRecords = finalRecords; + return shape; + } + + @Override + public int getUsedParameters() { + return PARAMETER_RATIO; + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + SHAPEWITHSTYLE shape = getShapeAtRatio(ratio); + // morphShape using shapeNum=3, morphShape2 using shapeNum=4 + // todo: Currently the generated image is not cached, because the cache + // key contains the hashCode of the finalRecord object, and it is always + // recreated + BitmapExporter.export(swf, shape, null, image, transformation, strokeTransformation, colorTransform); + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) { + if (ratio == -2) { + SHAPEWITHSTYLE beginShapes = getShapeAtRatio(0); + SHAPEWITHSTYLE endShapes = getShapeAtRatio(65535); + SVGMorphShapeExporter shapeExporter = new SVGMorphShapeExporter(swf, beginShapes, endShapes, getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } else { + SHAPEWITHSTYLE shapes = getShapeAtRatio(ratio); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shapes, getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + } + + @Override + public int getNumFrames() { + return 65536; + } + + @Override + public boolean isSingleFrame() { + // Morpshape is a single frame specified with the ratio + return true; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline(swf, stroked)); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasMorphShapeExporter cmse = new CanvasMorphShapeExporter(swf, getShapeAtRatio(0), getShapeAtRatio(MAX_RATIO), null, unitDivisor, 0, 0); + cmse.export(); + result.append(cmse.getShapeData()); + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java index e8aacc204..0b2132a18 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java @@ -1,213 +1,213 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFInputStream; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.PathExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.LazyObject; -import com.jpexs.decompiler.flash.types.BasicType; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.annotations.SWFType; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import java.awt.Graphics2D; -import java.awt.Shape; -import java.awt.geom.AffineTransform; -import java.awt.geom.GeneralPath; -import java.awt.geom.PathIterator; -import java.io.IOException; -import java.util.List; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public abstract class ShapeTag extends DrawableTag implements LazyObject { - - @SWFType(BasicType.UI16) - public int shapeId; - - public RECT shapeBounds; - - public SHAPEWITHSTYLE shapes; - - protected ByteArrayRange shapeData; - - private final int markerSize = 10; - - public ShapeTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - @Override - public void load() { - getShapes(); - } - - public abstract int getShapeNum(); - - public SHAPEWITHSTYLE getShapes() { - if (shapes == null && shapeData != null) { - try { - SWFInputStream sis = new SWFInputStream(swf, shapeData.getArray(), 0, shapeData.getPos() + shapeData.getLength()); - sis.seek(shapeData.getPos()); - shapes = sis.readSHAPEWITHSTYLE(getShapeNum(), false, "shapes"); - shapeData = null; // not needed anymore, give it to GC - } catch (IOException ex) { - Logger.getLogger(ShapeTag.class.getName()).log(Level.SEVERE, null, ex); - } - } - - return shapes; - } - - @Override - public void getNeededCharacters(Set needed) { - SHAPEWITHSTYLE shapes = getShapes(); - if (shapes != null) { - getShapes().getNeededCharacters(needed); - } - } - - @Override - public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { - boolean modified = getShapes().replaceCharacter(oldCharacterId, newCharacterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public boolean removeCharacter(int characterId) { - boolean modified = getShapes().removeCharacter(characterId); - if (modified) { - setModified(true); - } - return modified; - } - - @Override - public RECT getRect(Set added) { - return shapeBounds; - } - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - @Override - public int getUsedParameters() { - return 0; - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - return transformation.toTransform().createTransformedShape(getShapes().getOutline(swf, stroked)); - } - - @Override - public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { - BitmapExporter.export(swf, getShapes(), null, image, transformation, strokeTransformation, colorTransform); - if (Configuration._debugMode.get()) { // show control points - List paths = PathExporter.export(swf, getShapes()); - double[] coords = new double[6]; - AffineTransform at = transformation.toTransform(); - at.preConcatenate(AffineTransform.getScaleInstance(1 / SWF.unitDivisor, 1 / SWF.unitDivisor)); - - // get the graphics from the inner image object, because it creates a new Graphics object - Graphics2D graphics = (Graphics2D) image.getBufferedImage().getGraphics(); - graphics.setPaint(Color.black); - for (GeneralPath path : paths) { - PathIterator iterator = path.getPathIterator(at); - while (!iterator.isDone()) { - int type = iterator.currentSegment(coords); - double x = coords[0]; - double y = coords[1]; - switch (type) { - case PathIterator.SEG_MOVETO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_LINETO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_QUADTO: - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - x = coords[2]; - y = coords[3]; - graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); - break; - case PathIterator.SEG_CUBICTO: - System.out.print("CUBICTO NOT SUPPORTED. "); - break; - case PathIterator.SEG_CLOSE: - System.out.print("CLOSE NOT SUPPORTED. "); - break; - } - iterator.next(); - } - } - } - } - - @Override - public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShapes(), getCharacterId(), exporter, null, colorTransform, 1); - shapeExporter.export(); - } - - @Override - public void toHtmlCanvas(StringBuilder result, double unitDivisor) { - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShapes(), null, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - } - - @Override - public int getNumFrames() { - return 1; - } - - @Override - public boolean isSingleFrame() { - return true; - } - - @Override - public int getCharacterId() { - return shapeId; - } - - @Override - public void setCharacterId(int characterId) { - this.shapeId = characterId; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFInputStream; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.PathExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.LazyObject; +import com.jpexs.decompiler.flash.types.BasicType; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.annotations.SWFType; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.geom.GeneralPath; +import java.awt.geom.PathIterator; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public abstract class ShapeTag extends DrawableTag implements LazyObject { + + @SWFType(BasicType.UI16) + public int shapeId; + + public RECT shapeBounds; + + public SHAPEWITHSTYLE shapes; + + protected ByteArrayRange shapeData; + + private final int markerSize = 10; + + public ShapeTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + @Override + public void load() { + getShapes(); + } + + public abstract int getShapeNum(); + + public SHAPEWITHSTYLE getShapes() { + if (shapes == null && shapeData != null) { + try { + SWFInputStream sis = new SWFInputStream(swf, shapeData.getArray(), 0, shapeData.getPos() + shapeData.getLength()); + sis.seek(shapeData.getPos()); + shapes = sis.readSHAPEWITHSTYLE(getShapeNum(), false, "shapes"); + shapeData = null; // not needed anymore, give it to GC + } catch (IOException ex) { + Logger.getLogger(ShapeTag.class.getName()).log(Level.SEVERE, null, ex); + } + } + + return shapes; + } + + @Override + public void getNeededCharacters(Set needed) { + SHAPEWITHSTYLE shapes = getShapes(); + if (shapes != null) { + getShapes().getNeededCharacters(needed); + } + } + + @Override + public boolean replaceCharacter(int oldCharacterId, int newCharacterId) { + boolean modified = getShapes().replaceCharacter(oldCharacterId, newCharacterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public boolean removeCharacter(int characterId) { + boolean modified = getShapes().removeCharacter(characterId); + if (modified) { + setModified(true); + } + return modified; + } + + @Override + public RECT getRect(Set added) { + return shapeBounds; + } + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + @Override + public int getUsedParameters() { + return 0; + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + return transformation.toTransform().createTransformedShape(getShapes().getOutline(swf, stroked)); + } + + @Override + public void toImage(int frame, int time, int ratio, RenderContext renderContext, SerializableImage image, boolean isClip, Matrix transformation, Matrix strokeTransformation, Matrix absoluteTransformation, ColorTransform colorTransform) { + BitmapExporter.export(swf, getShapes(), null, image, transformation, strokeTransformation, colorTransform); + if (Configuration._debugMode.get()) { // show control points + List paths = PathExporter.export(swf, getShapes()); + double[] coords = new double[6]; + AffineTransform at = transformation.toTransform(); + at.preConcatenate(AffineTransform.getScaleInstance(1 / SWF.unitDivisor, 1 / SWF.unitDivisor)); + + // get the graphics from the inner image object, because it creates a new Graphics object + Graphics2D graphics = (Graphics2D) image.getBufferedImage().getGraphics(); + graphics.setPaint(Color.black); + for (GeneralPath path : paths) { + PathIterator iterator = path.getPathIterator(at); + while (!iterator.isDone()) { + int type = iterator.currentSegment(coords); + double x = coords[0]; + double y = coords[1]; + switch (type) { + case PathIterator.SEG_MOVETO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_LINETO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_QUADTO: + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + x = coords[2]; + y = coords[3]; + graphics.drawRect((int) (x - markerSize / 2), (int) (y - markerSize / 2), markerSize, markerSize); + break; + case PathIterator.SEG_CUBICTO: + System.out.print("CUBICTO NOT SUPPORTED. "); + break; + case PathIterator.SEG_CLOSE: + System.out.print("CLOSE NOT SUPPORTED. "); + break; + } + iterator.next(); + } + } + } + } + + @Override + public void toSVG(SVGExporter exporter, int ratio, ColorTransform colorTransform, int level) throws IOException { + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, getShapes(), getCharacterId(), exporter, null, colorTransform, 1); + shapeExporter.export(); + } + + @Override + public void toHtmlCanvas(StringBuilder result, double unitDivisor) { + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, getShapes(), null, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + } + + @Override + public int getNumFrames() { + return 1; + } + + @Override + public boolean isSingleFrame() { + return true; + } + + @Override + public int getCharacterId() { + return shapeId; + } + + @Override + public void setCharacterId(int characterId) { + this.shapeId = characterId; + } +} diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index 2fec40855..f743c20ea 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -1,785 +1,785 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.tags.base; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.FontExporter; -import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; -import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; -import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; -import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; -import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; -import com.jpexs.decompiler.flash.helpers.HighlightedText; -import com.jpexs.decompiler.flash.importers.TextImportResizeTextBoundsMode; -import com.jpexs.decompiler.flash.tags.text.JustifyAlignGlyphEntry; -import com.jpexs.decompiler.flash.tags.text.TextAlign; -import com.jpexs.decompiler.flash.tags.text.TextParseException; -import com.jpexs.decompiler.flash.types.ColorTransform; -import com.jpexs.decompiler.flash.types.DynamicTextGlyphEntry; -import com.jpexs.decompiler.flash.types.FILLSTYLE; -import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; -import com.jpexs.decompiler.flash.types.GLYPHENTRY; -import com.jpexs.decompiler.flash.types.LINESTYLE; -import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; -import com.jpexs.decompiler.flash.types.MATRIX; -import com.jpexs.decompiler.flash.types.RECT; -import com.jpexs.decompiler.flash.types.RGB; -import com.jpexs.decompiler.flash.types.RGBA; -import com.jpexs.decompiler.flash.types.SHAPE; -import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; -import com.jpexs.decompiler.flash.types.TEXTRECORD; -import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; -import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; -import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; -import com.jpexs.helpers.ByteArrayRange; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.SerializableImage; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.font.LineMetrics; -import java.awt.font.TextAttribute; -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.w3c.dom.Element; - -/** - * - * @author JPEXS - */ -public abstract class TextTag extends DrawableTag { - - public TextTag(SWF swf, int id, String name, ByteArrayRange data) { - super(swf, id, name, data); - } - - public abstract MATRIX getTextMatrix(); - - public abstract List getTexts(); - - public abstract List getFontIds(); - - public abstract HighlightedText getFormattedText(boolean ignoreLetterSpacing); - - // use the texts from the "texts" argument when it is not null - public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; - - public abstract void updateTextBounds(); - - public abstract boolean alignText(TextAlign textAlign); - - public abstract boolean translateText(int diff); - - public abstract RECT getBounds(); - - public abstract void setBounds(RECT r); - - public abstract ExportRectangle calculateTextBounds(); - - @Override - public RECT getRect() { - return getRect(null); // parameter not used - } - - private static void updateRect(RECT ret, int x, int y) { - if (x < ret.Xmin) { - ret.Xmin = x; - } - if (x > ret.Xmax) { - ret.Xmax = x; - } - if (y < ret.Ymin) { - ret.Ymin = y; - } - if (y > ret.Ymax) { - ret.Ymax = y; - } - } - - public static void alignText(SWF swf, List textRecords, TextAlign textAlign) { - // Remove Justify align entries - for (TEXTRECORD tr : textRecords) { - for (int i = 0; i < tr.glyphEntries.size(); i++) { - GLYPHENTRY ge = tr.glyphEntries.get(i); - if (ge instanceof JustifyAlignGlyphEntry) { - JustifyAlignGlyphEntry jge = (JustifyAlignGlyphEntry) ge; - ge = new GLYPHENTRY(); - ge.glyphAdvance = jge.originalAdvance; - ge.glyphIndex = jge.glyphIndex; - tr.glyphEntries.set(i, ge); - } - } - } - - int xMin = Integer.MAX_VALUE; - int maxWidth = 0; - for (TEXTRECORD tr : textRecords) { - int xOffset = tr.styleFlagsHasXOffset ? tr.xOffset : 0; - if (xOffset < xMin) { - xMin = xOffset; - } - - int width = tr.getTotalAdvance(); - - if (width > maxWidth) { - maxWidth = width; - } - } - - FontTag font = null; - - for (TEXTRECORD tr : textRecords) { - if (tr.styleFlagsHasFont) { - FontTag font2 = swf.getFont(tr.fontId); - if (font2 != null) { - font = font2; - } - } - - int width = tr.getTotalAdvance(); - switch (textAlign) { - case LEFT: - tr.xOffset = xMin; - tr.styleFlagsHasXOffset = true; - break; - case CENTER: - tr.xOffset = xMin + (maxWidth - width) / 2; - tr.styleFlagsHasXOffset = true; - break; - case RIGHT: - tr.xOffset = xMin + maxWidth - width; - tr.styleFlagsHasXOffset = true; - break; - case JUSTIFY: - tr.xOffset = xMin; - tr.styleFlagsHasXOffset = true; - - if (font != null) { - int diff = maxWidth - width; - if (diff > 0) { - int spaces = 0; - int spaces2 = 0; - int state = 0; - List glyphEntries = new ArrayList<>(); - List glyphEntries2 = new ArrayList<>(); - for (GLYPHENTRY ge : tr.glyphEntries) { - char ch = font.glyphToChar(ge.glyphIndex); - boolean whitespace = Character.isWhitespace(ch); - switch (state) { - case 0: - if (!whitespace) { - state = 1; - } - break; - case 1: - if (whitespace) { - spaces2++; - glyphEntries2.add(ge); - } else { - spaces += spaces2; - spaces2 = 0; - glyphEntries.addAll(glyphEntries2); - glyphEntries2.clear(); - } - break; - } - } - - if (spaces > 0 && glyphEntries.size() > 0) { - int fix = diff / spaces; - int remaining = diff - fix * spaces; - for (GLYPHENTRY ge : glyphEntries) { - int diff2 = fix; - if (remaining-- > 0) { - diff2++; - } - - JustifyAlignGlyphEntry jge = new JustifyAlignGlyphEntry(); - jge.originalAdvance = ge.glyphAdvance; - jge.glyphAdvance = ge.glyphAdvance + diff2; - jge.glyphIndex = ge.glyphIndex; - int idx = tr.glyphEntries.indexOf(ge); - tr.glyphEntries.set(idx, jge); - } - } - } - } - break; - } - } - } - - public static Map getTextRecordsAttributes(List list, SWF swf) { - Map att = new HashMap<>(); - RECT textBounds = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE); - FontTag font = null; - int x = 0; - int y = 0; - int textHeight = 12; - int lineSpacing = 0; - double leading = 0; - double ascent = 0; - double descent = 0; - double lineDistance = 0; - - List glyphs = null; - boolean firstLine = true; - double top = 0; - List allLeftMargins = new ArrayList<>(); - List allLetterSpacings = new ArrayList<>(); - FontMetrics fontMetrics; - BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); - Graphics graphics = bi.getGraphics(); - Font aFont = null; - int currentLeftMargin; - for (int r = 0; r < list.size(); r++) { - TEXTRECORD rec = list.get(r); - if (rec.styleFlagsHasFont) { - FontTag font2 = swf.getFont(rec.fontId); - if (font2 != null) { - font = font2; - } - textHeight = rec.textHeight; - if (font == null) { - Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Font with id=" + rec.fontId + " was not found."); - continue; - } - - glyphs = font.getGlyphShapeTable(); - - if (!font.hasLayout()) { - String fontName = FontTag.getFontNameWithFallback(font.getFontNameIntag()); - aFont = new Font(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor)); - - Map attr = new HashMap<>(); - - attr.put(TextAttribute.KERNING, TextAttribute.KERNING_ON); - attr.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); - aFont = aFont.deriveFont(attr); - - fontMetrics = graphics.getFontMetrics(aFont); - LineMetrics lm = fontMetrics.getLineMetrics("A", graphics); - ascent = lm.getAscent(); - descent = lm.getDescent(); - leading = lm.getLeading(); - lineDistance = ascent + descent; - } else { - leading = ((double) font.getLeading() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - ascent = ((double) font.getAscent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - descent = ((double) font.getDescent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); - lineDistance = ascent + descent; - } - } - currentLeftMargin = 0; - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - currentLeftMargin = x; - } - if (rec.styleFlagsHasYOffset) { - if (!firstLine) { - top += ascent + descent; - int topint = (int) (Math.round(top) * SWF.unitDivisor); - lineSpacing = rec.yOffset - topint; - top += lineSpacing / SWF.unitDivisor; - } else { - top = ascent; - } - y = rec.yOffset; - } - - firstLine = false; - allLeftMargins.add(currentLeftMargin); - - if (glyphs == null) { - Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Glyphs not found."); - continue; - } - - int letterSpacing = Integer.MAX_VALUE; - for (int e = 0; e < rec.glyphEntries.size(); e++) { - GLYPHENTRY entry = rec.glyphEntries.get(e); - GLYPHENTRY nextEntry = null; - if (e < rec.glyphEntries.size() - 1) { - nextEntry = rec.glyphEntries.get(e + 1); - } - RECT rect = SHAPERECORD.getBounds(glyphs.get(entry.glyphIndex).shapeRecords); - rect.Xmax = (int) Math.round(((double) rect.Xmax * textHeight) / (font.getDivider() * 1024)); - rect.Xmin = (int) Math.round(((double) rect.Xmin * textHeight) / (font.getDivider() * 1024)); - rect.Ymax = (int) Math.round(((double) rect.Ymax * textHeight) / (font.getDivider() * 1024)); - rect.Ymin = (int) Math.round(((double) rect.Ymin * textHeight) / (font.getDivider() * 1024)); - updateRect(textBounds, x + rect.Xmin, y + rect.Ymin); - updateRect(textBounds, x + rect.Xmax, y + rect.Ymax); - int adv = entry.glyphAdvance; - - int defaultAdvance; - if (font.hasLayout()) { - int kerningAdjustment = 0; - if (nextEntry != null) { - kerningAdjustment = font.getGlyphKerningAdjustment(entry.glyphIndex, nextEntry.glyphIndex); - } - defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); - } else { - defaultAdvance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(aFont, font.glyphToChar(entry.glyphIndex), nextEntry == null ? null : font.glyphToChar(nextEntry.glyphIndex))); - } - int newLetterSpacing = adv - defaultAdvance; - if (e == 0 || e == rec.glyphEntries.size() - 1) { - if (rec.glyphEntries.size() == 1) { - letterSpacing = 0; - } - } else if (newLetterSpacing < letterSpacing) { - letterSpacing = newLetterSpacing; - } - x += adv; - } - allLetterSpacings.add(letterSpacing); - } - att.put("indent", 0); //? - att.put("rightMargin", 0); //? - att.put("lineSpacing", lineSpacing); - att.put("textBounds", textBounds); - att.put("allLeftMargins", allLeftMargins); - att.put("allLetterSpacings", allLetterSpacings); - return att; - } - - public static SHAPE getBorderShape(RGB borderColor, RGB fillColor, RECT rect) { - SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); - shape.fillStyles = new FILLSTYLEARRAY(); - if (fillColor != null) { - shape.fillStyles.fillStyles = new FILLSTYLE[1]; - FILLSTYLE fillStyle = new FILLSTYLE(); - fillStyle.fillStyleType = FILLSTYLE.SOLID; - fillStyle.color = fillColor; - shape.fillStyles.fillStyles[0] = fillStyle; - } else { - shape.fillStyles.fillStyles = new FILLSTYLE[0]; - } - shape.lineStyles = new LINESTYLEARRAY(); - shape.lineStyles.lineStyles = new LINESTYLE[1]; - LINESTYLE lineStyle = new LINESTYLE(); - lineStyle.color = borderColor; - lineStyle.width = 20; - shape.lineStyles.lineStyles[0] = lineStyle; - shape.shapeRecords = new ArrayList<>(); - StyleChangeRecord style = new StyleChangeRecord(); - style.lineStyle = 1; - style.stateLineStyle = true; - if (fillColor != null) { - style.stateFillStyle0 = true; - style.fillStyle0 = 1; - } - style.stateMoveTo = true; - shape.shapeRecords.add(style); - StraightEdgeRecord top = new StraightEdgeRecord(); - top.generalLineFlag = true; - top.deltaX = rect.getWidth(); - StraightEdgeRecord right = new StraightEdgeRecord(); - right.generalLineFlag = true; - right.deltaY = rect.getHeight(); - StraightEdgeRecord bottom = new StraightEdgeRecord(); - bottom.generalLineFlag = true; - bottom.deltaX = -rect.getWidth(); - StraightEdgeRecord left = new StraightEdgeRecord(); - left.generalLineFlag = true; - left.deltaY = -rect.getHeight(); - shape.shapeRecords.add(top); - shape.shapeRecords.add(right); - shape.shapeRecords.add(bottom); - shape.shapeRecords.add(left); - shape.shapeRecords.add(new EndShapeRecord()); - return shape; - } - - public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { - Graphics2D g = (Graphics2D) image.getGraphics(); - Matrix mat = transformation.clone(); - mat = mat.concatenate(new Matrix(textMatrix)); - BitmapExporter.export(swf, getBorderShape(borderColor, fillColor, rect), null, image, mat, mat, colorTransform); - } - - public static void drawBorderHtmlCanvas(SWF swf, StringBuilder result, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double unitDivisor) { - Matrix mat = new Matrix(textMatrix); - result.append("\tctx.save();\r\n"); - result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); - SHAPE shape = getBorderShape(borderColor, fillColor, rect); - CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, shape, colorTransform, 0, 0); - cse.export(); - result.append(cse.getShapeData()); - result.append("\tctx.restore();\r\n"); - } - - public static void drawBorderSVG(SWF swf, SVGExporter exporter, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { - exporter.createSubGroup(new Matrix(textMatrix), null); - SHAPE shape = getBorderShape(borderColor, fillColor, rect); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); - shapeExporter.export(); - exporter.endGroup(); - } - - public static void staticTextToImage(SWF swf, List textRecords, int numText, SerializableImage image, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { - int textColor = 0; - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = null; - Matrix mat0 = transformation.clone(); - mat0 = mat0.concatenate(new Matrix(textMatrix)); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - FontTag font2 = swf.getFont(rec.fontId); - if (font2 != null) { - font = font2; - } - glyphs = font == null ? null : font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double divider = font == null ? 1 : font.getDivider(); - double rat = textHeight / 1024.0 / divider; - - Matrix matScale = Matrix.getScaleInstance(rat); - Color textColor2 = new Color(textColor, true); - for (GLYPHENTRY entry : rec.glyphEntries) { - matScale.translateX = x; - matScale.translateY = y; - - Matrix mat = mat0.concatenate(matScale); - SHAPE shape = null; - if (entry.glyphIndex != -1 && glyphs != null) { - // shapeNum: 1 - shape = glyphs.get(entry.glyphIndex); - } else if (entry instanceof DynamicTextGlyphEntry) { - DynamicTextGlyphEntry dynamicEntry = (DynamicTextGlyphEntry) entry; - if (dynamicEntry.fontFace != null) { - FontTag fnt = swf.getFontByName(dynamicEntry.fontFace); - if (fnt != null && entry.glyphIndex != -1) { - shape = fnt.getGlyphShapeTable().get(entry.glyphIndex); - } else { - shape = SHAPERECORD.fontCharacterToSHAPE(new Font(dynamicEntry.fontFace, dynamicEntry.fontStyle, 12), (int) Math.round(divider * 1024), dynamicEntry.character); - } - } - } - - if (shape != null) { - BitmapExporter.export(swf, shape, textColor2, image, mat, mat, colorTransform); - if (SHAPERECORD.DRAW_BOUNDING_BOX) { - RGB borderColor = new RGBA(Color.black); - RGB fillColor = new RGBA(new Color(255, 255, 255, 0)); - RECT bounds = shape.getBounds(); - mat = Matrix.getTranslateInstance(bounds.Xmin, bounds.Ymin).preConcatenate(mat); - TextTag.drawBorder(swf, image, borderColor, fillColor, bounds, new MATRIX(), mat, colorTransform); - } - } - - x += entry.glyphAdvance; - } - } - } - - public static ExportRectangle calculateTextBounds(SWF swf, List textRecords, MATRIX textMatrix) { - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = null; - ExportRectangle result = null; - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - glyphs = font == null ? null : font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double rat = textHeight / 1024.0 / (font == null ? 1 : font.getDivider()); - - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = new Matrix(); - mat = mat.concatenate(new Matrix(textMatrix)); - Matrix matTr = Matrix.getTranslateInstance(x, y); - mat = mat.concatenate(matTr); - mat = mat.concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1 && glyphs != null) { - // shapeNum: 1 - SHAPE shape = glyphs.get(entry.glyphIndex); - RECT glyphBounds = shape.getBounds(); - int glyphWidth = glyphBounds.getWidth(); - int glyphHeight = glyphBounds.getHeight(); - glyphBounds.Xmin -= glyphWidth / 2; - glyphBounds.Ymin -= glyphHeight / 2; - glyphBounds.Xmax += glyphWidth; - glyphBounds.Ymax += glyphHeight; - if (glyphBounds.Xmax > glyphBounds.Xmin && glyphBounds.Ymax > glyphBounds.Ymin) { - ExportRectangle rect = mat.transform(new ExportRectangle(glyphBounds)); - if (result == null) { - result = rect; - } else { - result.xMin = Math.min(result.xMin, rect.xMin); - result.yMin = Math.min(result.yMin, rect.yMin); - result.xMax = Math.max(result.xMax, rect.xMax); - result.yMax = Math.max(result.yMax, rect.yMax); - } - } - x += entry.glyphAdvance; - } - } - } - - return result; - } - - protected void updateTextBounds(RECT textBounds) { - TextImportResizeTextBoundsMode resizeMode = Configuration.textImportResizeTextBoundsMode.get(); - if (resizeMode != null && (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY) || resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK))) { - ExportRectangle newBounds = calculateTextBounds(); - if (newBounds != null) { - int xMin = (int) Math.floor(newBounds.xMin); - int yMin = (int) Math.floor(newBounds.yMin); - int xMax = (int) Math.ceil(newBounds.xMax); - int yMax = (int) Math.ceil(newBounds.yMax); - if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY)) { - textBounds.Xmin = Math.min(xMin, textBounds.Xmin); - textBounds.Ymin = Math.min(yMin, textBounds.Ymin); - textBounds.Xmax = Math.max(xMax, textBounds.Xmax); - textBounds.Ymax = Math.max(yMax, textBounds.Ymax); - } else if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK)) { - textBounds.Xmin = xMin; - textBounds.Ymin = yMin; - textBounds.Xmax = xMax; - textBounds.Ymax = yMax; - } - } - } - } - - public static void staticTextToHtmlCanvas(double unitDivisor, SWF swf, List textRecords, int numText, StringBuilder result, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { - int textColor = 0; - FontTag font = null; - int fontId = -1; - int textHeight = 12; - int x = 0; - int y = 0; - - List glyphs = new ArrayList<>(); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - fontId = rec.fontId; - glyphs = font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - if (rec.styleFlagsHasXOffset) { - x = rec.xOffset; - } - if (rec.styleFlagsHasYOffset) { - y = rec.yOffset; - } - - double rat = textHeight / 1024.0 / font.getDivider(); - - result.append("\tvar textColor = ").append(CanvasShapeExporter.color(textColor)).append(";\r\n"); - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x, y))).concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1) { - // shapeNum: 1 - result.append("\tctx.save();\r\n"); - result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); - result.append("\tfont").append(fontId).append("(ctx,\"").append(("" + font.glyphToChar(entry.glyphIndex)).replace("\\", "\\\\").replace("\"", "\\\"")).append("\",textColor);\r\n"); - result.append("\tctx.restore();\r\n"); - x += entry.glyphAdvance; - } - } - } - } - - public static void staticTextToSVG(SWF swf, List textRecords, int numText, SVGExporter exporter, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { - int textColor = 0; - FontTag font = null; - int textHeight = 12; - int x = 0; - int y = 0; - List glyphs = new ArrayList<>(); - for (TEXTRECORD rec : textRecords) { - if (rec.styleFlagsHasColor) { - if (numText == 2) { - textColor = rec.textColorA.toInt(); - } else { - textColor = rec.textColor.toInt(); - } - - if (colorTransform != null) { - textColor = colorTransform.apply(textColor); - } - } - if (rec.styleFlagsHasFont) { - font = swf.getFont(rec.fontId); - glyphs = font.getGlyphShapeTable(); - textHeight = rec.textHeight; - } - int offsetX = 0; - int offsetY = 0; - if (rec.styleFlagsHasXOffset) { - offsetX = rec.xOffset; - x = offsetX; - } - if (rec.styleFlagsHasYOffset) { - offsetY = rec.yOffset; - y = offsetY; - } - - double rat = textHeight / 1024.0 / font.getDivider(); - - exporter.createSubGroup(new Matrix(textMatrix), null); - if (exporter.useTextTag) { - StringBuilder text = new StringBuilder(); - int totalAdvance = 0; - for (GLYPHENTRY entry : rec.glyphEntries) { - if (entry.glyphIndex != -1) { - char ch = font.glyphToChar(entry.glyphIndex); - text.append(ch); - totalAdvance += entry.glyphAdvance; - } - } - - boolean hasOffset = offsetX != 0 || offsetY != 0; - if (hasOffset) { - exporter.createSubGroup(Matrix.getTranslateInstance(offsetX, offsetY), null); - } - - Element textElement = exporter.createElement("text"); - textElement.setAttribute("font-size", Double.toString(rat * 1024)); - textElement.setAttribute("font-family", font.getFontNameIntag()); - textElement.setAttribute("textLength", Double.toString(totalAdvance / SWF.unitDivisor)); - textElement.setAttribute("lengthAdjust", "spacing"); - textElement.setTextContent(text.toString()); - - RGBA colorA = new RGBA(textColor); - textElement.setAttribute("fill", colorA.toHexRGB()); - if (colorA.alpha != 255) { - textElement.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - - exporter.addToGroup(textElement); - FontExportMode fontExportMode = FontExportMode.WOFF; - exporter.addStyle(font.getFontNameIntag(), new FontExporter().exportFont(font, fontExportMode), fontExportMode); - - if (hasOffset) { - exporter.endGroup(); - } - } else { - for (GLYPHENTRY entry : rec.glyphEntries) { - Matrix mat = Matrix.getTranslateInstance(x, y).concatenate(Matrix.getScaleInstance(rat)); - if (entry.glyphIndex != -1) { - // shapeNum: 1 - SHAPE shape = glyphs.get(entry.glyphIndex); - char ch = font.glyphToChar(entry.glyphIndex); - - String charId = null; - Map chs; - if (exporter.exportedChars.containsKey(font)) { - chs = exporter.exportedChars.get(font); - if (chs.containsKey(entry.glyphIndex)) { - charId = chs.get(entry.glyphIndex); - } - } else { - chs = new HashMap<>(); - exporter.exportedChars.put(font, chs); - } - - if (charId == null) { - charId = exporter.getUniqueId(Helper.getValidHtmlId("font_" + font.getFontNameIntag() + "_" + ch)); - exporter.createDefGroup(null, charId); - SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); - shapeExporter.export(); - if (!exporter.endGroup()) { - charId = ""; - } - - chs.put(entry.glyphIndex, charId); - } - - if (!"".equals(charId)) { - Element charImage = exporter.addUse(mat, bounds, charId, null); - RGBA colorA = new RGBA(textColor); - charImage.setAttribute("fill", colorA.toHexRGB()); - if (colorA.alpha != 255) { - charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); - } - } - - x += entry.glyphAdvance; - } - } - } - exporter.endGroup(); - } - } - - @Override - public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { - RECT r = getBounds(); - Shape shp = new Rectangle.Double(r.Xmin, r.Ymin, r.getWidth(), r.getHeight()); - return transformation.toTransform().createTransformedShape(shp); //TODO: match character shapes (?) - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.tags.base; + +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.FontExporter; +import com.jpexs.decompiler.flash.exporters.commonshape.ExportRectangle; +import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; +import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; +import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; +import com.jpexs.decompiler.flash.helpers.HighlightedText; +import com.jpexs.decompiler.flash.importers.TextImportResizeTextBoundsMode; +import com.jpexs.decompiler.flash.tags.text.JustifyAlignGlyphEntry; +import com.jpexs.decompiler.flash.tags.text.TextAlign; +import com.jpexs.decompiler.flash.tags.text.TextParseException; +import com.jpexs.decompiler.flash.types.ColorTransform; +import com.jpexs.decompiler.flash.types.DynamicTextGlyphEntry; +import com.jpexs.decompiler.flash.types.FILLSTYLE; +import com.jpexs.decompiler.flash.types.FILLSTYLEARRAY; +import com.jpexs.decompiler.flash.types.GLYPHENTRY; +import com.jpexs.decompiler.flash.types.LINESTYLE; +import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; +import com.jpexs.decompiler.flash.types.MATRIX; +import com.jpexs.decompiler.flash.types.RECT; +import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; +import com.jpexs.decompiler.flash.types.SHAPE; +import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; +import com.jpexs.decompiler.flash.types.TEXTRECORD; +import com.jpexs.decompiler.flash.types.shaperecords.EndShapeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.SHAPERECORD; +import com.jpexs.decompiler.flash.types.shaperecords.StraightEdgeRecord; +import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord; +import com.jpexs.helpers.ByteArrayRange; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.SerializableImage; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.font.LineMetrics; +import java.awt.font.TextAttribute; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.w3c.dom.Element; + +/** + * + * @author JPEXS + */ +public abstract class TextTag extends DrawableTag { + + public TextTag(SWF swf, int id, String name, ByteArrayRange data) { + super(swf, id, name, data); + } + + public abstract MATRIX getTextMatrix(); + + public abstract List getTexts(); + + public abstract List getFontIds(); + + public abstract HighlightedText getFormattedText(boolean ignoreLetterSpacing); + + // use the texts from the "texts" argument when it is not null + public abstract boolean setFormattedText(MissingCharacterHandler missingCharHandler, String formattedText, String[] texts) throws TextParseException; + + public abstract void updateTextBounds(); + + public abstract boolean alignText(TextAlign textAlign); + + public abstract boolean translateText(int diff); + + public abstract RECT getBounds(); + + public abstract void setBounds(RECT r); + + public abstract ExportRectangle calculateTextBounds(); + + @Override + public RECT getRect() { + return getRect(null); // parameter not used + } + + private static void updateRect(RECT ret, int x, int y) { + if (x < ret.Xmin) { + ret.Xmin = x; + } + if (x > ret.Xmax) { + ret.Xmax = x; + } + if (y < ret.Ymin) { + ret.Ymin = y; + } + if (y > ret.Ymax) { + ret.Ymax = y; + } + } + + public static void alignText(SWF swf, List textRecords, TextAlign textAlign) { + // Remove Justify align entries + for (TEXTRECORD tr : textRecords) { + for (int i = 0; i < tr.glyphEntries.size(); i++) { + GLYPHENTRY ge = tr.glyphEntries.get(i); + if (ge instanceof JustifyAlignGlyphEntry) { + JustifyAlignGlyphEntry jge = (JustifyAlignGlyphEntry) ge; + ge = new GLYPHENTRY(); + ge.glyphAdvance = jge.originalAdvance; + ge.glyphIndex = jge.glyphIndex; + tr.glyphEntries.set(i, ge); + } + } + } + + int xMin = Integer.MAX_VALUE; + int maxWidth = 0; + for (TEXTRECORD tr : textRecords) { + int xOffset = tr.styleFlagsHasXOffset ? tr.xOffset : 0; + if (xOffset < xMin) { + xMin = xOffset; + } + + int width = tr.getTotalAdvance(); + + if (width > maxWidth) { + maxWidth = width; + } + } + + FontTag font = null; + + for (TEXTRECORD tr : textRecords) { + if (tr.styleFlagsHasFont) { + FontTag font2 = swf.getFont(tr.fontId); + if (font2 != null) { + font = font2; + } + } + + int width = tr.getTotalAdvance(); + switch (textAlign) { + case LEFT: + tr.xOffset = xMin; + tr.styleFlagsHasXOffset = true; + break; + case CENTER: + tr.xOffset = xMin + (maxWidth - width) / 2; + tr.styleFlagsHasXOffset = true; + break; + case RIGHT: + tr.xOffset = xMin + maxWidth - width; + tr.styleFlagsHasXOffset = true; + break; + case JUSTIFY: + tr.xOffset = xMin; + tr.styleFlagsHasXOffset = true; + + if (font != null) { + int diff = maxWidth - width; + if (diff > 0) { + int spaces = 0; + int spaces2 = 0; + int state = 0; + List glyphEntries = new ArrayList<>(); + List glyphEntries2 = new ArrayList<>(); + for (GLYPHENTRY ge : tr.glyphEntries) { + char ch = font.glyphToChar(ge.glyphIndex); + boolean whitespace = Character.isWhitespace(ch); + switch (state) { + case 0: + if (!whitespace) { + state = 1; + } + break; + case 1: + if (whitespace) { + spaces2++; + glyphEntries2.add(ge); + } else { + spaces += spaces2; + spaces2 = 0; + glyphEntries.addAll(glyphEntries2); + glyphEntries2.clear(); + } + break; + } + } + + if (spaces > 0 && glyphEntries.size() > 0) { + int fix = diff / spaces; + int remaining = diff - fix * spaces; + for (GLYPHENTRY ge : glyphEntries) { + int diff2 = fix; + if (remaining-- > 0) { + diff2++; + } + + JustifyAlignGlyphEntry jge = new JustifyAlignGlyphEntry(); + jge.originalAdvance = ge.glyphAdvance; + jge.glyphAdvance = ge.glyphAdvance + diff2; + jge.glyphIndex = ge.glyphIndex; + int idx = tr.glyphEntries.indexOf(ge); + tr.glyphEntries.set(idx, jge); + } + } + } + } + break; + } + } + } + + public static Map getTextRecordsAttributes(List list, SWF swf) { + Map att = new HashMap<>(); + RECT textBounds = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE); + FontTag font = null; + int x = 0; + int y = 0; + int textHeight = 12; + int lineSpacing = 0; + double leading = 0; + double ascent = 0; + double descent = 0; + double lineDistance = 0; + + List glyphs = null; + boolean firstLine = true; + double top = 0; + List allLeftMargins = new ArrayList<>(); + List allLetterSpacings = new ArrayList<>(); + FontMetrics fontMetrics; + BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + Graphics graphics = bi.getGraphics(); + Font aFont = null; + int currentLeftMargin; + for (int r = 0; r < list.size(); r++) { + TEXTRECORD rec = list.get(r); + if (rec.styleFlagsHasFont) { + FontTag font2 = swf.getFont(rec.fontId); + if (font2 != null) { + font = font2; + } + textHeight = rec.textHeight; + if (font == null) { + Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Font with id=" + rec.fontId + " was not found."); + continue; + } + + glyphs = font.getGlyphShapeTable(); + + if (!font.hasLayout()) { + String fontName = FontTag.getFontNameWithFallback(font.getFontNameIntag()); + aFont = new Font(fontName, font.getFontStyle(), (int) (textHeight / SWF.unitDivisor)); + + Map attr = new HashMap<>(); + + attr.put(TextAttribute.KERNING, TextAttribute.KERNING_ON); + attr.put(TextAttribute.LIGATURES, TextAttribute.LIGATURES_ON); + aFont = aFont.deriveFont(attr); + + fontMetrics = graphics.getFontMetrics(aFont); + LineMetrics lm = fontMetrics.getLineMetrics("A", graphics); + ascent = lm.getAscent(); + descent = lm.getDescent(); + leading = lm.getLeading(); + lineDistance = ascent + descent; + } else { + leading = ((double) font.getLeading() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + ascent = ((double) font.getAscent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + descent = ((double) font.getDescent() * textHeight / 1024.0 / font.getDivider() / SWF.unitDivisor); + lineDistance = ascent + descent; + } + } + currentLeftMargin = 0; + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + currentLeftMargin = x; + } + if (rec.styleFlagsHasYOffset) { + if (!firstLine) { + top += ascent + descent; + int topint = (int) (Math.round(top) * SWF.unitDivisor); + lineSpacing = rec.yOffset - topint; + top += lineSpacing / SWF.unitDivisor; + } else { + top = ascent; + } + y = rec.yOffset; + } + + firstLine = false; + allLeftMargins.add(currentLeftMargin); + + if (glyphs == null) { + Logger.getLogger(TextTag.class.getName()).log(Level.SEVERE, "Glyphs not found."); + continue; + } + + int letterSpacing = Integer.MAX_VALUE; + for (int e = 0; e < rec.glyphEntries.size(); e++) { + GLYPHENTRY entry = rec.glyphEntries.get(e); + GLYPHENTRY nextEntry = null; + if (e < rec.glyphEntries.size() - 1) { + nextEntry = rec.glyphEntries.get(e + 1); + } + RECT rect = SHAPERECORD.getBounds(glyphs.get(entry.glyphIndex).shapeRecords); + rect.Xmax = (int) Math.round(((double) rect.Xmax * textHeight) / (font.getDivider() * 1024)); + rect.Xmin = (int) Math.round(((double) rect.Xmin * textHeight) / (font.getDivider() * 1024)); + rect.Ymax = (int) Math.round(((double) rect.Ymax * textHeight) / (font.getDivider() * 1024)); + rect.Ymin = (int) Math.round(((double) rect.Ymin * textHeight) / (font.getDivider() * 1024)); + updateRect(textBounds, x + rect.Xmin, y + rect.Ymin); + updateRect(textBounds, x + rect.Xmax, y + rect.Ymax); + int adv = entry.glyphAdvance; + + int defaultAdvance; + if (font.hasLayout()) { + int kerningAdjustment = 0; + if (nextEntry != null) { + kerningAdjustment = font.getGlyphKerningAdjustment(entry.glyphIndex, nextEntry.glyphIndex); + } + defaultAdvance = (int) (Math.round(textHeight * (font.getGlyphAdvance(entry.glyphIndex) + kerningAdjustment) / (1024.0 * font.getDivider()))); + } else { + defaultAdvance = (int) Math.round(SWF.unitDivisor * FontTag.getSystemFontAdvance(aFont, font.glyphToChar(entry.glyphIndex), nextEntry == null ? null : font.glyphToChar(nextEntry.glyphIndex))); + } + int newLetterSpacing = adv - defaultAdvance; + if (e == 0 || e == rec.glyphEntries.size() - 1) { + if (rec.glyphEntries.size() == 1) { + letterSpacing = 0; + } + } else if (newLetterSpacing < letterSpacing) { + letterSpacing = newLetterSpacing; + } + x += adv; + } + allLetterSpacings.add(letterSpacing); + } + att.put("indent", 0); //? + att.put("rightMargin", 0); //? + att.put("lineSpacing", lineSpacing); + att.put("textBounds", textBounds); + att.put("allLeftMargins", allLeftMargins); + att.put("allLetterSpacings", allLetterSpacings); + return att; + } + + public static SHAPE getBorderShape(RGB borderColor, RGB fillColor, RECT rect) { + SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); + shape.fillStyles = new FILLSTYLEARRAY(); + if (fillColor != null) { + shape.fillStyles.fillStyles = new FILLSTYLE[1]; + FILLSTYLE fillStyle = new FILLSTYLE(); + fillStyle.fillStyleType = FILLSTYLE.SOLID; + fillStyle.color = fillColor; + shape.fillStyles.fillStyles[0] = fillStyle; + } else { + shape.fillStyles.fillStyles = new FILLSTYLE[0]; + } + shape.lineStyles = new LINESTYLEARRAY(); + shape.lineStyles.lineStyles = new LINESTYLE[1]; + LINESTYLE lineStyle = new LINESTYLE(); + lineStyle.color = borderColor; + lineStyle.width = 20; + shape.lineStyles.lineStyles[0] = lineStyle; + shape.shapeRecords = new ArrayList<>(); + StyleChangeRecord style = new StyleChangeRecord(); + style.lineStyle = 1; + style.stateLineStyle = true; + if (fillColor != null) { + style.stateFillStyle0 = true; + style.fillStyle0 = 1; + } + style.stateMoveTo = true; + shape.shapeRecords.add(style); + StraightEdgeRecord top = new StraightEdgeRecord(); + top.generalLineFlag = true; + top.deltaX = rect.getWidth(); + StraightEdgeRecord right = new StraightEdgeRecord(); + right.generalLineFlag = true; + right.deltaY = rect.getHeight(); + StraightEdgeRecord bottom = new StraightEdgeRecord(); + bottom.generalLineFlag = true; + bottom.deltaX = -rect.getWidth(); + StraightEdgeRecord left = new StraightEdgeRecord(); + left.generalLineFlag = true; + left.deltaY = -rect.getHeight(); + shape.shapeRecords.add(top); + shape.shapeRecords.add(right); + shape.shapeRecords.add(bottom); + shape.shapeRecords.add(left); + shape.shapeRecords.add(new EndShapeRecord()); + return shape; + } + + public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { + Graphics2D g = (Graphics2D) image.getGraphics(); + Matrix mat = transformation.clone(); + mat = mat.concatenate(new Matrix(textMatrix)); + BitmapExporter.export(swf, getBorderShape(borderColor, fillColor, rect), null, image, mat, mat, colorTransform); + } + + public static void drawBorderHtmlCanvas(SWF swf, StringBuilder result, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double unitDivisor) { + Matrix mat = new Matrix(textMatrix); + result.append("\tctx.save();\r\n"); + result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); + SHAPE shape = getBorderShape(borderColor, fillColor, rect); + CanvasShapeExporter cse = new CanvasShapeExporter(null, unitDivisor, swf, shape, colorTransform, 0, 0); + cse.export(); + result.append(cse.getShapeData()); + result.append("\tctx.restore();\r\n"); + } + + public static void drawBorderSVG(SWF swf, SVGExporter exporter, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { + exporter.createSubGroup(new Matrix(textMatrix), null); + SHAPE shape = getBorderShape(borderColor, fillColor, rect); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); + shapeExporter.export(); + exporter.endGroup(); + } + + public static void staticTextToImage(SWF swf, List textRecords, int numText, SerializableImage image, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { + int textColor = 0; + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = null; + Matrix mat0 = transformation.clone(); + mat0 = mat0.concatenate(new Matrix(textMatrix)); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + FontTag font2 = swf.getFont(rec.fontId); + if (font2 != null) { + font = font2; + } + glyphs = font == null ? null : font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double divider = font == null ? 1 : font.getDivider(); + double rat = textHeight / 1024.0 / divider; + + Matrix matScale = Matrix.getScaleInstance(rat); + Color textColor2 = new Color(textColor, true); + for (GLYPHENTRY entry : rec.glyphEntries) { + matScale.translateX = x; + matScale.translateY = y; + + Matrix mat = mat0.concatenate(matScale); + SHAPE shape = null; + if (entry.glyphIndex != -1 && glyphs != null) { + // shapeNum: 1 + shape = glyphs.get(entry.glyphIndex); + } else if (entry instanceof DynamicTextGlyphEntry) { + DynamicTextGlyphEntry dynamicEntry = (DynamicTextGlyphEntry) entry; + if (dynamicEntry.fontFace != null) { + FontTag fnt = swf.getFontByName(dynamicEntry.fontFace); + if (fnt != null && entry.glyphIndex != -1) { + shape = fnt.getGlyphShapeTable().get(entry.glyphIndex); + } else { + shape = SHAPERECORD.fontCharacterToSHAPE(new Font(dynamicEntry.fontFace, dynamicEntry.fontStyle, 12), (int) Math.round(divider * 1024), dynamicEntry.character); + } + } + } + + if (shape != null) { + BitmapExporter.export(swf, shape, textColor2, image, mat, mat, colorTransform); + if (SHAPERECORD.DRAW_BOUNDING_BOX) { + RGB borderColor = new RGBA(Color.black); + RGB fillColor = new RGBA(new Color(255, 255, 255, 0)); + RECT bounds = shape.getBounds(); + mat = Matrix.getTranslateInstance(bounds.Xmin, bounds.Ymin).preConcatenate(mat); + TextTag.drawBorder(swf, image, borderColor, fillColor, bounds, new MATRIX(), mat, colorTransform); + } + } + + x += entry.glyphAdvance; + } + } + } + + public static ExportRectangle calculateTextBounds(SWF swf, List textRecords, MATRIX textMatrix) { + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = null; + ExportRectangle result = null; + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + glyphs = font == null ? null : font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double rat = textHeight / 1024.0 / (font == null ? 1 : font.getDivider()); + + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = new Matrix(); + mat = mat.concatenate(new Matrix(textMatrix)); + Matrix matTr = Matrix.getTranslateInstance(x, y); + mat = mat.concatenate(matTr); + mat = mat.concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1 && glyphs != null) { + // shapeNum: 1 + SHAPE shape = glyphs.get(entry.glyphIndex); + RECT glyphBounds = shape.getBounds(); + int glyphWidth = glyphBounds.getWidth(); + int glyphHeight = glyphBounds.getHeight(); + glyphBounds.Xmin -= glyphWidth / 2; + glyphBounds.Ymin -= glyphHeight / 2; + glyphBounds.Xmax += glyphWidth; + glyphBounds.Ymax += glyphHeight; + if (glyphBounds.Xmax > glyphBounds.Xmin && glyphBounds.Ymax > glyphBounds.Ymin) { + ExportRectangle rect = mat.transform(new ExportRectangle(glyphBounds)); + if (result == null) { + result = rect; + } else { + result.xMin = Math.min(result.xMin, rect.xMin); + result.yMin = Math.min(result.yMin, rect.yMin); + result.xMax = Math.max(result.xMax, rect.xMax); + result.yMax = Math.max(result.yMax, rect.yMax); + } + } + x += entry.glyphAdvance; + } + } + } + + return result; + } + + protected void updateTextBounds(RECT textBounds) { + TextImportResizeTextBoundsMode resizeMode = Configuration.textImportResizeTextBoundsMode.get(); + if (resizeMode != null && (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY) || resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK))) { + ExportRectangle newBounds = calculateTextBounds(); + if (newBounds != null) { + int xMin = (int) Math.floor(newBounds.xMin); + int yMin = (int) Math.floor(newBounds.yMin); + int xMax = (int) Math.ceil(newBounds.xMax); + int yMax = (int) Math.ceil(newBounds.yMax); + if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_ONLY)) { + textBounds.Xmin = Math.min(xMin, textBounds.Xmin); + textBounds.Ymin = Math.min(yMin, textBounds.Ymin); + textBounds.Xmax = Math.max(xMax, textBounds.Xmax); + textBounds.Ymax = Math.max(yMax, textBounds.Ymax); + } else if (resizeMode.equals(TextImportResizeTextBoundsMode.GROW_AND_SHRINK)) { + textBounds.Xmin = xMin; + textBounds.Ymin = yMin; + textBounds.Xmax = xMax; + textBounds.Ymax = yMax; + } + } + } + } + + public static void staticTextToHtmlCanvas(double unitDivisor, SWF swf, List textRecords, int numText, StringBuilder result, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { + int textColor = 0; + FontTag font = null; + int fontId = -1; + int textHeight = 12; + int x = 0; + int y = 0; + + List glyphs = new ArrayList<>(); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + fontId = rec.fontId; + glyphs = font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double rat = textHeight / 1024.0 / font.getDivider(); + + result.append("\tvar textColor = ").append(CanvasShapeExporter.color(textColor)).append(";\r\n"); + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x, y))).concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1) { + // shapeNum: 1 + result.append("\tctx.save();\r\n"); + result.append("\tctx.transform(").append(mat.scaleX).append(",").append(mat.rotateSkew0).append(",").append(mat.rotateSkew1).append(",").append(mat.scaleY).append(",").append(mat.translateX).append(",").append(mat.translateY).append(");\r\n"); + result.append("\tfont").append(fontId).append("(ctx,\"").append(("" + font.glyphToChar(entry.glyphIndex)).replace("\\", "\\\\").replace("\"", "\\\"")).append("\",textColor);\r\n"); + result.append("\tctx.restore();\r\n"); + x += entry.glyphAdvance; + } + } + } + } + + public static void staticTextToSVG(SWF swf, List textRecords, int numText, SVGExporter exporter, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform, double zoom) { + int textColor = 0; + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = new ArrayList<>(); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = rec.textColorA.toInt(); + } else { + textColor = rec.textColor.toInt(); + } + + if (colorTransform != null) { + textColor = colorTransform.apply(textColor); + } + } + if (rec.styleFlagsHasFont) { + font = swf.getFont(rec.fontId); + glyphs = font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + int offsetX = 0; + int offsetY = 0; + if (rec.styleFlagsHasXOffset) { + offsetX = rec.xOffset; + x = offsetX; + } + if (rec.styleFlagsHasYOffset) { + offsetY = rec.yOffset; + y = offsetY; + } + + double rat = textHeight / 1024.0 / font.getDivider(); + + exporter.createSubGroup(new Matrix(textMatrix), null); + if (exporter.useTextTag) { + StringBuilder text = new StringBuilder(); + int totalAdvance = 0; + for (GLYPHENTRY entry : rec.glyphEntries) { + if (entry.glyphIndex != -1) { + char ch = font.glyphToChar(entry.glyphIndex); + text.append(ch); + totalAdvance += entry.glyphAdvance; + } + } + + boolean hasOffset = offsetX != 0 || offsetY != 0; + if (hasOffset) { + exporter.createSubGroup(Matrix.getTranslateInstance(offsetX, offsetY), null); + } + + Element textElement = exporter.createElement("text"); + textElement.setAttribute("font-size", Double.toString(rat * 1024)); + textElement.setAttribute("font-family", font.getFontNameIntag()); + textElement.setAttribute("textLength", Double.toString(totalAdvance / SWF.unitDivisor)); + textElement.setAttribute("lengthAdjust", "spacing"); + textElement.setTextContent(text.toString()); + + RGBA colorA = new RGBA(textColor); + textElement.setAttribute("fill", colorA.toHexRGB()); + if (colorA.alpha != 255) { + textElement.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + + exporter.addToGroup(textElement); + FontExportMode fontExportMode = FontExportMode.WOFF; + exporter.addStyle(font.getFontNameIntag(), new FontExporter().exportFont(font, fontExportMode), fontExportMode); + + if (hasOffset) { + exporter.endGroup(); + } + } else { + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = Matrix.getTranslateInstance(x, y).concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1) { + // shapeNum: 1 + SHAPE shape = glyphs.get(entry.glyphIndex); + char ch = font.glyphToChar(entry.glyphIndex); + + String charId = null; + Map chs; + if (exporter.exportedChars.containsKey(font)) { + chs = exporter.exportedChars.get(font); + if (chs.containsKey(entry.glyphIndex)) { + charId = chs.get(entry.glyphIndex); + } + } else { + chs = new HashMap<>(); + exporter.exportedChars.put(font, chs); + } + + if (charId == null) { + charId = exporter.getUniqueId(Helper.getValidHtmlId("font_" + font.getFontNameIntag() + "_" + ch)); + exporter.createDefGroup(null, charId); + SVGShapeExporter shapeExporter = new SVGShapeExporter(swf, shape, 0, exporter, null, colorTransform, zoom); + shapeExporter.export(); + if (!exporter.endGroup()) { + charId = ""; + } + + chs.put(entry.glyphIndex, charId); + } + + if (!"".equals(charId)) { + Element charImage = exporter.addUse(mat, bounds, charId, null); + RGBA colorA = new RGBA(textColor); + charImage.setAttribute("fill", colorA.toHexRGB()); + if (colorA.alpha != 255) { + charImage.setAttribute("fill-opacity", Float.toString(colorA.getAlphaFloat())); + } + } + + x += entry.glyphAdvance; + } + } + } + exporter.endGroup(); + } + } + + @Override + public Shape getOutline(int frame, int time, int ratio, RenderContext renderContext, Matrix transformation, boolean stroked) { + RECT r = getBounds(); + Shape shp = new Rectangle.Double(r.Xmin, r.Ymin, r.getWidth(), r.getHeight()); + return transformation.toTransform().createTransformedShape(shp); //TODO: match character shapes (?) + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java index b9dcbc0ff..97e1b99a2 100644 --- a/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java +++ b/src/com/jpexs/decompiler/flash/gui/DebuggerHandler.java @@ -1,902 +1,902 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.debugger.flash.DebugConnectionListener; -import com.jpexs.debugger.flash.DebugMessageListener; -import com.jpexs.debugger.flash.Debugger; -import com.jpexs.debugger.flash.DebuggerCommands; -import com.jpexs.debugger.flash.DebuggerConnection; -import com.jpexs.debugger.flash.Variable; -import com.jpexs.debugger.flash.VariableFlags; -import com.jpexs.debugger.flash.VariableType; -import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; -import com.jpexs.debugger.flash.messages.in.InBreakAt; -import com.jpexs.debugger.flash.messages.in.InBreakAtExt; -import com.jpexs.debugger.flash.messages.in.InBreakReason; -import com.jpexs.debugger.flash.messages.in.InCallFunction; -import com.jpexs.debugger.flash.messages.in.InConstantPool; -import com.jpexs.debugger.flash.messages.in.InContinue; -import com.jpexs.debugger.flash.messages.in.InFrame; -import com.jpexs.debugger.flash.messages.in.InGetSwd; -import com.jpexs.debugger.flash.messages.in.InGetSwf; -import com.jpexs.debugger.flash.messages.in.InGetVariable; -import com.jpexs.debugger.flash.messages.in.InNumScript; -import com.jpexs.debugger.flash.messages.in.InProcessTag; -import com.jpexs.debugger.flash.messages.in.InScript; -import com.jpexs.debugger.flash.messages.in.InSetBreakpoint; -import com.jpexs.debugger.flash.messages.in.InSwfInfo; -import com.jpexs.debugger.flash.messages.in.InTrace; -import com.jpexs.debugger.flash.messages.in.InVersion; -import com.jpexs.debugger.flash.messages.out.OutAddWatch2; -import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; -import com.jpexs.debugger.flash.messages.out.OutGetSwd; -import com.jpexs.debugger.flash.messages.out.OutGetSwf; -import com.jpexs.debugger.flash.messages.out.OutPlay; -import com.jpexs.debugger.flash.messages.out.OutProcessedTag; -import com.jpexs.debugger.flash.messages.out.OutRewind; -import com.jpexs.debugger.flash.messages.out.OutSwfInfo; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.graph.DottedChain; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.logging.ConsoleHandler; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * - * @author JPEXS - */ -public class DebuggerHandler implements DebugConnectionListener { - - private boolean connected = false; - - private DebuggerCommands commands = null; - - private List swfs = new ArrayList<>(); - - private boolean paused = true; - - private Map modulePaths = new HashMap<>(); - - private Map moduleToSwfIndex = new HashMap<>(); - - private Map scriptToModule = new HashMap<>(); - - private Map moduleToTraitIndex = new HashMap<>(); - - private Map moduleToClassIndex = new HashMap<>(); - - private Map moduleToMethodIndex = new HashMap<>(); - - private Map> toAddBPointMap = new HashMap<>(); - - private Map> confirmedPointMap = new HashMap<>(); - - private Map> invalidBreakPointMap = new HashMap<>(); - - private Map> toRemoveBPointMap = new HashMap<>(); - - private int breakIp = -1; - - private String breakScriptName = null; - - public static class ActionScriptException extends Exception { - - private String errorClass; - - public ActionScriptException(String errorClass, String message) { - super(message); - this.errorClass = errorClass; - } - - public ActionScriptException(String errorClsMessage) { - this(errorClsMessage.substring(0, errorClsMessage.indexOf(": ")), errorClsMessage.substring(errorClsMessage.indexOf(": ") + 2)); - } - - public String getErrorClass() { - return errorClass; - } - } - - public int getBreakIp() { - if (!isPaused()) { - return -1; - } - return breakIp; - } - - public String getBreakScriptName() { - if (!isPaused()) { - return "-"; - } - return breakScriptName; - } - - public InGetVariable getVariable(long parentId, String varName, boolean children) { - try { - return commands.getVariable(parentId, varName, true, children); - } catch (IOException ex) { - return null; - } - } - - public void setVariable(long parentId, String varName, int valueType, Object value) { - try { - String svalue = ""; - switch (valueType) { - case VariableType.STRING: - svalue = "" + value; - break; - case VariableType.NUMBER: - svalue = "" + value; - break; - case VariableType.BOOLEAN: - svalue = ((Boolean) value) ? "true" : "false"; - break; - case VariableType.UNDEFINED: - svalue = "undefined"; - break; - case VariableType.NULL: - svalue = "undefined"; - break; - } - commands.setVariable(parentId, varName, valueType, svalue); - } catch (IOException ex) { - //ignore - } - } - - public synchronized void removeBreakPoint(String scriptName, int line) { - if (isBreakpointInvalid(scriptName, line)) { - invalidBreakPointMap.get(scriptName).remove(line); - if (invalidBreakPointMap.get(scriptName).isEmpty()) { - invalidBreakPointMap.remove(scriptName); - } - return; - } - if (isBreakpointToAdd(scriptName, line)) { - toAddBPointMap.get(scriptName).remove(line); - if (toAddBPointMap.get(scriptName).isEmpty()) { - toAddBPointMap.remove(scriptName); - } - } else if (isBreakpointConfirmed(scriptName, line)) { - if (!toRemoveBPointMap.containsKey(scriptName)) { - toRemoveBPointMap.put(scriptName, new TreeSet<>()); - } - toRemoveBPointMap.get(scriptName).add(line); - } - try { - sendBreakPoints(false); - } catch (IOException ex) { - //ignore - } - } - - private int watchTag = 1; - - public synchronized com.jpexs.debugger.flash.DebuggerCommands.Watch addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { - int tag = watchTag++; - try { - return commands.addWatch(v_id, v.name, (watchRead ? OutAddWatch2.FLAG_READ : 0) | (watchWrite ? OutAddWatch2.FLAG_WRITE : 0), tag); - } catch (IOException ex) { - return null; - } - } - - public synchronized Set getBreakPoints(String scriptName, boolean onlyValid) { - Set lines = new TreeSet<>(); - if (confirmedPointMap.containsKey(scriptName)) { - lines.addAll(confirmedPointMap.get(scriptName)); - } - if (toAddBPointMap.containsKey(scriptName)) { - lines.addAll(toAddBPointMap.get(scriptName)); - } - if (!onlyValid && invalidBreakPointMap.containsKey(scriptName)) { - lines.addAll(invalidBreakPointMap.get(scriptName)); - } - return lines; - } - - public synchronized void clearBreakPoints() { - for (String scriptName : confirmedPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); - } - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - confirmedPointMap.clear(); - invalidBreakPointMap.clear(); - } - - public synchronized Map> getAllBreakPoints(boolean validOnly) { - Map> ret = new HashMap<>(); - for (String scriptName : confirmedPointMap.keySet()) { - Set lines = new TreeSet<>(); - lines.addAll(confirmedPointMap.get(scriptName)); - ret.put(scriptName, lines); - } - for (String scriptName : toAddBPointMap.keySet()) { - if (!ret.containsKey(scriptName)) { - ret.put(scriptName, new TreeSet<>()); - } - ret.get(scriptName).addAll(toAddBPointMap.get(scriptName)); - } - if (!validOnly) { - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!ret.containsKey(scriptName)) { - ret.put(scriptName, new TreeSet<>()); - } - ret.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - } - return ret; - } - - public boolean addBreakPoint(String scriptName, int line) { - synchronized (this) { - Logger.getLogger(DebuggerHandler.class - .getName()).log(Level.FINE, "adding bp " + scriptName + ":" + line); - if (isBreakpointToRemove(scriptName, line)) { - toRemoveBPointMap.get(scriptName).remove(line); - if (toRemoveBPointMap.get(scriptName).isEmpty()) { - toRemoveBPointMap.remove(scriptName); - - } - } - - if (isBreakpointConfirmed(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already confirmed"); - return true; - - } - if (isBreakpointInvalid(scriptName, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already invalid"); - return false; - } - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).add(line); - Logger - .getLogger(DebuggerHandler.class - .getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " added to todo"); - } - try { - sendBreakPoints(false); - } catch (IOException ex) { - //ignored - } - - return true; - } - - public synchronized boolean isBreakpointConfirmed(String scriptName, int line) { - return confirmedPointMap.containsKey(scriptName) && confirmedPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointToAdd(String scriptName, int line) { - return toAddBPointMap.containsKey(scriptName) && toAddBPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointToRemove(String scriptName, int line) { - return toRemoveBPointMap.containsKey(scriptName) && toRemoveBPointMap.get(scriptName).contains(line); - } - - public synchronized boolean isBreakpointInvalid(String scriptName, int line) { - return invalidBreakPointMap.containsKey(scriptName) && invalidBreakPointMap.get(scriptName).contains(line); - } - - private synchronized void markBreakPointInvalid(String scriptName, int line) { - if (!invalidBreakPointMap.containsKey(scriptName)) { - invalidBreakPointMap.put(scriptName, new TreeSet<>()); - } - invalidBreakPointMap.get(scriptName).add(line); - } - - private InFrame frame; - - private InConstantPool pool; - - private InBreakAtExt breakInfo; - - private InBreakReason breakReason; - - private final List breakListeners = new ArrayList<>(); - - private final List traceListeners = new ArrayList<>(); - - private final List clisteners = new ArrayList<>(); - - public String moduleToString(int file) { - if (!modulePaths.containsKey(file)) { - return "unknown"; - } - return modulePaths.get(file); - } - - public synchronized InBreakAtExt getBreakInfo() { - if (!paused) { - return null; - } - return breakInfo; - } - - public synchronized InBreakReason getBreakReason() { - if (!paused) { - return null; - } - return breakReason; - } - - public static interface ConnectionListener { - - public void connected(); - - public void disconnected(); - } - - public static interface TraceListener { - - public void trace(String... val); - } - - public static interface BreakListener { - - public void breakAt(String scriptName, int line, int classIndex, int traitIndex, int methodIndex); - - public void doContinue(); - } - - public void addBreakListener(BreakListener l) { - breakListeners.add(l); - } - - public void addTraceListener(TraceListener l) { - traceListeners.add(l); - } - - public void removeTraceListener(TraceListener l) { - traceListeners.remove(l); - } - - public void removeBreakListener(BreakListener l) { - breakListeners.remove(l); - } - - public void addConnectionListener(ConnectionListener l) { - clisteners.add(l); - } - - public void removeConnectionListener(ConnectionListener l) { - clisteners.remove(l); - } - - public synchronized void refreshFrame() { - if (!paused) { - return; - } - try { - frame = commands.getFrame(0); - pool = commands.getConstantPool(0); - } catch (IOException ex) { - //ignore - } - } - - public synchronized InFrame getFrame() { - if (!paused) { - return null; - } - return frame; - } - - public synchronized int moduleIdOf(String pack) { - if (scriptToModule.containsKey(pack)) { - return scriptToModule.get(pack); - } - return -1; - } - - public boolean isPaused() { - if (!isConnected()) { - return false; - } - synchronized (this) { - return paused; - } - } - - public List getSwfs() { - return swfs; - } - - public void disconnect() { - frame = null; - pool = null; - breakInfo = null; - breakReason = null; - connected = false; - if (commands != null) { - commands.disconnect(); - } - commands = null; - synchronized (this) { - for (String scriptName : confirmedPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); - } - confirmedPointMap.clear(); - for (String scriptName : invalidBreakPointMap.keySet()) { - if (!toAddBPointMap.containsKey(scriptName)) { - toAddBPointMap.put(scriptName, new TreeSet<>()); - } - toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); - } - invalidBreakPointMap.clear(); - } - for (ConnectionListener l : clisteners) { - l.disconnected(); - } - } - - public synchronized boolean isConnected() { - return connected; - } - - public DebuggerCommands getCommands() throws IOException { - if (!isConnected() || commands == null) { - throw new IOException("Not connected"); - } - return commands; - } - - private static void enlog(Class cls) { - Level level = Level.FINEST; - - Logger mylog = Logger.getLogger(cls.getName()); - mylog.setLevel(level); - ConsoleHandler ch = new ConsoleHandler(); - ch.setLevel(level); - mylog.addHandler(ch); - } - - @Override - public void failedListen(IOException ex) { - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - disconnect(); - Main.stopRun(); - Main.stopWork(); - View.showMessageDialog(Main.getMainFrame().getPanel(), AppStrings.translate("error.debug.listen").replace("%port%", "" + Debugger.DEBUG_PORT)); - Main.getMainFrame().getPanel().updateMenu(); - } - }); - - } - - @Override - public void connected(DebuggerConnection con) { - clearBreakPoints(); - - Main.startWork(AppStrings.translate("work.debugging"), null); - - synchronized (this) { - paused = false; - } - - Main.getMainFrame().getPanel().updateMenu(); - - //enlog(DebuggerConnection.class); - //enlog(DebuggerCommands.class); - //enlog(DebuggerHandler.class); - try { - con.getMessage(InVersion.class); - } catch (IOException ex) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.SEVERE, null, ex); - } - - //Respon to InProcessTag with OutProcessedTag - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InProcessTag message) { - try { - con.writeMessage(new OutProcessedTag(con)); - } catch (IOException ex) { - //disconnect(); - //ignore - } - } - }); - - swfs.clear(); - - Map moduleNames = new HashMap<>(); - - final Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); - final Pattern patAS3PCode = Pattern.compile("^#PCODE abc:([0-9]+),script:([0-9]+),class:(-?[0-9]+),trait:(-?[0-9]+),method:([0-9]+),body:([0-9]+);(.*)$"); - - try { - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InNumScript t) { - con.dropMessage(t); - } - }); - - modulePaths = new HashMap<>(); - scriptToModule = new HashMap<>(); - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InScript sc) { - moduleNames.put(sc.module, sc.name); - moduleToSwfIndex.put(sc.module, sc.swfIndex); - int file = sc.module; - String name = sc.name; - String[] parts = name.split(";"); - - Matcher m; - if ((m = patAS3.matcher(name)).matches()) { - String clsNameWithSuffix = m.group(3); - String pkg = m.group(2).replace("\\", "."); - m = patAS3PCode.matcher(name); - - if (m.matches()) { - moduleToClassIndex.put(file, Integer.parseInt(m.group(3))); - moduleToTraitIndex.put(file, Integer.parseInt(m.group(4))); - moduleToMethodIndex.put(file, Integer.parseInt(m.group(5))); - name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); - name = "#PCODE abc:" + m.group(1) + ",body:" + m.group(6) + ";" + name; - } else { - name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); - } - } - modulePaths.put(file, name); - scriptToModule.put(name, file); - con.dropMessage(sc); - } - }); - - /*int numScript = con.getMessage(InNumScript.class).num; - for (int i = 0; i < numScript; i++) { - InScript sc = con.getMessage(InScript.class); - moduleNames.put(sc.module, sc.name); - }*/ - //Pattern patMainFrame = Pattern.compile("^Actions for Scene ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); - //Pattern patSymbol = Pattern.compile("^Actions for Symbol ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); - //Pattern patAS2 = Pattern.compile("^([^:]+): .*\\.as$"); - //con.getMessage(InSetBreakpoint.class); - commands = new DebuggerCommands(con); - - commands.stopWarning(); - commands.setStopOnFault(); - commands.setEnumerateOverride(); - commands.setNotifyFailure(); - commands.setInvokeSetters(); - commands.setSwfLoadNotify(); - commands.setGetterTimeout(1500); - commands.setSetterTimeout(5000); - - boolean isAS3 = (Main.getMainFrame().getPanel().getCurrentSwf().isAS3()); - con.isAS3 = isAS3; - - //Widelines - only AS3, it hangs in AS1/2 and SWD does not support UI32 lines - if (isAS3) { - con.wideLines = commands.getOption("wide_line_player", "false").equals("true"); - if (con.wideLines) { - commands.setOption("wide_line_debugger", "on"); - } - } - commands.squelch(true); - - con.writeMessage(new OutSwfInfo(con, 0)); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InSwfInfo t) { - for (InSwfInfo.SwfInfo s : t.swfInfos) { - swfs.add(s); - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - try { - con.sendMessage(new OutGetSwf(con, (int) s.index), InGetSwf.class); - con.sendMessage(new OutGetSwd(con, (int) s.index), InGetSwd.class); - } catch (IOException ex) { - //ignore - } - } - }); - } - con.dropMessage(t); - } - }); - - InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); - synchronized (this) { - for (int i = 0; i < isb.files.size(); i++) { - String sname = moduleNames.get(isb.files.get(i)); - if (!confirmedPointMap.containsKey(sname)) { - confirmedPointMap.put(sname, new TreeSet<>()); - } - if (toAddBPointMap.containsKey(sname)) { - toAddBPointMap.get(sname).remove(isb.lines.get(i)); - if (toAddBPointMap.get(sname).isEmpty()) { - toAddBPointMap.remove(sname); - } - } - confirmedPointMap.get(sname).add(isb.lines.get(i)); - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{sname, isb.lines.get(i)}); - } - } - - synchronized (this) { - connected = true; - } - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InAskBreakpoints message) { - - } - }); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InContinue msg) { - synchronized (DebuggerHandler.this) { - paused = false; - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "continued"); - } - for (BreakListener bl : breakListeners) { - bl.doContinue(); - } - } - }); - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InBreakAt message) { - synchronized (DebuggerHandler.this) { - paused = true; - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "paused"); - - } - - try { - breakInfo = con.getMessage(InBreakAtExt.class); - breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); - - String newBreakScriptName = "unknown"; - if (modulePaths.containsKey(message.file)) { - newBreakScriptName = modulePaths.get(message.file); - - } else if (breakReason.reason != InBreakReason.REASON_SCRIPT_LOADED) { - Logger.getLogger(DebuggerCommands.class.getName()).log(Level.SEVERE, "Invalid file: {0}", message.file); - return; - } - - final String[] reasonNames = new String[]{"unknown", "breakpoint", "watch", "fault", "stopRequest", "step", "halt", "scriptLoaded"}; - String reason = breakReason.reason < reasonNames.length ? reasonNames[breakReason.reason] : reasonNames[0]; - - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "break at {0}:{1}, reason: {2}", new Object[]{newBreakScriptName, message.line, reason}); - - sendBreakPoints(false); - synchronized (DebuggerHandler.this) { - breakScriptName = newBreakScriptName; - breakIp = message.line; - } - - if (breakReason.reason == InBreakReason.REASON_SCRIPT_LOADED) { - if (!Configuration.debugHalt.get()) { - commands.sendContinue(); - return; - } - Main.startWork(AppStrings.translate("work.halted"), null); - } else { - Main.startWork(AppStrings.translate("work.breakat") + newBreakScriptName + ":" + message.line + " " + AppStrings.translate("debug.break.reason." + reason), null); - } - frame = commands.getFrame(0); - pool = commands.getConstantPool(0); - - for (BreakListener l : breakListeners) { - l.breakAt(newBreakScriptName, message.line, - moduleToClassIndex.containsKey(message.file) ? moduleToClassIndex.get(message.file) : -1, - moduleToTraitIndex.containsKey(message.file) ? moduleToTraitIndex.get(message.file) : -1, - moduleToMethodIndex.containsKey(message.file) ? moduleToMethodIndex.get(message.file) : -1 - ); - } - - } catch (IOException ex) { - //ignore - } - - } - }); - - for (ConnectionListener l : clisteners) { - l.connected(); - } - - con.addMessageListener(new DebugMessageListener() { - @Override - public void message(InTrace tr) { - for (TraceListener l : traceListeners) { - l.trace(tr.text); - } - } - }); - - if (!isAS3) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINER, "End of connect - sending continue"); - con.writeMessage(new OutRewind(con)); - con.writeMessage(new OutPlay(con)); - commands.sendContinue(); - } - - } catch (IOException ex) { - - synchronized (this) { - connected = false; - } - } - } - - private void sendBreakPoints(boolean force) throws IOException { - if (!force && !isPaused()) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "not sending bps, not paused"); - return; - } - synchronized (this) { - for (String scriptName : toRemoveBPointMap.keySet()) { - int file = moduleIdOf(scriptName); - if (file > -1) { - for (int line : toRemoveBPointMap.get(scriptName)) { - if (isBreakpointConfirmed(scriptName, line)) { - commands.removeBreakPoint(file, line); - confirmedPointMap.get(scriptName).remove(line); - if (confirmedPointMap.get(scriptName).isEmpty()) { - confirmedPointMap.remove(scriptName); - } - } - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} removed", new Object[]{scriptName, line}); - } - } - } - toRemoveBPointMap.clear(); - - for (String scriptName : toAddBPointMap.keySet()) { - int file = moduleIdOf(scriptName); - if (file > -1) { - for (int line : toAddBPointMap.get(scriptName)) { - if (commands.addBreakPoint(file, line)) { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{scriptName, line}); - if (!confirmedPointMap.containsKey(scriptName)) { - confirmedPointMap.put(scriptName, new TreeSet<>()); - } - confirmedPointMap.get(scriptName).add(line); - } else { - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} unable to submit", new Object[]{scriptName, line}); - markBreakPointInvalid(scriptName, line); - } - } - } else { - for (int line : toAddBPointMap.get(scriptName)) { - markBreakPointInvalid(scriptName, line); - } - } - } - toAddBPointMap.clear(); - - } - Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "sending bps finished"); - - } - - public synchronized InConstantPool getConstantPool() { - if (!paused) { - return null; - } - return pool; - } - - public synchronized InCallFunction callMethod(Variable object, String methodName, List args) throws ActionScriptException { - return callFunction(false, methodName, object, args); - } - - public synchronized InCallFunction callMethod(String object, String methodName, List args) throws ActionScriptException { - InGetVariable igv = getVariable(0, object, false); - return callMethod(igv.parent, methodName, args); - } - - private static String typeAsStr(Object value) { - if (value == null) { - return "null"; - } - if ((value instanceof Long) || (value instanceof Integer)) { - return "int"; - } - if (value instanceof Number) { - return "Number"; - } - if (value instanceof String) { - return "String"; - } - if (value instanceof Variable) { - Variable v = (Variable) value; - return v.getTypeAsStr(); - } - return "String"; - } - - private static String valueAsStr(Object value) { - if (value == null) { - return "null"; - } - if (value instanceof Double) { - double doubleValue = ((Double) value).doubleValue(); - long longValue = (long) doubleValue; - if (doubleValue == longValue) { - return Long.toString(longValue); - } - } - - if (value instanceof Variable) { - Variable v = (Variable) value; - return valueAsStr(v.value); - } - return "" + value; - } - - public synchronized InCallFunction callFunction(boolean isConstructor, String funcName, Variable thisValue, List args) throws ActionScriptException { - List argTypes = new ArrayList<>(); - List argValues = new ArrayList<>(); - for (Object value : args) { - argTypes.add(typeAsStr(value)); - argValues.add(valueAsStr(value)); - } - String thisType = typeAsStr(thisValue); - String thisValueStr = valueAsStr(thisValue); - try { - InCallFunction icf = commands.callFunction(isConstructor, funcName, thisType, thisValueStr, argTypes, argValues); - if (!icf.variables.isEmpty()) { - if ((icf.variables.get(0).flags & VariableFlags.IS_EXCEPTION) > 0) { - throw new ActionScriptException("" + icf.variables.get(0).value); - } - } - return icf; - } catch (IOException e) { - - } - return null; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.debugger.flash.DebugConnectionListener; +import com.jpexs.debugger.flash.DebugMessageListener; +import com.jpexs.debugger.flash.Debugger; +import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.debugger.flash.DebuggerConnection; +import com.jpexs.debugger.flash.Variable; +import com.jpexs.debugger.flash.VariableFlags; +import com.jpexs.debugger.flash.VariableType; +import com.jpexs.debugger.flash.messages.in.InAskBreakpoints; +import com.jpexs.debugger.flash.messages.in.InBreakAt; +import com.jpexs.debugger.flash.messages.in.InBreakAtExt; +import com.jpexs.debugger.flash.messages.in.InBreakReason; +import com.jpexs.debugger.flash.messages.in.InCallFunction; +import com.jpexs.debugger.flash.messages.in.InConstantPool; +import com.jpexs.debugger.flash.messages.in.InContinue; +import com.jpexs.debugger.flash.messages.in.InFrame; +import com.jpexs.debugger.flash.messages.in.InGetSwd; +import com.jpexs.debugger.flash.messages.in.InGetSwf; +import com.jpexs.debugger.flash.messages.in.InGetVariable; +import com.jpexs.debugger.flash.messages.in.InNumScript; +import com.jpexs.debugger.flash.messages.in.InProcessTag; +import com.jpexs.debugger.flash.messages.in.InScript; +import com.jpexs.debugger.flash.messages.in.InSetBreakpoint; +import com.jpexs.debugger.flash.messages.in.InSwfInfo; +import com.jpexs.debugger.flash.messages.in.InTrace; +import com.jpexs.debugger.flash.messages.in.InVersion; +import com.jpexs.debugger.flash.messages.out.OutAddWatch2; +import com.jpexs.debugger.flash.messages.out.OutGetBreakReason; +import com.jpexs.debugger.flash.messages.out.OutGetSwd; +import com.jpexs.debugger.flash.messages.out.OutGetSwf; +import com.jpexs.debugger.flash.messages.out.OutPlay; +import com.jpexs.debugger.flash.messages.out.OutProcessedTag; +import com.jpexs.debugger.flash.messages.out.OutRewind; +import com.jpexs.debugger.flash.messages.out.OutSwfInfo; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.graph.DottedChain; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public class DebuggerHandler implements DebugConnectionListener { + + private boolean connected = false; + + private DebuggerCommands commands = null; + + private List swfs = new ArrayList<>(); + + private boolean paused = true; + + private Map modulePaths = new HashMap<>(); + + private Map moduleToSwfIndex = new HashMap<>(); + + private Map scriptToModule = new HashMap<>(); + + private Map moduleToTraitIndex = new HashMap<>(); + + private Map moduleToClassIndex = new HashMap<>(); + + private Map moduleToMethodIndex = new HashMap<>(); + + private Map> toAddBPointMap = new HashMap<>(); + + private Map> confirmedPointMap = new HashMap<>(); + + private Map> invalidBreakPointMap = new HashMap<>(); + + private Map> toRemoveBPointMap = new HashMap<>(); + + private int breakIp = -1; + + private String breakScriptName = null; + + public static class ActionScriptException extends Exception { + + private String errorClass; + + public ActionScriptException(String errorClass, String message) { + super(message); + this.errorClass = errorClass; + } + + public ActionScriptException(String errorClsMessage) { + this(errorClsMessage.substring(0, errorClsMessage.indexOf(": ")), errorClsMessage.substring(errorClsMessage.indexOf(": ") + 2)); + } + + public String getErrorClass() { + return errorClass; + } + } + + public int getBreakIp() { + if (!isPaused()) { + return -1; + } + return breakIp; + } + + public String getBreakScriptName() { + if (!isPaused()) { + return "-"; + } + return breakScriptName; + } + + public InGetVariable getVariable(long parentId, String varName, boolean children) { + try { + return commands.getVariable(parentId, varName, true, children); + } catch (IOException ex) { + return null; + } + } + + public void setVariable(long parentId, String varName, int valueType, Object value) { + try { + String svalue = ""; + switch (valueType) { + case VariableType.STRING: + svalue = "" + value; + break; + case VariableType.NUMBER: + svalue = "" + value; + break; + case VariableType.BOOLEAN: + svalue = ((Boolean) value) ? "true" : "false"; + break; + case VariableType.UNDEFINED: + svalue = "undefined"; + break; + case VariableType.NULL: + svalue = "undefined"; + break; + } + commands.setVariable(parentId, varName, valueType, svalue); + } catch (IOException ex) { + //ignore + } + } + + public synchronized void removeBreakPoint(String scriptName, int line) { + if (isBreakpointInvalid(scriptName, line)) { + invalidBreakPointMap.get(scriptName).remove(line); + if (invalidBreakPointMap.get(scriptName).isEmpty()) { + invalidBreakPointMap.remove(scriptName); + } + return; + } + if (isBreakpointToAdd(scriptName, line)) { + toAddBPointMap.get(scriptName).remove(line); + if (toAddBPointMap.get(scriptName).isEmpty()) { + toAddBPointMap.remove(scriptName); + } + } else if (isBreakpointConfirmed(scriptName, line)) { + if (!toRemoveBPointMap.containsKey(scriptName)) { + toRemoveBPointMap.put(scriptName, new TreeSet<>()); + } + toRemoveBPointMap.get(scriptName).add(line); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignore + } + } + + private int watchTag = 1; + + public synchronized com.jpexs.debugger.flash.DebuggerCommands.Watch addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { + int tag = watchTag++; + try { + return commands.addWatch(v_id, v.name, (watchRead ? OutAddWatch2.FLAG_READ : 0) | (watchWrite ? OutAddWatch2.FLAG_WRITE : 0), tag); + } catch (IOException ex) { + return null; + } + } + + public synchronized Set getBreakPoints(String scriptName, boolean onlyValid) { + Set lines = new TreeSet<>(); + if (confirmedPointMap.containsKey(scriptName)) { + lines.addAll(confirmedPointMap.get(scriptName)); + } + if (toAddBPointMap.containsKey(scriptName)) { + lines.addAll(toAddBPointMap.get(scriptName)); + } + if (!onlyValid && invalidBreakPointMap.containsKey(scriptName)) { + lines.addAll(invalidBreakPointMap.get(scriptName)); + } + return lines; + } + + public synchronized void clearBreakPoints() { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + invalidBreakPointMap.clear(); + } + + public synchronized Map> getAllBreakPoints(boolean validOnly) { + Map> ret = new HashMap<>(); + for (String scriptName : confirmedPointMap.keySet()) { + Set lines = new TreeSet<>(); + lines.addAll(confirmedPointMap.get(scriptName)); + ret.put(scriptName, lines); + } + for (String scriptName : toAddBPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(toAddBPointMap.get(scriptName)); + } + if (!validOnly) { + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!ret.containsKey(scriptName)) { + ret.put(scriptName, new TreeSet<>()); + } + ret.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + } + return ret; + } + + public boolean addBreakPoint(String scriptName, int line) { + synchronized (this) { + Logger.getLogger(DebuggerHandler.class + .getName()).log(Level.FINE, "adding bp " + scriptName + ":" + line); + if (isBreakpointToRemove(scriptName, line)) { + toRemoveBPointMap.get(scriptName).remove(line); + if (toRemoveBPointMap.get(scriptName).isEmpty()) { + toRemoveBPointMap.remove(scriptName); + + } + } + + if (isBreakpointConfirmed(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already confirmed"); + return true; + + } + if (isBreakpointInvalid(scriptName, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " already invalid"); + return false; + } + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).add(line); + Logger + .getLogger(DebuggerHandler.class + .getName()).log(Level.FINE, "bp " + scriptName + ":" + line + " added to todo"); + } + try { + sendBreakPoints(false); + } catch (IOException ex) { + //ignored + } + + return true; + } + + public synchronized boolean isBreakpointConfirmed(String scriptName, int line) { + return confirmedPointMap.containsKey(scriptName) && confirmedPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToAdd(String scriptName, int line) { + return toAddBPointMap.containsKey(scriptName) && toAddBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointToRemove(String scriptName, int line) { + return toRemoveBPointMap.containsKey(scriptName) && toRemoveBPointMap.get(scriptName).contains(line); + } + + public synchronized boolean isBreakpointInvalid(String scriptName, int line) { + return invalidBreakPointMap.containsKey(scriptName) && invalidBreakPointMap.get(scriptName).contains(line); + } + + private synchronized void markBreakPointInvalid(String scriptName, int line) { + if (!invalidBreakPointMap.containsKey(scriptName)) { + invalidBreakPointMap.put(scriptName, new TreeSet<>()); + } + invalidBreakPointMap.get(scriptName).add(line); + } + + private InFrame frame; + + private InConstantPool pool; + + private InBreakAtExt breakInfo; + + private InBreakReason breakReason; + + private final List breakListeners = new ArrayList<>(); + + private final List traceListeners = new ArrayList<>(); + + private final List clisteners = new ArrayList<>(); + + public String moduleToString(int file) { + if (!modulePaths.containsKey(file)) { + return "unknown"; + } + return modulePaths.get(file); + } + + public synchronized InBreakAtExt getBreakInfo() { + if (!paused) { + return null; + } + return breakInfo; + } + + public synchronized InBreakReason getBreakReason() { + if (!paused) { + return null; + } + return breakReason; + } + + public static interface ConnectionListener { + + public void connected(); + + public void disconnected(); + } + + public static interface TraceListener { + + public void trace(String... val); + } + + public static interface BreakListener { + + public void breakAt(String scriptName, int line, int classIndex, int traitIndex, int methodIndex); + + public void doContinue(); + } + + public void addBreakListener(BreakListener l) { + breakListeners.add(l); + } + + public void addTraceListener(TraceListener l) { + traceListeners.add(l); + } + + public void removeTraceListener(TraceListener l) { + traceListeners.remove(l); + } + + public void removeBreakListener(BreakListener l) { + breakListeners.remove(l); + } + + public void addConnectionListener(ConnectionListener l) { + clisteners.add(l); + } + + public void removeConnectionListener(ConnectionListener l) { + clisteners.remove(l); + } + + public synchronized void refreshFrame() { + if (!paused) { + return; + } + try { + frame = commands.getFrame(0); + pool = commands.getConstantPool(0); + } catch (IOException ex) { + //ignore + } + } + + public synchronized InFrame getFrame() { + if (!paused) { + return null; + } + return frame; + } + + public synchronized int moduleIdOf(String pack) { + if (scriptToModule.containsKey(pack)) { + return scriptToModule.get(pack); + } + return -1; + } + + public boolean isPaused() { + if (!isConnected()) { + return false; + } + synchronized (this) { + return paused; + } + } + + public List getSwfs() { + return swfs; + } + + public void disconnect() { + frame = null; + pool = null; + breakInfo = null; + breakReason = null; + connected = false; + if (commands != null) { + commands.disconnect(); + } + commands = null; + synchronized (this) { + for (String scriptName : confirmedPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(confirmedPointMap.get(scriptName)); + } + confirmedPointMap.clear(); + for (String scriptName : invalidBreakPointMap.keySet()) { + if (!toAddBPointMap.containsKey(scriptName)) { + toAddBPointMap.put(scriptName, new TreeSet<>()); + } + toAddBPointMap.get(scriptName).addAll(invalidBreakPointMap.get(scriptName)); + } + invalidBreakPointMap.clear(); + } + for (ConnectionListener l : clisteners) { + l.disconnected(); + } + } + + public synchronized boolean isConnected() { + return connected; + } + + public DebuggerCommands getCommands() throws IOException { + if (!isConnected() || commands == null) { + throw new IOException("Not connected"); + } + return commands; + } + + private static void enlog(Class cls) { + Level level = Level.FINEST; + + Logger mylog = Logger.getLogger(cls.getName()); + mylog.setLevel(level); + ConsoleHandler ch = new ConsoleHandler(); + ch.setLevel(level); + mylog.addHandler(ch); + } + + @Override + public void failedListen(IOException ex) { + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + disconnect(); + Main.stopRun(); + Main.stopWork(); + View.showMessageDialog(Main.getMainFrame().getPanel(), AppStrings.translate("error.debug.listen").replace("%port%", "" + Debugger.DEBUG_PORT)); + Main.getMainFrame().getPanel().updateMenu(); + } + }); + + } + + @Override + public void connected(DebuggerConnection con) { + clearBreakPoints(); + + Main.startWork(AppStrings.translate("work.debugging"), null); + + synchronized (this) { + paused = false; + } + + Main.getMainFrame().getPanel().updateMenu(); + + //enlog(DebuggerConnection.class); + //enlog(DebuggerCommands.class); + //enlog(DebuggerHandler.class); + try { + con.getMessage(InVersion.class); + } catch (IOException ex) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.SEVERE, null, ex); + } + + //Respon to InProcessTag with OutProcessedTag + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InProcessTag message) { + try { + con.writeMessage(new OutProcessedTag(con)); + } catch (IOException ex) { + //disconnect(); + //ignore + } + } + }); + + swfs.clear(); + + Map moduleNames = new HashMap<>(); + + final Pattern patAS3 = Pattern.compile("^(.*);(.*);(.*)\\.as$"); + final Pattern patAS3PCode = Pattern.compile("^#PCODE abc:([0-9]+),script:([0-9]+),class:(-?[0-9]+),trait:(-?[0-9]+),method:([0-9]+),body:([0-9]+);(.*)$"); + + try { + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InNumScript t) { + con.dropMessage(t); + } + }); + + modulePaths = new HashMap<>(); + scriptToModule = new HashMap<>(); + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InScript sc) { + moduleNames.put(sc.module, sc.name); + moduleToSwfIndex.put(sc.module, sc.swfIndex); + int file = sc.module; + String name = sc.name; + String[] parts = name.split(";"); + + Matcher m; + if ((m = patAS3.matcher(name)).matches()) { + String clsNameWithSuffix = m.group(3); + String pkg = m.group(2).replace("\\", "."); + m = patAS3PCode.matcher(name); + + if (m.matches()) { + moduleToClassIndex.put(file, Integer.parseInt(m.group(3))); + moduleToTraitIndex.put(file, Integer.parseInt(m.group(4))); + moduleToMethodIndex.put(file, Integer.parseInt(m.group(5))); + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); + name = "#PCODE abc:" + m.group(1) + ",body:" + m.group(6) + ";" + name; + } else { + name = DottedChain.parseWithSuffix(pkg).addWithSuffix(clsNameWithSuffix).toString(); + } + } + modulePaths.put(file, name); + scriptToModule.put(name, file); + con.dropMessage(sc); + } + }); + + /*int numScript = con.getMessage(InNumScript.class).num; + for (int i = 0; i < numScript; i++) { + InScript sc = con.getMessage(InScript.class); + moduleNames.put(sc.module, sc.name); + }*/ + //Pattern patMainFrame = Pattern.compile("^Actions for Scene ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patSymbol = Pattern.compile("^Actions for Symbol ([0-9]+): Frame ([0-9]+) of Layer Name .*$"); + //Pattern patAS2 = Pattern.compile("^([^:]+): .*\\.as$"); + //con.getMessage(InSetBreakpoint.class); + commands = new DebuggerCommands(con); + + commands.stopWarning(); + commands.setStopOnFault(); + commands.setEnumerateOverride(); + commands.setNotifyFailure(); + commands.setInvokeSetters(); + commands.setSwfLoadNotify(); + commands.setGetterTimeout(1500); + commands.setSetterTimeout(5000); + + boolean isAS3 = (Main.getMainFrame().getPanel().getCurrentSwf().isAS3()); + con.isAS3 = isAS3; + + //Widelines - only AS3, it hangs in AS1/2 and SWD does not support UI32 lines + if (isAS3) { + con.wideLines = commands.getOption("wide_line_player", "false").equals("true"); + if (con.wideLines) { + commands.setOption("wide_line_debugger", "on"); + } + } + commands.squelch(true); + + con.writeMessage(new OutSwfInfo(con, 0)); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InSwfInfo t) { + for (InSwfInfo.SwfInfo s : t.swfInfos) { + swfs.add(s); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + try { + con.sendMessage(new OutGetSwf(con, (int) s.index), InGetSwf.class); + con.sendMessage(new OutGetSwd(con, (int) s.index), InGetSwd.class); + } catch (IOException ex) { + //ignore + } + } + }); + } + con.dropMessage(t); + } + }); + + InSetBreakpoint isb = con.getMessage(InSetBreakpoint.class); + synchronized (this) { + for (int i = 0; i < isb.files.size(); i++) { + String sname = moduleNames.get(isb.files.get(i)); + if (!confirmedPointMap.containsKey(sname)) { + confirmedPointMap.put(sname, new TreeSet<>()); + } + if (toAddBPointMap.containsKey(sname)) { + toAddBPointMap.get(sname).remove(isb.lines.get(i)); + if (toAddBPointMap.get(sname).isEmpty()) { + toAddBPointMap.remove(sname); + } + } + confirmedPointMap.get(sname).add(isb.lines.get(i)); + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{sname, isb.lines.get(i)}); + } + } + + synchronized (this) { + connected = true; + } + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InAskBreakpoints message) { + + } + }); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InContinue msg) { + synchronized (DebuggerHandler.this) { + paused = false; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "continued"); + } + for (BreakListener bl : breakListeners) { + bl.doContinue(); + } + } + }); + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InBreakAt message) { + synchronized (DebuggerHandler.this) { + paused = true; + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "paused"); + + } + + try { + breakInfo = con.getMessage(InBreakAtExt.class); + breakReason = con.sendMessage(new OutGetBreakReason(con), InBreakReason.class); + + String newBreakScriptName = "unknown"; + if (modulePaths.containsKey(message.file)) { + newBreakScriptName = modulePaths.get(message.file); + + } else if (breakReason.reason != InBreakReason.REASON_SCRIPT_LOADED) { + Logger.getLogger(DebuggerCommands.class.getName()).log(Level.SEVERE, "Invalid file: {0}", message.file); + return; + } + + final String[] reasonNames = new String[]{"unknown", "breakpoint", "watch", "fault", "stopRequest", "step", "halt", "scriptLoaded"}; + String reason = breakReason.reason < reasonNames.length ? reasonNames[breakReason.reason] : reasonNames[0]; + + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINE, "break at {0}:{1}, reason: {2}", new Object[]{newBreakScriptName, message.line, reason}); + + sendBreakPoints(false); + synchronized (DebuggerHandler.this) { + breakScriptName = newBreakScriptName; + breakIp = message.line; + } + + if (breakReason.reason == InBreakReason.REASON_SCRIPT_LOADED) { + if (!Configuration.debugHalt.get()) { + commands.sendContinue(); + return; + } + Main.startWork(AppStrings.translate("work.halted"), null); + } else { + Main.startWork(AppStrings.translate("work.breakat") + newBreakScriptName + ":" + message.line + " " + AppStrings.translate("debug.break.reason." + reason), null); + } + frame = commands.getFrame(0); + pool = commands.getConstantPool(0); + + for (BreakListener l : breakListeners) { + l.breakAt(newBreakScriptName, message.line, + moduleToClassIndex.containsKey(message.file) ? moduleToClassIndex.get(message.file) : -1, + moduleToTraitIndex.containsKey(message.file) ? moduleToTraitIndex.get(message.file) : -1, + moduleToMethodIndex.containsKey(message.file) ? moduleToMethodIndex.get(message.file) : -1 + ); + } + + } catch (IOException ex) { + //ignore + } + + } + }); + + for (ConnectionListener l : clisteners) { + l.connected(); + } + + con.addMessageListener(new DebugMessageListener() { + @Override + public void message(InTrace tr) { + for (TraceListener l : traceListeners) { + l.trace(tr.text); + } + } + }); + + if (!isAS3) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINER, "End of connect - sending continue"); + con.writeMessage(new OutRewind(con)); + con.writeMessage(new OutPlay(con)); + commands.sendContinue(); + } + + } catch (IOException ex) { + + synchronized (this) { + connected = false; + } + } + } + + private void sendBreakPoints(boolean force) throws IOException { + if (!force && !isPaused()) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "not sending bps, not paused"); + return; + } + synchronized (this) { + for (String scriptName : toRemoveBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toRemoveBPointMap.get(scriptName)) { + if (isBreakpointConfirmed(scriptName, line)) { + commands.removeBreakPoint(file, line); + confirmedPointMap.get(scriptName).remove(line); + if (confirmedPointMap.get(scriptName).isEmpty()) { + confirmedPointMap.remove(scriptName); + } + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} removed", new Object[]{scriptName, line}); + } + } + } + toRemoveBPointMap.clear(); + + for (String scriptName : toAddBPointMap.keySet()) { + int file = moduleIdOf(scriptName); + if (file > -1) { + for (int line : toAddBPointMap.get(scriptName)) { + if (commands.addBreakPoint(file, line)) { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} submitted successfully", new Object[]{scriptName, line}); + if (!confirmedPointMap.containsKey(scriptName)) { + confirmedPointMap.put(scriptName, new TreeSet<>()); + } + confirmedPointMap.get(scriptName).add(line); + } else { + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.INFO, "Breakpoint {0}:{1} unable to submit", new Object[]{scriptName, line}); + markBreakPointInvalid(scriptName, line); + } + } + } else { + for (int line : toAddBPointMap.get(scriptName)) { + markBreakPointInvalid(scriptName, line); + } + } + } + toAddBPointMap.clear(); + + } + Logger.getLogger(DebuggerHandler.class.getName()).log(Level.FINEST, "sending bps finished"); + + } + + public synchronized InConstantPool getConstantPool() { + if (!paused) { + return null; + } + return pool; + } + + public synchronized InCallFunction callMethod(Variable object, String methodName, List args) throws ActionScriptException { + return callFunction(false, methodName, object, args); + } + + public synchronized InCallFunction callMethod(String object, String methodName, List args) throws ActionScriptException { + InGetVariable igv = getVariable(0, object, false); + return callMethod(igv.parent, methodName, args); + } + + private static String typeAsStr(Object value) { + if (value == null) { + return "null"; + } + if ((value instanceof Long) || (value instanceof Integer)) { + return "int"; + } + if (value instanceof Number) { + return "Number"; + } + if (value instanceof String) { + return "String"; + } + if (value instanceof Variable) { + Variable v = (Variable) value; + return v.getTypeAsStr(); + } + return "String"; + } + + private static String valueAsStr(Object value) { + if (value == null) { + return "null"; + } + if (value instanceof Double) { + double doubleValue = ((Double) value).doubleValue(); + long longValue = (long) doubleValue; + if (doubleValue == longValue) { + return Long.toString(longValue); + } + } + + if (value instanceof Variable) { + Variable v = (Variable) value; + return valueAsStr(v.value); + } + return "" + value; + } + + public synchronized InCallFunction callFunction(boolean isConstructor, String funcName, Variable thisValue, List args) throws ActionScriptException { + List argTypes = new ArrayList<>(); + List argValues = new ArrayList<>(); + for (Object value : args) { + argTypes.add(typeAsStr(value)); + argValues.add(valueAsStr(value)); + } + String thisType = typeAsStr(thisValue); + String thisValueStr = valueAsStr(thisValue); + try { + InCallFunction icf = commands.callFunction(isConstructor, funcName, thisType, thisValueStr, argTypes, argValues); + if (!icf.variables.isEmpty()) { + if ((icf.variables.get(0).flags & VariableFlags.IS_EXCEPTION) > 0) { + throw new ActionScriptException("" + icf.variables.get(0).value); + } + } + return icf; + } catch (IOException e) { + + } + return null; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java index 9734d6e89..bcd7eed72 100644 --- a/src/com/jpexs/decompiler/flash/gui/ExportDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/ExportDialog.java @@ -1,386 +1,386 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.decompiler.flash.abc.ScriptPack; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.BinaryDataExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ButtonExportMode; -import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; -import com.jpexs.decompiler.flash.exporters.modes.FrameExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ImageExportMode; -import com.jpexs.decompiler.flash.exporters.modes.MorphShapeExportMode; -import com.jpexs.decompiler.flash.exporters.modes.MovieExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.exporters.modes.ShapeExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SoundExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SpriteExportMode; -import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode; -import com.jpexs.decompiler.flash.exporters.modes.TextExportMode; -import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; -import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; -import com.jpexs.decompiler.flash.tags.DefineSpriteTag; -import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; -import com.jpexs.decompiler.flash.tags.base.ASMSource; -import com.jpexs.decompiler.flash.tags.base.ButtonTag; -import com.jpexs.decompiler.flash.tags.base.FontTag; -import com.jpexs.decompiler.flash.tags.base.ImageTag; -import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; -import com.jpexs.decompiler.flash.tags.base.ShapeTag; -import com.jpexs.decompiler.flash.tags.base.SoundTag; -import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; -import com.jpexs.decompiler.flash.tags.base.TextTag; -import com.jpexs.decompiler.flash.timeline.Frame; -import com.jpexs.decompiler.flash.treeitems.TreeItem; -import java.awt.BorderLayout; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.event.ActionEvent; -import java.util.Arrays; -import java.util.List; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JTextField; - -/** - * - * @author JPEXS - */ -public class ExportDialog extends AppDialog { - - private int result = ERROR_OPTION; - - String[] optionNames = { - TagTreeModel.FOLDER_SHAPES, - TagTreeModel.FOLDER_TEXTS, - TagTreeModel.FOLDER_IMAGES, - TagTreeModel.FOLDER_MOVIES, - TagTreeModel.FOLDER_SOUNDS, - TagTreeModel.FOLDER_SCRIPTS, - TagTreeModel.FOLDER_BINARY_DATA, - TagTreeModel.FOLDER_FRAMES, - TagTreeModel.FOLDER_SPRITES, - TagTreeModel.FOLDER_BUTTONS, - TagTreeModel.FOLDER_FONTS, - TagTreeModel.FOLDER_MORPHSHAPES, - "symbolclass" - }; - - //Display options only when these classes found - Class[][] objClasses = { - {ShapeTag.class}, - {TextTag.class}, - {ImageTag.class}, - {DefineVideoStreamTag.class}, - {SoundTag.class}, - {ASMSource.class, ScriptPack.class}, - {DefineBinaryDataTag.class}, - {Frame.class}, - {Frame.class}, - {ButtonTag.class}, - {FontTag.class}, - {MorphShapeTag.class}, - {SymbolClassTypeTag.class}, - }; - - //Enum classes for values - Class[] optionClasses = { - ShapeExportMode.class, - TextExportMode.class, - ImageExportMode.class, - MovieExportMode.class, - SoundExportMode.class, - ScriptExportMode.class, - BinaryDataExportMode.class, - FrameExportMode.class, - SpriteExportMode.class, - ButtonExportMode.class, - FontExportMode.class, - MorphShapeExportMode.class, - SymbolClassExportMode.class, - }; - - Class[] zoomClasses = { - ShapeExportMode.class, - MorphShapeExportMode.class, - TextExportMode.class, - FrameExportMode.class, - SpriteExportMode.class, - ButtonExportMode.class, - }; - - private final JComboBox[] combos; - - private final JCheckBox[] checkBoxes; - - private final JCheckBox selectAllCheckBox; - - private JTextField zoomTextField = new JTextField(); - - public E getValue(Class option) { - for (int i = 0; i < optionClasses.length; i++) { - if (option == optionClasses[i]) { - E[] values = option.getEnumConstants(); - return values[combos[i].getSelectedIndex()]; - } - } - - return null; - } - - public boolean isOptionEnabled(Class option) { - for (int i = 0; i < optionClasses.length; i++) { - if (option == optionClasses[i]) { - return checkBoxes[i].isSelected(); - } - } - - return false; - } - - public double getZoom() { - return Double.parseDouble(zoomTextField.getText()) / 100; - } - - private void saveConfig() { - StringBuilder cfg = new StringBuilder(); - for (int i = 0; i < optionNames.length; i++) { - int selIndex = combos[i].getSelectedIndex(); - Class c = optionClasses[i]; - Object[] vals = c.getEnumConstants(); - String key = optionNames[i] + "." + vals[selIndex].toString().toLowerCase(); - if (i > 0) { - cfg.append(","); - } - cfg.append(key); - } - - Configuration.lastSelectedExportZoom.set(Double.parseDouble(zoomTextField.getText()) / 100); - Configuration.lastSelectedExportFormats.set(cfg.toString()); - } - - private boolean optionCanHandle(int optionIndex, Object e) { - for (int i = 0; i < objClasses[optionIndex].length; i++) { - Class c = objClasses[optionIndex][i]; - if (c.isInstance(e)) { - if (c == Frame.class) { //Frame class can be SWF frame or Sprite frame - Frame f = (Frame) e; - boolean isSprite = (f.timeline.timelined instanceof DefineSpriteTag); - boolean spritesWanted = optionClasses[optionIndex] == SpriteExportMode.class; - if (spritesWanted == isSprite) { //both true or both false - return true; - } - } else { - return true; - } - } - } - return false; - } - - public ExportDialog(List exportables) { - setTitle(translate("dialog.title")); - setResizable(false); - - Container cnt = getContentPane(); - cnt.setLayout(new BorderLayout()); - JPanel comboPanel = new JPanel(null); - int labWidth = 0; - boolean[] exportableExistsArray = new boolean[optionNames.length]; - for (int i = 0; i < optionNames.length; i++) { - boolean exportableExists = false; - if (exportables == null) { - exportableExists = true; - } else { - for (TreeItem e : exportables) { - if (optionCanHandle(i, e)) { - exportableExists = true; - } - } - } - - if (!exportableExists) { - continue; - } - - exportableExistsArray[i] = true; - - JLabel label = new JLabel(translate(optionNames[i])); - if (label.getPreferredSize().width > labWidth) { - labWidth = label.getPreferredSize().width; - } - } - - String exportFormatsStr = Configuration.lastSelectedExportFormats.get(); - if ("".equals(exportFormatsStr)) { - exportFormatsStr = null; - } - - String[] exportFormatsArr = new String[0]; - if (exportFormatsStr != null) { - if (exportFormatsStr.contains(",")) { - exportFormatsArr = exportFormatsStr.split(","); - } else { - exportFormatsArr = new String[]{exportFormatsStr}; - } - - } - - int comboWidth = 200; - int checkBoxWidth; - int top = 10; - - List exportFormats = Arrays.asList(exportFormatsArr); - combos = new JComboBox[optionNames.length]; - checkBoxes = new JCheckBox[optionNames.length]; - selectAllCheckBox = new JCheckBox(); - checkBoxWidth = selectAllCheckBox.getPreferredSize().width; - selectAllCheckBox.setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, selectAllCheckBox.getPreferredSize().height); - selectAllCheckBox.setSelected(true); - selectAllCheckBox.addActionListener((ActionEvent e) -> { - boolean selected = selectAllCheckBox.isSelected(); - for (JCheckBox checkBox : checkBoxes) { - if (checkBox != null) { - checkBox.setSelected(selected); - } - } - }); - comboPanel.add(selectAllCheckBox); - top += selectAllCheckBox.getHeight(); - - boolean zoomable = false; - for (int i = 0; i < optionNames.length; i++) { - Class c = optionClasses[i]; - Object[] vals = c.getEnumConstants(); - String[] names = new String[vals.length]; - int itemIndex = -1; - for (int j = 0; j < vals.length; j++) { - - String key = optionNames[i] + "." + vals[j].toString().toLowerCase(); - if (exportFormats.contains(key)) { - itemIndex = j; - } - names[j] = translate(key); - } - - combos[i] = new JComboBox<>(names); - if (itemIndex > -1) { - combos[i].setSelectedIndex(itemIndex); - } - - combos[i].setBounds(10 + labWidth + 10, top, comboWidth, combos[i].getPreferredSize().height); - - checkBoxes[i] = new JCheckBox(); - checkBoxes[i].setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, checkBoxes[i].getPreferredSize().height); - checkBoxes[i].setSelected(true); - - if (!exportableExistsArray[i]) { - continue; - } - - if (Arrays.asList(zoomClasses).contains(c)) { - zoomable = true; - } - - JLabel lab = new JLabel(translate(optionNames[i])); - lab.setBounds(10, top, lab.getPreferredSize().width, lab.getPreferredSize().height); - comboPanel.add(lab); - comboPanel.add(checkBoxes[i]); - comboPanel.add(combos[i]); - top += combos[i].getHeight(); - } - - int zoomWidth = 50; - if (zoomable) { - top += 2; - JLabel zlab = new JLabel(translate("zoom")); - zlab.setBounds(10, top + 4, zlab.getPreferredSize().width, zlab.getPreferredSize().height); - zoomTextField.setBounds(10 + labWidth + 10, top, zoomWidth, zoomTextField.getPreferredSize().height); - JLabel pctLabel = new JLabel(translate("zoom.percent")); - pctLabel.setBounds(10 + labWidth + 10 + zoomWidth + 5, top + 4, 20, pctLabel.getPreferredSize().height); - - comboPanel.add(zlab); - comboPanel.add(zoomTextField); - comboPanel.add(pctLabel); - top += zoomTextField.getHeight(); - } - - Dimension dim = new Dimension(10 + labWidth + 10 + checkBoxWidth + 10 + comboWidth + 10, top + 10); - comboPanel.setMinimumSize(dim); - comboPanel.setPreferredSize(dim); - cnt.add(comboPanel, BorderLayout.CENTER); - - JPanel buttonsPanel = new JPanel(new FlowLayout()); - JButton okButton = new JButton(translate("button.ok")); - okButton.addActionListener(this::okButtonActionPerformed); - - JButton cancelButton = new JButton(translate("button.cancel")); - cancelButton.addActionListener(this::cancelButtonActionPerformed); - - buttonsPanel.add(okButton); - buttonsPanel.add(cancelButton); - - cnt.add(buttonsPanel, BorderLayout.SOUTH); - pack(); - View.centerScreen(this); - View.setWindowIcon(this); - getRootPane().setDefaultButton(okButton); - setModal(true); - String pct = "" + Configuration.lastSelectedExportZoom.get() * 100; - if (pct.endsWith(".0")) { - pct = pct.substring(0, pct.length() - 2); - } - - zoomTextField.setText(pct); - } - - @Override - public void setVisible(boolean b) { - if (b) { - result = ERROR_OPTION; - } - super.setVisible(b); - } - - private void okButtonActionPerformed(ActionEvent evt) { - result = OK_OPTION; - try { - saveConfig(); - } catch (NumberFormatException nfe) { - JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - zoomTextField.requestFocusInWindow(); - return; - } - - setVisible(false); - } - - private void cancelButtonActionPerformed(ActionEvent evt) { - result = CANCEL_OPTION; - setVisible(false); - } - - public int showExportDialog() { - setVisible(true); - return result; - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.decompiler.flash.abc.ScriptPack; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.BinaryDataExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ButtonExportMode; +import com.jpexs.decompiler.flash.exporters.modes.FontExportMode; +import com.jpexs.decompiler.flash.exporters.modes.FrameExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ImageExportMode; +import com.jpexs.decompiler.flash.exporters.modes.MorphShapeExportMode; +import com.jpexs.decompiler.flash.exporters.modes.MovieExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.exporters.modes.ShapeExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SoundExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SpriteExportMode; +import com.jpexs.decompiler.flash.exporters.modes.SymbolClassExportMode; +import com.jpexs.decompiler.flash.exporters.modes.TextExportMode; +import com.jpexs.decompiler.flash.gui.tagtree.TagTreeModel; +import com.jpexs.decompiler.flash.tags.DefineBinaryDataTag; +import com.jpexs.decompiler.flash.tags.DefineSpriteTag; +import com.jpexs.decompiler.flash.tags.DefineVideoStreamTag; +import com.jpexs.decompiler.flash.tags.base.ASMSource; +import com.jpexs.decompiler.flash.tags.base.ButtonTag; +import com.jpexs.decompiler.flash.tags.base.FontTag; +import com.jpexs.decompiler.flash.tags.base.ImageTag; +import com.jpexs.decompiler.flash.tags.base.MorphShapeTag; +import com.jpexs.decompiler.flash.tags.base.ShapeTag; +import com.jpexs.decompiler.flash.tags.base.SoundTag; +import com.jpexs.decompiler.flash.tags.base.SymbolClassTypeTag; +import com.jpexs.decompiler.flash.tags.base.TextTag; +import com.jpexs.decompiler.flash.timeline.Frame; +import com.jpexs.decompiler.flash.treeitems.TreeItem; +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.util.Arrays; +import java.util.List; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; + +/** + * + * @author JPEXS + */ +public class ExportDialog extends AppDialog { + + private int result = ERROR_OPTION; + + String[] optionNames = { + TagTreeModel.FOLDER_SHAPES, + TagTreeModel.FOLDER_TEXTS, + TagTreeModel.FOLDER_IMAGES, + TagTreeModel.FOLDER_MOVIES, + TagTreeModel.FOLDER_SOUNDS, + TagTreeModel.FOLDER_SCRIPTS, + TagTreeModel.FOLDER_BINARY_DATA, + TagTreeModel.FOLDER_FRAMES, + TagTreeModel.FOLDER_SPRITES, + TagTreeModel.FOLDER_BUTTONS, + TagTreeModel.FOLDER_FONTS, + TagTreeModel.FOLDER_MORPHSHAPES, + "symbolclass" + }; + + //Display options only when these classes found + Class[][] objClasses = { + {ShapeTag.class}, + {TextTag.class}, + {ImageTag.class}, + {DefineVideoStreamTag.class}, + {SoundTag.class}, + {ASMSource.class, ScriptPack.class}, + {DefineBinaryDataTag.class}, + {Frame.class}, + {Frame.class}, + {ButtonTag.class}, + {FontTag.class}, + {MorphShapeTag.class}, + {SymbolClassTypeTag.class}, + }; + + //Enum classes for values + Class[] optionClasses = { + ShapeExportMode.class, + TextExportMode.class, + ImageExportMode.class, + MovieExportMode.class, + SoundExportMode.class, + ScriptExportMode.class, + BinaryDataExportMode.class, + FrameExportMode.class, + SpriteExportMode.class, + ButtonExportMode.class, + FontExportMode.class, + MorphShapeExportMode.class, + SymbolClassExportMode.class, + }; + + Class[] zoomClasses = { + ShapeExportMode.class, + MorphShapeExportMode.class, + TextExportMode.class, + FrameExportMode.class, + SpriteExportMode.class, + ButtonExportMode.class, + }; + + private final JComboBox[] combos; + + private final JCheckBox[] checkBoxes; + + private final JCheckBox selectAllCheckBox; + + private JTextField zoomTextField = new JTextField(); + + public E getValue(Class option) { + for (int i = 0; i < optionClasses.length; i++) { + if (option == optionClasses[i]) { + E[] values = option.getEnumConstants(); + return values[combos[i].getSelectedIndex()]; + } + } + + return null; + } + + public boolean isOptionEnabled(Class option) { + for (int i = 0; i < optionClasses.length; i++) { + if (option == optionClasses[i]) { + return checkBoxes[i].isSelected(); + } + } + + return false; + } + + public double getZoom() { + return Double.parseDouble(zoomTextField.getText()) / 100; + } + + private void saveConfig() { + StringBuilder cfg = new StringBuilder(); + for (int i = 0; i < optionNames.length; i++) { + int selIndex = combos[i].getSelectedIndex(); + Class c = optionClasses[i]; + Object[] vals = c.getEnumConstants(); + String key = optionNames[i] + "." + vals[selIndex].toString().toLowerCase(); + if (i > 0) { + cfg.append(","); + } + cfg.append(key); + } + + Configuration.lastSelectedExportZoom.set(Double.parseDouble(zoomTextField.getText()) / 100); + Configuration.lastSelectedExportFormats.set(cfg.toString()); + } + + private boolean optionCanHandle(int optionIndex, Object e) { + for (int i = 0; i < objClasses[optionIndex].length; i++) { + Class c = objClasses[optionIndex][i]; + if (c.isInstance(e)) { + if (c == Frame.class) { //Frame class can be SWF frame or Sprite frame + Frame f = (Frame) e; + boolean isSprite = (f.timeline.timelined instanceof DefineSpriteTag); + boolean spritesWanted = optionClasses[optionIndex] == SpriteExportMode.class; + if (spritesWanted == isSprite) { //both true or both false + return true; + } + } else { + return true; + } + } + } + return false; + } + + public ExportDialog(List exportables) { + setTitle(translate("dialog.title")); + setResizable(false); + + Container cnt = getContentPane(); + cnt.setLayout(new BorderLayout()); + JPanel comboPanel = new JPanel(null); + int labWidth = 0; + boolean[] exportableExistsArray = new boolean[optionNames.length]; + for (int i = 0; i < optionNames.length; i++) { + boolean exportableExists = false; + if (exportables == null) { + exportableExists = true; + } else { + for (TreeItem e : exportables) { + if (optionCanHandle(i, e)) { + exportableExists = true; + } + } + } + + if (!exportableExists) { + continue; + } + + exportableExistsArray[i] = true; + + JLabel label = new JLabel(translate(optionNames[i])); + if (label.getPreferredSize().width > labWidth) { + labWidth = label.getPreferredSize().width; + } + } + + String exportFormatsStr = Configuration.lastSelectedExportFormats.get(); + if ("".equals(exportFormatsStr)) { + exportFormatsStr = null; + } + + String[] exportFormatsArr = new String[0]; + if (exportFormatsStr != null) { + if (exportFormatsStr.contains(",")) { + exportFormatsArr = exportFormatsStr.split(","); + } else { + exportFormatsArr = new String[]{exportFormatsStr}; + } + + } + + int comboWidth = 200; + int checkBoxWidth; + int top = 10; + + List exportFormats = Arrays.asList(exportFormatsArr); + combos = new JComboBox[optionNames.length]; + checkBoxes = new JCheckBox[optionNames.length]; + selectAllCheckBox = new JCheckBox(); + checkBoxWidth = selectAllCheckBox.getPreferredSize().width; + selectAllCheckBox.setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, selectAllCheckBox.getPreferredSize().height); + selectAllCheckBox.setSelected(true); + selectAllCheckBox.addActionListener((ActionEvent e) -> { + boolean selected = selectAllCheckBox.isSelected(); + for (JCheckBox checkBox : checkBoxes) { + if (checkBox != null) { + checkBox.setSelected(selected); + } + } + }); + comboPanel.add(selectAllCheckBox); + top += selectAllCheckBox.getHeight(); + + boolean zoomable = false; + for (int i = 0; i < optionNames.length; i++) { + Class c = optionClasses[i]; + Object[] vals = c.getEnumConstants(); + String[] names = new String[vals.length]; + int itemIndex = -1; + for (int j = 0; j < vals.length; j++) { + + String key = optionNames[i] + "." + vals[j].toString().toLowerCase(); + if (exportFormats.contains(key)) { + itemIndex = j; + } + names[j] = translate(key); + } + + combos[i] = new JComboBox<>(names); + if (itemIndex > -1) { + combos[i].setSelectedIndex(itemIndex); + } + + combos[i].setBounds(10 + labWidth + 10, top, comboWidth, combos[i].getPreferredSize().height); + + checkBoxes[i] = new JCheckBox(); + checkBoxes[i].setBounds(10 + labWidth + 10 + comboWidth + 10, top, checkBoxWidth, checkBoxes[i].getPreferredSize().height); + checkBoxes[i].setSelected(true); + + if (!exportableExistsArray[i]) { + continue; + } + + if (Arrays.asList(zoomClasses).contains(c)) { + zoomable = true; + } + + JLabel lab = new JLabel(translate(optionNames[i])); + lab.setBounds(10, top, lab.getPreferredSize().width, lab.getPreferredSize().height); + comboPanel.add(lab); + comboPanel.add(checkBoxes[i]); + comboPanel.add(combos[i]); + top += combos[i].getHeight(); + } + + int zoomWidth = 50; + if (zoomable) { + top += 2; + JLabel zlab = new JLabel(translate("zoom")); + zlab.setBounds(10, top + 4, zlab.getPreferredSize().width, zlab.getPreferredSize().height); + zoomTextField.setBounds(10 + labWidth + 10, top, zoomWidth, zoomTextField.getPreferredSize().height); + JLabel pctLabel = new JLabel(translate("zoom.percent")); + pctLabel.setBounds(10 + labWidth + 10 + zoomWidth + 5, top + 4, 20, pctLabel.getPreferredSize().height); + + comboPanel.add(zlab); + comboPanel.add(zoomTextField); + comboPanel.add(pctLabel); + top += zoomTextField.getHeight(); + } + + Dimension dim = new Dimension(10 + labWidth + 10 + checkBoxWidth + 10 + comboWidth + 10, top + 10); + comboPanel.setMinimumSize(dim); + comboPanel.setPreferredSize(dim); + cnt.add(comboPanel, BorderLayout.CENTER); + + JPanel buttonsPanel = new JPanel(new FlowLayout()); + JButton okButton = new JButton(translate("button.ok")); + okButton.addActionListener(this::okButtonActionPerformed); + + JButton cancelButton = new JButton(translate("button.cancel")); + cancelButton.addActionListener(this::cancelButtonActionPerformed); + + buttonsPanel.add(okButton); + buttonsPanel.add(cancelButton); + + cnt.add(buttonsPanel, BorderLayout.SOUTH); + pack(); + View.centerScreen(this); + View.setWindowIcon(this); + getRootPane().setDefaultButton(okButton); + setModal(true); + String pct = "" + Configuration.lastSelectedExportZoom.get() * 100; + if (pct.endsWith(".0")) { + pct = pct.substring(0, pct.length() - 2); + } + + zoomTextField.setText(pct); + } + + @Override + public void setVisible(boolean b) { + if (b) { + result = ERROR_OPTION; + } + super.setVisible(b); + } + + private void okButtonActionPerformed(ActionEvent evt) { + result = OK_OPTION; + try { + saveConfig(); + } catch (NumberFormatException nfe) { + JOptionPane.showMessageDialog(ExportDialog.this, translate("zoom.invalid"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + zoomTextField.requestFocusInWindow(); + return; + } + + setVisible(false); + } + + private void cancelButtonActionPerformed(ActionEvent evt) { + result = CANCEL_OPTION; + setVisible(false); + } + + public int showExportDialog() { + setVisible(true); + return result; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java index 5575b7397..720918a55 100644 --- a/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java +++ b/src/com/jpexs/decompiler/flash/gui/abc/TraitsListItem.java @@ -1,137 +1,137 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.abc; - -import com.jpexs.decompiler.flash.abc.ABC; -import com.jpexs.decompiler.flash.abc.types.ConvertData; -import com.jpexs.decompiler.flash.abc.types.traits.Trait; -import com.jpexs.decompiler.flash.abc.types.traits.TraitType; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; -import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; -import com.jpexs.decompiler.flash.helpers.NulWriter; -import com.jpexs.decompiler.flash.search.ABCSearchResult; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author JPEXS - */ -public class TraitsListItem { - - private final TraitType type; - - private final boolean isStatic; - - private final ABC abc; - - private final int classIndex; - - private final int index; - - private final int scriptIndex; - - public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; - - public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; - - public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; - - public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { - this.type = type; - this.index = index; - this.isStatic = isStatic; - this.abc = abc; - this.classIndex = classIndex; - this.scriptIndex = scriptIndex; - } - - public int getGlobalTraitId() { - return abc.getGlobalTraitId(type, isStatic, classIndex, index); - } - - public String toStringName() { - - if (type == TraitType.INITIALIZER) { - if (!isStatic) { - return "__" + STR_INSTANCE_INITIALIZER; - } else { - return "__" + STR_CLASS_INITIALIZER; - } - } - if (type == TraitType.SCRIPT_INITIALIZER) { - return "__" + STR_SCRIPT_INITIALIZER; - } - if (isStatic) { - return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } else { - return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); - } - } - - @Override - public String toString() { - String s = ""; - try { - if (type == TraitType.SCRIPT_INITIALIZER) { - s = STR_SCRIPT_INITIALIZER; - } else if (type == TraitType.INITIALIZER) { - if (!isStatic) { - s = STR_INSTANCE_INITIALIZER; - } else { - s = STR_CLASS_INITIALIZER; - } - } else if (isStatic) { - ConvertData convertData = new ConvertData(); - Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } else { - ConvertData convertData = new ConvertData(); - Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); - trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); - HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); - trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); - s = writer.toString(); - } - } catch (InterruptedException ex) { - Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); - } - s = s.replaceAll("[ \r\n]+", " "); - return s; - } - - public TraitType getType() { - return type; - } - - public boolean isStatic() { - return isStatic; - } - - public int getClassIndex() { - return classIndex; - } - - public int getIndex() { - return index; - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.abc; + +import com.jpexs.decompiler.flash.abc.ABC; +import com.jpexs.decompiler.flash.abc.types.ConvertData; +import com.jpexs.decompiler.flash.abc.types.traits.Trait; +import com.jpexs.decompiler.flash.abc.types.traits.TraitType; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.exporters.modes.ScriptExportMode; +import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter; +import com.jpexs.decompiler.flash.helpers.NulWriter; +import com.jpexs.decompiler.flash.search.ABCSearchResult; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * + * @author JPEXS + */ +public class TraitsListItem { + + private final TraitType type; + + private final boolean isStatic; + + private final ABC abc; + + private final int classIndex; + + private final int index; + + private final int scriptIndex; + + public static String STR_INSTANCE_INITIALIZER = ABCSearchResult.STR_INSTANCE_INITIALIZER; + + public static String STR_CLASS_INITIALIZER = ABCSearchResult.STR_CLASS_INITIALIZER; + + public static String STR_SCRIPT_INITIALIZER = ABCSearchResult.STR_SCRIPT_INITIALIZER; + + public TraitsListItem(TraitType type, int index, boolean isStatic, ABC abc, int classIndex, int scriptIndex) { + this.type = type; + this.index = index; + this.isStatic = isStatic; + this.abc = abc; + this.classIndex = classIndex; + this.scriptIndex = scriptIndex; + } + + public int getGlobalTraitId() { + return abc.getGlobalTraitId(type, isStatic, classIndex, index); + } + + public String toStringName() { + + if (type == TraitType.INITIALIZER) { + if (!isStatic) { + return "__" + STR_INSTANCE_INITIALIZER; + } else { + return "__" + STR_CLASS_INITIALIZER; + } + } + if (type == TraitType.SCRIPT_INITIALIZER) { + return "__" + STR_SCRIPT_INITIALIZER; + } + if (isStatic) { + return abc.class_info.get(classIndex).static_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } else { + return abc.instance_info.get(classIndex).instance_traits.traits.get(index).getName(abc).getName(abc.constants, null, false, true); + } + } + + @Override + public String toString() { + String s = ""; + try { + if (type == TraitType.SCRIPT_INITIALIZER) { + s = STR_SCRIPT_INITIALIZER; + } else if (type == TraitType.INITIALIZER) { + if (!isStatic) { + s = STR_INSTANCE_INITIALIZER; + } else { + s = STR_CLASS_INITIALIZER; + } + } else if (isStatic) { + ConvertData convertData = new ConvertData(); + Trait trait = abc.class_info.get(classIndex).static_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, true, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } else { + ConvertData convertData = new ConvertData(); + Trait trait = abc.instance_info.get(classIndex).instance_traits.traits.get(index); + trait.convertHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, new NulWriter(), new ArrayList<>(), false); + HighlightedTextWriter writer = new HighlightedTextWriter(Configuration.getCodeFormatting(), false); + trait.toStringHeader(null, convertData, "", abc, false, ScriptExportMode.AS, scriptIndex, classIndex, writer, new ArrayList<>(), false); + s = writer.toString(); + } + } catch (InterruptedException ex) { + Logger.getLogger(TraitsListItem.class.getName()).log(Level.SEVERE, null, ex); + } + s = s.replaceAll("[ \r\n]+", " "); + return s; + } + + public TraitType getType() { + return type; + } + + public boolean isStatic() { + return isStatic; + } + + public int getClassIndex() { + return classIndex; + } + + public int getIndex() { + return index; + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties index 669f23a6e..811de2324 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame_zh.properties @@ -1,734 +1,734 @@ -# Copyright (C) 2010-2016 JPEXS -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -menu.file = \u6587\u4ef6 -menu.file.open = \u6253\u5f00... -menu.file.save = \u4fdd\u5b58 -menu.file.saveas = \u53e6\u5b58\u4e3a... -menu.file.export.fla = \u5bfc\u51fa\u5230 FLA -menu.file.export.all = \u5bfc\u51fa\u6240\u6709 -menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 -menu.file.exit = \u9000\u51fa - -menu.tools = \u5de5\u5177 -menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... -menu.tools.proxy = \u4ee3\u7406 -menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 -menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... -menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 -menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 -menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b - -menu.settings = \u8bbe\u7f6e -menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 -menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 -menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f -menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) -menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 -menu.settings.language = \u66f4\u6539\u8bed\u8a00 -menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 -menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b - -menu.help = \u5e2e\u52a9 -menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... -menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! -menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 -menu.help.about = \u5173\u4e8e... - -contextmenu.remove = \u5220\u9664 - -button.save = \u4fdd\u5b58 -button.edit = \u7f16\u8f91 -button.cancel = \u53d6\u6d88 -button.replace = \u66ff\u6362... - -notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) - -swfpreview = SWF \u9884\u89c8 -swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) - -parameters = \u53c2\u6570 - -rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: - -rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. -rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. - -node.texts = \u6587\u672c -node.images = \u56fe\u50cf -node.movies = \u89c6\u9891 -node.sounds = \u58f0\u97f3 -node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e -node.fonts = \u5b57\u4f53 -node.sprites = \u7cbe\u7075 -node.shapes = \u56fe\u5f62 -node.morphshapes = \u53d8\u5f62\u5f62\u72b6 -node.buttons = \u6309\u94ae -node.frames = \u5e27 -node.scripts = \u811a\u672c - -message.warning = \u8b66\u544a -message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f -message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 -message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f -message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f -message.confirm = \u786e\u8ba4 - -message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 - -message.parallel = \u591a\u7ebf\u7a0b -message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait - -message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 -message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 -message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 -message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f -message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 - -work.buffering = \u7f13\u51b2 -work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 -work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae -work.disassembling = \u53cd\u6c47\u7f16 -work.exporting = \u5bfc\u51fa\u4e2d -work.searching = \u641c\u7d22\u4e2d -work.renaming = \u91cd\u547d\u540d\u4e2d -work.exporting.fla = \u5bfc\u51fa FLA \u4e2d -work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d -work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d -work.decompiling = \u53cd\u7f16\u8bd1\u4e2d -work.gettingvariables = \u83b7\u53d6\u53d8\u91cf -work.reading.swf = \u8bfb\u5165 SWF \u4e2d -work.creatingwindow = \u521b\u5efa\u7a97\u4f53 -work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 - -work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 - -message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . -message.search.notfound.title = \u6ca1\u6709\u627e\u5230 - -message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname -message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 -message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 -message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% - -filter.images = \u56fe\u7247 (%extensions%) -filter.fla = %version% \u6587\u4ef6 (*.fla) -filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) -filter.swf = SWF \u6587\u4ef6 (*.swf) - -error = \u9519\u8bef -error.image.invalid = \u65e0\u6548\u56fe\u7247. - -error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c -error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 -error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 -error.export = \u5bfc\u51fa\u65f6\u9519\u8bef - -export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 -export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% - -update.check.title = \u786e\u8ba4\u66f4\u65b0 -update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. - -message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. -message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% - -proxy = \u4ee3\u7406 -proxy.start = \u5f00\u59cb\u4ee3\u7406 -proxy.stop = \u505c\u6b62\u4ee3\u7406 -proxy.show = \u663e\u793a\u4ee3\u7406 -exit = \u9000\u51fa - -panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 -panel.decompiled = AS\u8d44\u6e90 - -search.info = \u641c\u7d22 "%text%" : -search.script = \u811a\u672c - -constants = \u5e38\u91cf -traits = Traits - -pleasewait = \u8bf7\u7a0d\u7b49 - -abc.detail.methodtrait = Method/Getter/Setter Trait -abc.detail.unsupported = - -abc.detail.slotconsttrait = Slot/Const Trait -abc.detail.traitname = \u540d\u79f0: - -abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: -abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: -abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: -abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) -abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 - -abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: -abc.detail.methodinfo.parameters = \u53c2\u6570: -abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: - -error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef -error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef - -abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f -abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 -abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 - -abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: - -error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef - -message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. -info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. - -button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 -button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 - -action.edit.experimental = (\u5b9e\u9a8c\u7684) - -message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f - -error.action.save = %error% \u5728 %line% \u884c - -message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f - -#after version 1.6.5u1: - -button.ok = \u786e\u5b9a -button.cancel = \u53d6\u6d88 - -font.name = \u5b57\u4f53\u540d\u79f0: -font.isbold = \u52a0\u7c97: -font.isitalic = \u659c\u4f53: -font.ascent = \u4e0a\u6807: -font.descent = \u4e0b\u6807: -font.leading = Leading: -font.characters = \u5b57\u7b26\u96c6: -font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: -value.unknown = ? - -yes = \u662f -no = \u5426 - -errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 -errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 - -#after version 1.6.6: - -dialog.message.title = \u6d88\u606f -dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 - -button.yes = \u662f -button.no = \u5426 - -FileChooser.openButtonText = \u6253\u5f00 -FileChooser.openButtonToolTipText = \u6253\u5f00 -FileChooser.lookInLabelText = \u6d4f\u89c8: -FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 -FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: -FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: -FileChooser.listViewButtonToolTipText = \u5217\u8868 -FileChooser.listViewButtonAccessibleName = \u5217\u8868 -FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f -FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 -FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 -FileChooser.fileNameHeaderText = \u540d\u79f0 -FileChooser.fileSizeHeaderText = \u5927\u5c0f -FileChooser.fileTypeHeaderText = \u7c7b\u578b -FileChooser.fileDateHeaderText = \u65e5\u671f -FileChooser.fileAttrHeaderText = \u5c5e\u6027 -FileChooser.openDialogTitleText = \u6253\u5f00 -FileChooser.directoryDescriptionText = \u76ee\u5f55 -FileChooser.directoryOpenButtonText = \u6253\u5f00 -FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 -FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 -FileChooser.helpButtonText = \u5e2e\u52a9 -FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 -FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 -FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} -FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 -FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) -FileChooser.saveButtonText = \u4fdd\u5b58 -FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 -FileChooser.saveDialogTitleText = \u4fdd\u5b58 -FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: -FileChooser.updateButtonText = \u5237\u65b0 -FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 - -#after version 1.6.6u2: - -FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f -FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 -FileChooser.fileDateHeader.textAndMnemonic = Modified -FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 -FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: -FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f -FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b -FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: -FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: -FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 -FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 -FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 -FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: -FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 -FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 -FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 -FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: -FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 -FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 -FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 -FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 -FileChooser.listViewActionLabelText = \u5217\u8868 -FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f -FileChooser.refreshActionLabelText = \u5237\u65b0 -FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 -FileChooser.viewMenuLabelText = \u6d4f\u89c8 -FileChooser.fileSizeKiloBytes = {0} KB -FileChooser.fileSizeMegaBytes = {0} MB -FileChooser.fileSizeGigaBytes = {0} GB -FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: - -error.occured = \u53d1\u751f\u9519\u8bef : %error% -button.abort = \u7ec8\u6b62 -button.retry = \u91cd\u8bd5 -button.ignore = \u5ffd\u7565 - -font.source = \u6e90\u5b57\u4f53: - -#after version 1.6.7: - -menu.export = \u5bfc\u51fa -menu.general = \u901a\u7528 -menu.language = \u8bed\u8a00 - -startup.welcometo = \u6b22\u8fce\u4f7f\u7528 -startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 - -error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". - -warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 - -#after version 1.7.0u1: - -menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF -menu.file.reload = \u91cd\u8f7d -message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f - -dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 -button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 - -ColorChooser.okText = \u786e\u5b9a -ColorChooser.cancelText = \u53d6\u6d88 -ColorChooser.resetText = \u91cd\u7f6e -ColorChooser.previewText = \u9884\u89c8 -ColorChooser.swatchesNameText = \u8c03\u8272\u677f -ColorChooser.swatchesRecentText = \u6700\u8fd1: -ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c - -#after version 1.7.1: - -preview.play = \u64ad\u653e -preview.pause = \u6682\u505c -preview.stop = \u505c\u6b62 - -message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f - -menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 - -#after version 1.7.2u2 - -error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 -button.addtrait = \u6dfb\u52a0 Trait -button.font.embed = \u5d4c\u5165... -button.yes.all = \u5168\u662f -button.no.all = \u5168\u5426 -message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f - -filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) -filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b -work.canceled = \u5df2\u53d6\u6d88 -work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b -menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e -menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 - -#after version 1.7.4 -work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d -message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f -contextmenu.closeSwf = \u5173\u95ed SWF -menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 -menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... -filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) - -#after version 1.8.0 -font.updateTexts = \u66f4\u65b0\u6587\u672c - -#after version 1.8.0u1 -menu.file.close = \u5173\u95ed -menu.file.closeAll = \u5168\u90e8\u5173\u95ed -menu.tools.otherTools = \u5176\u4ed6 -menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 -fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: -fontName.copyright = \u5b57\u4f53\u7248\u6743: -button.preview = \u9884\u89c8 -button.reset = \u91cd\u7f6e -errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 -errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 - -decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef - -disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 -disassemblingProgress.reading = \u8bfb\u53d6\u4e2d -disassemblingProgress.deobfuscating = \u6df7\u6dc6 - -contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 - -filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) -filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) -filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) - -open.error = \u9519\u8bef -open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 -open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 - -node.others = \u5176\u4ed6 - -#after version 1.8.1 -menu.tools.search = \u6587\u672c\u67e5\u627e - -#after version 1.8.1u1 -menu.tools.timeline = \u65f6\u95f4\u8f74 - -dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 -button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 - -#default item name, will be used in following sentences -generictag.array.item = \u9879\u76ee -generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% -generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d -generictag.array.remove = \u79fb\u9664 %item% -generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e -generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% - -#after version 2.0.0 -contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 - -filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) -filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) -filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) - -error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 - -button.prev = \u4e0a\u4e00\u9875 -button.next = \u4e0b\u4e00\u9875 - -#after version 2.1.0 -message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 -message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 -message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 - -message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 -message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a - -menu.import = \u5bfc\u5165 -menu.file.import.text = \u5bfc\u5165\u6587\u672c -import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 -error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f - -#after version 2.1.1 -contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 - -abc.action.find-usages = \u67e5\u627e\u5f15\u7528 -abc.action.find-declaration = \u67e5\u627e\u58f0\u660e - -contextmenu.rawEdit = RAW\u7f16\u8f91 -contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 - -menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 - -menu.view = \u67e5\u770b -menu.file.view.resources = \u8d44\u6e90 -menu.file.view.hex = \u4e8c\u8fdb\u5236 - -node.header = \u6587\u4ef6\u5934 - -header.signature = \u6587\u4ef6\u6807\u8bc6: -header.compression = \u538b\u7f29\u6a21\u5f0f: -header.compression.lzma = LZMA -header.compression.zlib = ZLIB -header.compression.none = \u65e0\u538b\u7f29 -header.version = SWF\u7248\u672c: -header.gfx = GFX: -header.filesize = \u6587\u4ef6\u5927\u5c0f -header.framerate = \u5e27\u7387: -header.framecount = \u5e27\u6570: -header.displayrect = \u663e\u793a\u533a\u57df: -header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips -header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels - -#after version 2.1.2 -contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 -contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c -contextmenu.parseABC = \u89e3\u6790ABC -contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 - -#after version 2.1.3 -menu.deobfuscation = \u53cd\u6df7\u6dc6 -menu.file.deobfuscation.old = \u65e7\u6837\u5f0f -menu.file.deobfuscation.new = \u65b0\u6837\u5f0f - -#after version 2.1.4 -contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 -binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 - -#after version 3.0.0 -button.zoomin.hint = \u653e\u5927 -button.zoomout.hint = \u7f29\u5c0f -button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 -button.zoomnone.hint = \u7f29\u653e\u5230 1:1 -button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f - -editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 - -#Font name which is presented in the SWF Font tag -font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: - -menu.debugger = \u8c03\u8bd5\u5668 -menu.debugger.switch = \u8c03\u8bd5\u5668 -menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 -menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 - -message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 - -contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e - -deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d -deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 - -#after version 4.0.2 -preview.nextframe = \u4e0b\u4e00\u5e27 -preview.prevframe = \u4e0a\u4e00\u5e27 -preview.gotoframe = \u8f6c\u5230\u5e27... - -preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 -preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) -preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 - -error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f - -#after version 4.0.5 -contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 -fit = \u9002\u5408 -button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c - -menu.tools.replace = \u6587\u672c\u66ff\u6362 - -message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f -message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f - -contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 -contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML -contextmenu.importSwfXml = \u5bfc\u5165 SWF XML - -filter.xml = XML - -#after version 4.1.0 -contextmenu.undo = \u64a4\u6d88 - -text.align.left = \u5de6\u5bf9\u9f50 -text.align.right = \u53f3\u5bf9\u9f50 -text.align.center = \u5c45\u4e2d\u5bf9\u9f50 -text.align.justify = \u4e24\u7aef\u5bf9\u9f50 - -text.undo = \u64a4\u6d88\u66f4\u6539 - -menu.file.import.xml = \u5bfc\u5165 SWF XML -menu.file.export.xml = \u5bfc\u51fa SWF XML - -#after version 4.1.1 -text.align.translatex.decrease = \u51cf\u5c11 TranslateX -text.align.translatex.increase = \u589e\u52a0 TranslateX -selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e -selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e -button.ignoreAll = \u5ffd\u7565\u5168\u90e8 -menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class -text.toggleCase = \u5207\u6362\u5916\u58f3 - -#after version 5.0.2 -preview.loop = \u5faa\u73af -menu.file.import.script = \u5bfc\u5165\u811a\u672c -contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e -button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e -button.resolveConstants = \u89e3\u6790\u5e38\u6570 - -#after version 5.1.0 -button.viewConstants = \u67e5\u770b\u5e38\u91cf -work.exported = \u5bfc\u51fa -button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... - -tagInfo.header.name = \u540d\u79f0 -tagInfo.header.value = \u503c -tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b -tagInfo.characterId = \u5b57\u7b26 ID -tagInfo.offset = \u504f\u79fb -tagInfo.length = \u957f\u5ea6 -tagInfo.bounds = \u8fb9\u754c -tagInfo.width = \u5bbd\u5ea6 -tagInfo.height = \u9ad8\u5ea6 -tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 - -button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a -taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f - -tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 - -#after version 5.3.0 -header.uncompressed = \u65e0\u538b\u7f29 -header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 -header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 -header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 - -tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 -tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f -tagInfo.samplingRate = \u91c7\u6837\u7387 -tagInfo.stereo = \u7acb\u4f53\u58f0 -tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf - -filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) -filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 - -import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 -import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 - -error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% -error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 - -#after version 6.0.2 -contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 -menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e - -#after version 6.1.1 -menu.file.start = \u5f00\u59cb -menu.file.start.run = \u8fd0\u884c -menu.file.start.stop = \u505c\u6b62 -menu.file.start.debug = \u8c03\u8bd5 -menu.debugging = \u8c03\u8bd5\u4e2d -menu.debugging.debug = \u8c03\u8bd5 -menu.debugging.debug.stop = \u505c\u6b62 -menu.debugging.debug.pause = \u6682\u505c -menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c -menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 -menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa -menu.debugging.debug.continue = \u7ee7\u7eed -menu.debugging.debug.stack = \u5806\u6808... -menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... - -message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 -message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 - -debugpanel.header = \u8c03\u8bd5\u4e2d - -variables.header.registers = \u5bc4\u5b58\u5668 -variables.header.locals = \u672c\u673a -variables.header.arguments = \u53c2\u6570 -variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe -variables.column.name = \u540d\u79f0 -variables.column.type = \u7c7b\u578b -variables.column.value = \u503c - -callStack.header = \u8c03\u7528\u5806\u6808 -callStack.header.file = \u6587\u4ef6 -callStack.header.line = \u884c - -stack.header = \u5806\u53e0 -stack.header.item = \u9879\u76ee - -constantpool.header = \u5e38\u91cf\u6c60 -constantpool.header.id = Id -constantpool.header.value = \u503c - -work.running = \u8fd0\u884c\u884c -work.debugging = \u8c03\u8bd5\u4e2d -work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 -work.breakat = \u65ad\u70b9\u5728\u0020 -work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 - -debuglog.header = \u65e5\u5fd7 -debuglog.button.clear = \u6e05\u9664 - -#after 7.0.1 -work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 - -error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 - -debug.break.reason.unknown = (\u672a\u77e5) -debug.break.reason.breakpoint = (\u65ad\u70b9) -debug.break.reason.watch = (\u89c2\u770b) -debug.break.reason.fault = (\u6545\u969c) -debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) -debug.break.reason.step = (\u6b65\u9aa4) -debug.break.reason.halt = (\u505c\u6b62) -debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) - -menu.file.start.debugpcode = \u8c03\u8bd5 P-code - -#after 7.1.2 -button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... -message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 - -message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f -message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f - -message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 -message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f - -menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f - -#after 8.0.1 -menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a -message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 - -menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 -message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f -export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 - -button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 -button.remove = \u6e05\u9664 -button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb - -generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 -generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ - ------------------\n\ - \u6807\u91cf\u7c7b\u578b:\n\ - %scalar_samples%\ - \u5176\u4ed6\u7c7b\u578b:\n\ - %nonscalar_samples%\ - \n\ - \u6ce8\u610f:\n\ - \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ - %reference_sample%\n\ - \ * Keys in Dictionary entries can be any type\n -contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a - +# Copyright (C) 2010-2016 JPEXS +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +menu.file = \u6587\u4ef6 +menu.file.open = \u6253\u5f00... +menu.file.save = \u4fdd\u5b58 +menu.file.saveas = \u53e6\u5b58\u4e3a... +menu.file.export.fla = \u5bfc\u51fa\u5230 FLA +menu.file.export.all = \u5bfc\u51fa\u6240\u6709 +menu.file.export.selection = \u5bfc\u51fa\u6240\u9009 +menu.file.exit = \u9000\u51fa + +menu.tools = \u5de5\u5177 +menu.tools.searchas = \u5728\u6240\u6709AS\u4ee3\u7801\u4e2d\u641c\u7d22... +menu.tools.proxy = \u4ee3\u7406 +menu.tools.deobfuscation = \u53cd\u6df7\u6dc6 +menu.tools.deobfuscation.pcode = P\u4ee3\u7801\u53cd\u6df7\u6dc6... +menu.tools.deobfuscation.globalrename = \u5168\u5c40\u91cd\u547d\u540d\u6807\u8bc6\u7b26 +menu.tools.deobfuscation.renameinvalid = \u91cd\u547d\u540d\u65e0\u6548\u6807\u8bc6\u7b26 +menu.tools.gotoDocumentClass = \u8df3\u8f6c\u5230\u4e3b\u7c7b + +menu.settings = \u8bbe\u7f6e +menu.settings.autodeobfuscation = \u81ea\u52a8\u53cd\u6df7\u6dc6 +menu.settings.internalflashviewer = \u4f7f\u7528\u5185\u90e8Flash\u64ad\u653e\u5668 +menu.settings.parallelspeedup = \u591a\u7ebf\u7a0b\u52a0\u901f +menu.settings.disabledecompilation = \u7981\u7528\u53cd\u7f16\u8bd1 (\u4ec5\u53cd\u6c47\u7f16) +menu.settings.addtocontextmenu = \u6dfb\u52a0FFDec\u5230SWF\u6587\u4ef6\u83dc\u5355 +menu.settings.language = \u66f4\u6539\u8bed\u8a00 +menu.settings.cacheOnDisk = \u4f7f\u7528\u786c\u76d8\u4f5c\u7f13\u5b58 +menu.settings.gotoMainClassOnStartup = \u52a0\u8f7d\u5b8c\u6bd5\u540e\u9ad8\u4eae\u4e3b\u7c7b + +menu.help = \u5e2e\u52a9 +menu.help.checkupdates = \u68c0\u67e5\u66f4\u65b0... +menu.help.helpus = \u5e2e\u52a9\u6211\u4eec! +menu.help.homepage = \u8bbf\u95ee\u4e3b\u9875 +menu.help.about = \u5173\u4e8e... + +contextmenu.remove = \u5220\u9664 + +button.save = \u4fdd\u5b58 +button.edit = \u7f16\u8f91 +button.cancel = \u53d6\u6d88 +button.replace = \u66ff\u6362... + +notavailonthisplatform = \u9884\u89c8\u8be5\u5bf9\u8c61\u662f\u5426\u53ef\u7528\u4e8e\u5f53\u524d\u5e73\u53f0. (\u4ec5Windows) + +swfpreview = SWF \u9884\u89c8 +swfpreview.internal = SWF \u9884\u89c8(\u4f7f\u7528\u5185\u7f6e\u64ad\u653e\u5668) + +parameters = \u53c2\u6570 + +rename.enternew = \u8bf7\u8f93\u5165\u65b0\u540d\u79f0: + +rename.finished.identifier = \u6807\u8bc6\u7b26\u5df2\u88ab\u91cd\u547d\u540d. +rename.finished.multiname = %count% \u4e2a multiname \u5df2\u88ab\u91cd\u547d\u540d. + +node.texts = \u6587\u672c +node.images = \u56fe\u50cf +node.movies = \u89c6\u9891 +node.sounds = \u58f0\u97f3 +node.binaryData = \u4e8c\u8fdb\u5236\u6570\u636e +node.fonts = \u5b57\u4f53 +node.sprites = \u7cbe\u7075 +node.shapes = \u56fe\u5f62 +node.morphshapes = \u53d8\u5f62\u5f62\u72b6 +node.buttons = \u6309\u94ae +node.frames = \u5e27 +node.scripts = \u811a\u672c + +message.warning = \u8b66\u544a +message.confirm.experimental = \u4e0b\u9762\u7684\u64cd\u4f5c\u53ef\u80fd\u4f1a\u635f\u574fSWF\u6587\u4ef6\uff0c\u5e76\u5c06\u5bfc\u81f4\u65e0\u6cd5\u64ad\u653e\u3002\r\n\u60a8\u5fc5\u987b\u6e05\u695a\u5730\u8ba4\u8bc6\u5230\u8fd9\u9879\u98ce\u9669\uff0c\u662f\u5426\u7ee7\u7eed\uff1f +message.confirm.parallel = \u591a\u7ebf\u7a0b\uff0c\u53ef\u4ee5\u52a0\u5feb\u52a0\u8f7d\u53ca\u53cd\u7f16\u8bd1\u901f\u5ea6\uff0c\u4f46\u4f1a\u6d88\u8017\u66f4\u591a\u7684\u5185\u5b58\u3002 +message.confirm.on = \u60a8\u786e\u5b9a\u8981\u5f00\u542f\u5417\uff1f +message.confirm.off = \u60a8\u786e\u5b9a\u8981\u5173\u95ed\u5417\uff1f +message.confirm = \u786e\u8ba4 + +message.confirm.autodeobfuscate = \u81ea\u52a8\u53cd\u6df7\u6dc6\u662f\u4e00\u79cd\u80fd\u53cd\u7f16\u8bd1\u88ab\u6df7\u6dc6\u4ee3\u7801\u7684\u529f\u80fd\u3002\r\n \u53cd\u6df7\u6dc6\u5c06\u5bfc\u81f4\u53cd\u7f16\u8bd1\u7684\u901f\u5ea6\u8f83\u6162\uff0c\u5e76\u53ef\u80fd\u4f1a\u7565\u8fc7\u51fa\u73b0\u7684\u201c\u6b7b\u4ee3\u7801\u201d\u3002\r\n \u5982\u679c\u60a8\u786e\u8ba4\u6587\u4ef6\u4e2d\u7684\u4ee3\u7801\u6ca1\u6709\u88ab\u6df7\u6dc6\uff0c\u5efa\u8bae\u60a8\u5173\u95ed\u8be5\u9009\u9879\u3002 + +message.parallel = \u591a\u7ebf\u7a0b +message.trait.saved = \u5df2\u6210\u529f\u4fdd\u5b58Trait + +message.constant.new.string = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u5b57\u7b26\u4e32 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.string.title = \u6dfb\u52a0\u5b57\u7b26\u4e32 +message.constant.new.integer = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.integer.title = \u6dfb\u52a0\u6574\u6570 +message.constant.new.unsignedinteger = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u65e0\u7b26\u53f7\u6574\u6570 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.unsignedinteger.title = \u6dfb\u52a0\u65e0\u7b26\u53f7\u6574\u6570 +message.constant.new.double = \u5728\u5e38\u91cf\u8868\u4e2d\u627e\u4e0d\u5230\u53cc\u5b57\u8282 "%value%" \uff0c\u9700\u8981\u6dfb\u52a0\u5417\uff1f +message.constant.new.double.title = \u6dfb\u52a0\u53cc\u5b57\u8282 + +work.buffering = \u7f13\u51b2 +work.waitingfordissasembly = \u7b49\u5f85\u53cd\u6c47\u7f16 +work.gettinghilights = \u83b7\u53d6\u9ad8\u4eae +work.disassembling = \u53cd\u6c47\u7f16 +work.exporting = \u5bfc\u51fa\u4e2d +work.searching = \u641c\u7d22\u4e2d +work.renaming = \u91cd\u547d\u540d\u4e2d +work.exporting.fla = \u5bfc\u51fa FLA \u4e2d +work.renaming.identifiers = \u91cd\u547d\u540d\u6807\u8bc6\u7b26\u4e2d +work.deobfuscating = \u53cd\u6df7\u6dc6\u4e2d +work.decompiling = \u53cd\u7f16\u8bd1\u4e2d +work.gettingvariables = \u83b7\u53d6\u53d8\u91cf +work.reading.swf = \u8bfb\u5165 SWF \u4e2d +work.creatingwindow = \u521b\u5efa\u7a97\u4f53 +work.buildingscripttree = \u5efa\u7acb\u811a\u672c\u6811 + +work.deobfuscating.complete = \u53cd\u6df7\u6dc6\u5b8c\u6210 + +message.search.notfound = \u6ca1\u6709\u627e\u5230\u5b57\u7b26\u4e32 "%searchtext%" . +message.search.notfound.title = \u6ca1\u6709\u627e\u5230 + +message.rename.notfound.multiname = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230multiname +message.rename.notfound.identifier = \u5728\u5149\u6807\u4e0b\u65b9\u6ca1\u6709\u627e\u5230\u6807\u8bc6\u7b26 +message.rename.notfound.title = \u6ca1\u6709\u627e\u5230 +message.rename.renamed = \u6807\u8bc6\u7b26\u91cd\u547d\u540d\u6570\uff1a %count% + +filter.images = \u56fe\u7247 (%extensions%) +filter.fla = %version% \u6587\u4ef6 (*.fla) +filter.xfl = %version% \u672a\u538b\u7f29\u6587\u4ef6 (*.xfl) +filter.swf = SWF \u6587\u4ef6 (*.swf) + +error = \u9519\u8bef +error.image.invalid = \u65e0\u6548\u56fe\u7247. + +error.text.invalid = \u65e0\u6548\u6587\u672c: %text% \u5728 %line% \u884c +error.file.save = \u65e0\u6cd5\u4fdd\u5b58\u6587\u4ef6 +error.file.write = \u65e0\u6cd5\u5199\u6587\u4ef6 +error.export = \u5bfc\u51fa\u65f6\u9519\u8bef + +export.select.directory = \u8bf7\u9009\u62e9\u5bfc\u51fa\u76ee\u5f55 +export.finishedin = \u5bfc\u51fa\u5b8c\u6210\uff0c\u8017\u8d39\u65f6\u95f4 %time% + +update.check.title = \u786e\u8ba4\u66f4\u65b0 +update.check.nonewversion = \u65e0\u53ef\u7528\u66f4\u65b0. + +message.helpus = \u8bf7\u8bbf\u95ee\r\n%url%\r\n\u83b7\u5f97\u76f8\u5173\u7ec6\u8282. +message.homepage = \u8bbf\u95ee\u4e3b\u9875\uff1a \r\n%url% + +proxy = \u4ee3\u7406 +proxy.start = \u5f00\u59cb\u4ee3\u7406 +proxy.stop = \u505c\u6b62\u4ee3\u7406 +proxy.show = \u663e\u793a\u4ee3\u7406 +exit = \u9000\u51fa + +panel.disassembled = P\u4ee3\u7801\u8d44\u6e90 +panel.decompiled = AS\u8d44\u6e90 + +search.info = \u641c\u7d22 "%text%" : +search.script = \u811a\u672c + +constants = \u5e38\u91cf +traits = Traits + +pleasewait = \u8bf7\u7a0d\u7b49 + +abc.detail.methodtrait = Method/Getter/Setter Trait +abc.detail.unsupported = - +abc.detail.slotconsttrait = Slot/Const Trait +abc.detail.traitname = \u540d\u79f0: + +abc.detail.body.params.maxstack = \u6700\u5927\u5806\u6808: +abc.detail.body.params.localregcount = \u672c\u5730\u5bc4\u5b58\u5668\u8ba1\u6570: +abc.detail.body.params.minscope = \u6700\u5c0f\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.maxscope = \u6700\u5927\u8303\u56f4\u6df1\u5ea6: +abc.detail.body.params.autofill = \u4fdd\u5b58\u65f6\u4ee3\u7801\u81ea\u52a8\u586b\u5145 (\u5168\u5c40\u8bbe\u7f6e) +abc.detail.body.params.autofill.experimental = ...\u5b9e\u9a8c\u7684 + +abc.detail.methodinfo.methodindex = \u65b9\u6cd5\u7d22\u5f15: +abc.detail.methodinfo.parameters = \u53c2\u6570: +abc.detail.methodinfo.returnvalue = \u8fd4\u56de\u503c\u7c7b\u578b: + +error.methodinfo.params = \u65b9\u6cd5\u4fe1\u606f\u7684\u53c2\u6570\u9519\u8bef +error.methodinfo.returnvalue = \u65b9\u6cd5\u4fe1\u606f\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u9519\u8bef + +abc.detail.methodinfo = \u65b9\u6cd5\u4fe1\u606f +abc.detail.body.code = \u65b9\u6cd5\u4e3b\u4f53\u4ee3\u7801 +abc.detail.body.params = \u65b9\u6cd5\u4e3b\u4f53\u53c2\u6570 + +abc.detail.slotconst.typevalue = \u7c7b\u578b\u548c\u503c: + +error.slotconst.typevalue = SlotConst\u7c7b\u578b\u503c\u9519\u8bef + +message.autofill.failed = \u65e0\u6cd5\u81ea\u52a8\u83b7\u5f97\u4e3b\u4f53\u53c2\u6570\u72b6\u6001\u4ee3\u7801\u3002\r\n\u8bf7\u5173\u95ed\u81ea\u52a8\u586b\u5145\u529f\u80fd\u540e\u518d\u8bd5\u4e00\u6b21. +info.selecttrait = \u8bf7\u9009\u62e9\u7c7b\uff0c\u7136\u540e\u70b9\u51fb\u8fdb\u884cActionScript\u6e90\u7684\u7f16\u8f91. + +button.viewgraph = \u6d4f\u89c8\u56fe\u5f62 +button.viewhex = \u6d4f\u89c8\u5341\u516d\u8fdb\u5236 + +action.edit.experimental = (\u5b9e\u9a8c\u7684) + +message.action.saved = \u4fdd\u5b58\u4ee3\u7801\u6210\u529f + +error.action.save = %error% \u5728 %line% \u884c + +message.confirm.remove = \u60a8\u786e\u5b9a\u8981\u5220\u9664 %item% \n \u4ee5\u53ca\u6240\u6709\u4f9d\u8d56\u5b83\u7684\u5bf9\u8c61\u5417\uff1f + +#after version 1.6.5u1: + +button.ok = \u786e\u5b9a +button.cancel = \u53d6\u6d88 + +font.name = \u5b57\u4f53\u540d\u79f0: +font.isbold = \u52a0\u7c97: +font.isitalic = \u659c\u4f53: +font.ascent = \u4e0a\u6807: +font.descent = \u4e0b\u6807: +font.leading = Leading: +font.characters = \u5b57\u7b26\u96c6: +font.characters.add = \u6dfb\u52a0\u5b57\u7b26\u96c6: +value.unknown = ? + +yes = \u662f +no = \u5426 + +errors.present = \u5728\u65e5\u5fd7\u4e2d\u8bb0\u5f55\u4e86\u9519\u8bef\uff0c\u70b9\u51fb\u67e5\u770b\u3002 +errors.none = \u5728\u65e5\u5fd7\u4e2d\u6ca1\u6709\u53d1\u73b0\u9519\u8bef\u3002 + +#after version 1.6.6: + +dialog.message.title = \u6d88\u606f +dialog.select.title = \u9009\u62e9\u4e00\u4e2a\u9009\u9879 + +button.yes = \u662f +button.no = \u5426 + +FileChooser.openButtonText = \u6253\u5f00 +FileChooser.openButtonToolTipText = \u6253\u5f00 +FileChooser.lookInLabelText = \u6d4f\u89c8: +FileChooser.acceptAllFileFilterText = \u6240\u6709\u6587\u4ef6 +FileChooser.filesOfTypeLabelText = \u6587\u4ef6\u7c7b\u578b: +FileChooser.fileNameLabelText = \u6587\u4ef6\u540d: +FileChooser.listViewButtonToolTipText = \u5217\u8868 +FileChooser.listViewButtonAccessibleName = \u5217\u8868 +FileChooser.detailsViewButtonToolTipText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonAccessibleName = \u8be6\u7ec6\u4fe1\u606f +FileChooser.upFolderToolTipText = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.upFolderAccessibleName = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.homeFolderToolTipText = \u4e3b\u76ee\u5f55 +FileChooser.homeFolderAccessibleName = \u4e3b\u76ee\u5f55 +FileChooser.fileNameHeaderText = \u540d\u79f0 +FileChooser.fileSizeHeaderText = \u5927\u5c0f +FileChooser.fileTypeHeaderText = \u7c7b\u578b +FileChooser.fileDateHeaderText = \u65e5\u671f +FileChooser.fileAttrHeaderText = \u5c5e\u6027 +FileChooser.openDialogTitleText = \u6253\u5f00 +FileChooser.directoryDescriptionText = \u76ee\u5f55 +FileChooser.directoryOpenButtonText = \u6253\u5f00 +FileChooser.directoryOpenButtonToolTipText = \u6253\u5f00\u9009\u5b9a\u7684\u76ee\u5f55 +FileChooser.fileDescriptionText = \u901a\u7528\u6587\u4ef6 +FileChooser.helpButtonText = \u5e2e\u52a9 +FileChooser.helpButtonToolTipText = \u6587\u4ef6\u9009\u62e9\u5668\u5e2e\u52a9 +FileChooser.newFolderAccessibleName = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.newFolderErrorText = \u5efa\u7acb\u65b0\u6587\u4ef6\u5939\u65f6\u51fa\u9519 +FileChooser.newFolderToolTipText = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.other.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.other.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939.{0} +FileChooser.win32.newFolder = \u65b0\u6587\u4ef6\u5939 +FileChooser.win32.newFolder.subsequent = \u65b0\u6587\u4ef6\u5939 ({0}) +FileChooser.saveButtonText = \u4fdd\u5b58 +FileChooser.saveButtonToolTipText = \u4fdd\u5b58\u9009\u5b9a\u6587\u4ef6 +FileChooser.saveDialogTitleText = \u4fdd\u5b58 +FileChooser.saveInLabelText = \u4fdd\u5b58\u5230: +FileChooser.updateButtonText = \u5237\u65b0 +FileChooser.updateButtonToolTipText = \u5237\u65b0\u76ee\u5f55\u5217\u8868 + +#after version 1.6.6u2: + +FileChooser.detailsViewActionLabel.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.detailsViewButtonToolTip.textAndMnemonic = \u8be6\u7ec6\u4fe1\u606f +FileChooser.fileAttrHeader.textAndMnemonic = \u5c5e\u6027 +FileChooser.fileDateHeader.textAndMnemonic = Modified +FileChooser.fileNameHeader.textAndMnemonic = \u540d\u79f0 +FileChooser.fileNameLabel.textAndMnemonic = \u6587\u4ef6\u540d: +FileChooser.fileSizeHeader.textAndMnemonic = \u5927\u5c0f +FileChooser.fileTypeHeader.textAndMnemonic = \u7c7b\u578b +FileChooser.filesOfTypeLabel.textAndMnemonic = \u6587\u4ef6\u7c7b\u578b: +FileChooser.folderNameLabel.textAndMnemonic = \u76ee\u5f55\u540d: +FileChooser.homeFolderToolTip.textAndMnemonic = \u4e3b\u76ee\u5f55 +FileChooser.listViewActionLabel.textAndMnemonic = \u5217\u8868 +FileChooser.listViewButtonToolTip.textAndMnemonic = \u5217\u8868 +FileChooser.lookInLabel.textAndMnemonic = \u6d4f\u89c8: +FileChooser.newFolderActionLabel.textAndMnemonic = \u65b0\u6587\u4ef6\u5939 +FileChooser.newFolderToolTip.textAndMnemonic = \u65b0\u5efa\u6587\u4ef6\u5939 +FileChooser.refreshActionLabel.textAndMnemonic = \u5237\u65b0 +FileChooser.saveInLabel.textAndMnemonic = \u4fdd\u5b58\u5230: +FileChooser.upFolderToolTip.textAndMnemonic = \u4e0a\u7ea7\u76ee\u5f55 +FileChooser.viewMenuButtonAccessibleName = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuButtonToolTipText = \u6d4f\u89c8\u83dc\u5355 +FileChooser.viewMenuLabel.textAndMnemonic = \u6d4f\u89c8 +FileChooser.newFolderActionLabelText = \u65b0\u6587\u4ef6\u5939 +FileChooser.listViewActionLabelText = \u5217\u8868 +FileChooser.detailsViewActionLabelText = \u8be6\u7ec6\u4fe1\u606f +FileChooser.refreshActionLabelText = \u5237\u65b0 +FileChooser.sortMenuLabelText = \u6392\u5217\u56fe\u6807 +FileChooser.viewMenuLabelText = \u6d4f\u89c8 +FileChooser.fileSizeKiloBytes = {0} KB +FileChooser.fileSizeMegaBytes = {0} MB +FileChooser.fileSizeGigaBytes = {0} GB +FileChooser.folderNameLabelText = \u76ee\u5f55\u540d: + +error.occured = \u53d1\u751f\u9519\u8bef : %error% +button.abort = \u7ec8\u6b62 +button.retry = \u91cd\u8bd5 +button.ignore = \u5ffd\u7565 + +font.source = \u6e90\u5b57\u4f53: + +#after version 1.6.7: + +menu.export = \u5bfc\u51fa +menu.general = \u901a\u7528 +menu.language = \u8bed\u8a00 + +startup.welcometo = \u6b22\u8fce\u4f7f\u7528 +startup.selectopen = \u4f7f\u7528\u4e0a\u65b9\u9762\u677f\u7684\u6253\u5f00\u56fe\u6807\u6216\u8005\u62d6\u52a8SWF\u6587\u4ef6\u5230\u5f53\u524d\u7a97\u53e3\u4ee5\u5f00\u59cb\u3002 + +error.font.nocharacter = \u9009\u62e9\u7684\u6e90\u5b57\u4f53\u4e0d\u5305\u542b\u5b57\u7b26 "%char%". + +warning.initializers = \u9759\u6001\u5b57\u6bb5\u548c\u5e38\u91cf\u901a\u5e38\u5728\u521d\u59cb\u5316\u65f6\u88ab\u521d\u59cb\u5316\uff0c\n\u5728\u6b64\u7f16\u8f91\u901a\u5e38\u662f\u4e0d\u591f\u7684\uff01 + +#after version 1.7.0u1: + +menu.tools.searchMemory = \u641c\u7d22\u5185\u5b58\u4e2d\u7684SWF +menu.file.reload = \u91cd\u8f7d +message.confirm.reload = \u8be5\u52a8\u4f5c\u5c06\u4f1a\u4e22\u5931\u6240\u6709\u672a\u4fdd\u5b58\u7684\u6539\u52a8\uff0c\u5e76\u91cd\u65b0\u52a0\u8f7d\u5f53\u524dSWF\u6587\u4ef6\u3002\n\u662f\u5426\u7ee7\u7eed\uff1f + +dialog.selectbkcolor.title = \u8bf7\u9009\u62e9SWF\u663e\u793a\u7684\u80cc\u666f\u8272 +button.selectbkcolor.hint = \u9009\u62e9\u80cc\u666f\u8272 + +ColorChooser.okText = \u786e\u5b9a +ColorChooser.cancelText = \u53d6\u6d88 +ColorChooser.resetText = \u91cd\u7f6e +ColorChooser.previewText = \u9884\u89c8 +ColorChooser.swatchesNameText = \u8c03\u8272\u677f +ColorChooser.swatchesRecentText = \u6700\u8fd1: +ColorChooser.sampleText = \u793a\u4f8b\u6587\u5b57 \u793a\u4f8b\u6587\u672c + +#after version 1.7.1: + +preview.play = \u64ad\u653e +preview.pause = \u6682\u505c +preview.stop = \u505c\u6b62 + +message.confirm.removemultiple = \u60a8\u786e\u5b9a\u8981\u79fb\u9664 %count% \u4e2a\u9879\u76ee\uff0c\n\u4ee5\u53ca\u5176\u6240\u6709\u7684\u4f9d\u8d56\u5bf9\u8c61\u5417\uff1f + +menu.tools.searchCache = \u641c\u7d22\u6d4f\u89c8\u5668\u7f13\u5b58 + +#after version 1.7.2u2 + +error.trait.exists = Trait \u6240\u7528\u7684\u540d\u79f0 \u201c%name%\u201d\u5df2\u5b58\u5728\u3002 +button.addtrait = \u6dfb\u52a0 Trait +button.font.embed = \u5d4c\u5165... +button.yes.all = \u5168\u662f +button.no.all = \u5168\u5426 +message.font.add.exists = \u5b57\u7b26 %char% \u5df2\u5b58\u5728\u3002\n\u60a8\u662f\u5426\u8981\u66ff\u6362\uff1f + +filter.gfx = ScaleForm GFx \u6587\u4ef6 (*.gfx) +filter.supported = \u6240\u6709\u652f\u6301\u6587\u4ef6\u7c7b\u578b +work.canceled = \u5df2\u53d6\u6d88 +work.restoringControlFlow = \u6062\u590d\u63a7\u5236\u5668\u6d41\u7a0b +menu.advancedsettings.advancedsettings = \u9ad8\u7ea7\u8bbe\u7f6e +menu.recentFiles = \u6700\u8fd1\u6587\u4ef6 + +#after version 1.7.4 +work.restoringControlFlow.complete = \u63a7\u5236\u5668\u6d41\u7a0b\u5df2\u6062\u590d +message.confirm.recentFileNotFound = \u627e\u4e0d\u5230\u6587\u4ef6\u3002\u662f\u5426\u4ece\u6700\u8fd1\u6587\u4ef6\u5217\u8868\u79fb\u9664\uff1f +contextmenu.closeSwf = \u5173\u95ed SWF +menu.settings.autoRenameIdentifiers = \u81ea\u52a8\u91cd\u547d\u540d\u6807\u8bc6 +menu.file.saveasexe = \u53e6\u5b58\u4e3aexe... +filter.exe = \u53ef\u6267\u884c\u6587\u4ef6(*.exe) + +#after version 1.8.0 +font.updateTexts = \u66f4\u65b0\u6587\u672c + +#after version 1.8.0u1 +menu.file.close = \u5173\u95ed +menu.file.closeAll = \u5168\u90e8\u5173\u95ed +menu.tools.otherTools = \u5176\u4ed6 +menu.tools.otherTools.clearRecentFiles = \u6e05\u9664\u6700\u8fd1\u6587\u4ef6 +fontName.name = \u5b57\u4f53\u663e\u793a\u540d\u79f0: +fontName.copyright = \u5b57\u4f53\u7248\u6743: +button.preview = \u9884\u89c8 +button.reset = \u91cd\u7f6e +errors.info = \u6709\u4fe1\u606f\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 +errors.warning = \u6709\u8b66\u544a\u65e5\u5fd7\u3002\u70b9\u51fb\u67e5\u770b\u3002 + +decompilationError = \u53cd\u7f16\u8bd1\u9519\u8bef + +disassemblingProgress.toString = \u5230\u5b57\u7b26\u4e32 +disassemblingProgress.reading = \u8bfb\u53d6\u4e2d +disassemblingProgress.deobfuscating = \u6df7\u6dc6 + +contextmenu.moveTag = \u79fb\u52a8\u6807\u7b7e\u5230 + +filter.swc = SWC\u7ec4\u4ef6\u6587\u4ef6 (*.swc) +filter.zip = ZIP\u538b\u7f29\u6587\u4ef6 (*.zip) +filter.binary = \u4e8c\u8fdb\u5236\u67e5\u627e - \u6240\u6709\u6587\u4ef6 (*.*) + +open.error = \u9519\u8bef +open.error.fileNotFound = \u672a\u627e\u5230\u6587\u4ef6 +open.error.cannotOpen = \u65e0\u6cd5\u6253\u5f00\u6587\u4ef6 + +node.others = \u5176\u4ed6 + +#after version 1.8.1 +menu.tools.search = \u6587\u672c\u67e5\u627e + +#after version 1.8.1u1 +menu.tools.timeline = \u65f6\u95f4\u8f74 + +dialog.selectcolor.title = \u9009\u62e9\u989c\u8272 +button.selectcolor.hint = \u70b9\u51fb\u9009\u62e9\u989c\u8272 + +#default item name, will be used in following sentences +generictag.array.item = \u9879\u76ee +generictag.array.insertbeginning = \u5728\u4e00\u5f00\u59cb\u63d2\u5165 %item% +generictag.array.insertbefore = \u63d2\u5165 %item% \u4e4b\u524d +generictag.array.remove = \u79fb\u9664 %item% +generictag.array.insertafter = \u63d2\u5165 %item% \u4e4b\u540e +generictag.array.insertend = \u5728\u7ed3\u675f\u63d2\u5165 %item% + +#after version 2.0.0 +contextmenu.expandAll = \u5168\u90e8\u5c55\u5f00 + +filter.sounds = \u652f\u6301\u7684\u58f0\u97f3\u683c\u5f0f (*.wav, *.mp3) +filter.sounds.wav = Wave\u6587\u4ef6\u683c\u5f0f (*.wav) +filter.sounds.mp3 = MP3\u538b\u7f29\u683c\u5f0f (*.mp3) + +error.sound.invalid = \u65e0\u6548\u6587\u4ef6\u3002 + +button.prev = \u4e0a\u4e00\u9875 +button.next = \u4e0b\u4e00\u9875 + +#after version 2.1.0 +message.action.playerglobal.title = \u9700\u8981PlayerGlobal\u652f\u6301\u5e93 +message.action.playerglobal.needed = \u82e5\u8981\u76f4\u63a5\u7f16\u8f91AS3\u811a\u672c, \u9700\u8981\u4eceAdobe\u4e3b\u9875\u4e0b\u8f7d\u4e00\u4e2a"PlayerGlobal.swc"\u7684\u652f\u6301\u5e93\u3002\r\n%adobehomepage%\r\n\u70b9\u51fb\u201c\u786e\u5b9a\u201d\u8f6c\u5230\u4e0b\u8f7d\u9875\u9762\u3002 +message.action.playerglobal.place = \u4e0b\u8f7d\u652f\u6301\u5e93PlayerGlobal(.swc),\u5e76\u653e\u5165\u8be5\u6587\u4ef6\u5939\u3002\r\n%libpath%\r\n \u70b9\u51fb\u201c\u786e\u5b9a\u201d\u7ee7\u7eed\u3002 + +message.confirm.experimental.function = \u6b64\u529f\u80fd\u4e3a\u5b9e\u9a8c\u6027\uff01\u8fd9\u610f\u5473\u7740\u7ed3\u679c\u5e76\u4e0d\u53ef\u9760\u5e76\u4e14\u4fdd\u5b58\u4e4b\u540e\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\u3002 +message.confirm.donotshowagain = \u4e0d\u518d\u663e\u793a + +menu.import = \u5bfc\u5165 +menu.file.import.text = \u5bfc\u5165\u6587\u672c +import.select.directory = \u9009\u62e9\u5bfc\u5165\u76ee\u5f55 +error.text.import = \u5bfc\u5165\u6587\u672c\u9519\u8bef\u3002\u7ee7\u7eed\uff1f + +#after version 2.1.1 +contextmenu.removeWithDependencies = \u79fb\u9664\u4f9d\u8d56 + +abc.action.find-usages = \u67e5\u627e\u5f15\u7528 +abc.action.find-declaration = \u67e5\u627e\u58f0\u660e + +contextmenu.rawEdit = RAW\u7f16\u8f91 +contextmenu.jumpToCharacter = \u8f6c\u5230\u5b57\u7b26 + +menu.settings.dumpView = \u67e5\u770b\u8f6c\u50a8 + +menu.view = \u67e5\u770b +menu.file.view.resources = \u8d44\u6e90 +menu.file.view.hex = \u4e8c\u8fdb\u5236 + +node.header = \u6587\u4ef6\u5934 + +header.signature = \u6587\u4ef6\u6807\u8bc6: +header.compression = \u538b\u7f29\u6a21\u5f0f: +header.compression.lzma = LZMA +header.compression.zlib = ZLIB +header.compression.none = \u65e0\u538b\u7f29 +header.version = SWF\u7248\u672c: +header.gfx = GFX: +header.filesize = \u6587\u4ef6\u5927\u5c0f +header.framerate = \u5e27\u7387: +header.framecount = \u5e27\u6570: +header.displayrect = \u663e\u793a\u533a\u57df: +header.displayrect.value.twips = %xmin%,%ymin% => %xmax%,%ymax% twips +header.displayrect.value.pixels = %xmin%,%ymin% => %xmax%,%ymax% pixels + +#after version 2.1.2 +contextmenu.saveToFile = \u53e6\u5b58\u4e3a\u6587\u4ef6 +contextmenu.parseActions = \u89e3\u6790\u52a8\u4f5c +contextmenu.parseABC = \u89e3\u6790ABC +contextmenu.parseInstructions = \u89e3\u6790AVM2\u6307\u4ee4 + +#after version 2.1.3 +menu.deobfuscation = \u53cd\u6df7\u6dc6 +menu.file.deobfuscation.old = \u65e7\u6837\u5f0f +menu.file.deobfuscation.new = \u65b0\u6837\u5f0f + +#after version 2.1.4 +contextmenu.openswfinside = \u6253\u5f00 SWF \u5185\u90e8 +binarydata.swfInside = \u5b83\u770b\u8d77\u6765\u50cf\u6709\u8fd9\u4e2a\u4e8c\u8fdb\u5236\u6570\u636e\u6807\u7b7e\u5185\u7684 SWF\u3002\u70b9\u51fb\u6b64\u5904\u5c06\u5176\u52a0\u8f7d\u4e3a\u5b50\u6811\u3002 + +#after version 3.0.0 +button.zoomin.hint = \u653e\u5927 +button.zoomout.hint = \u7f29\u5c0f +button.zoomfit.hint = \u7f29\u653e\u5230\u9002\u5408 +button.zoomnone.hint = \u7f29\u653e\u5230 1:1 +button.snapshot.hint = \u6355\u83b7\u5feb\u7167\u5230\u526a\u8d34\u677f + +editorTruncateWarning = \u5728\u8c03\u8bd5\u6a21\u5f0f\u4e0b\u6587\u672c\u88ab\u622a\u65ad\u5728 %chars% \u4f4d\u7f6e\u3002 + +#Font name which is presented in the SWF Font tag +font.name.intag = \u5728\u6807\u7b7e\u5b57\u4f53\u540d\u79f0: + +menu.debugger = \u8c03\u8bd5\u5668 +menu.debugger.switch = \u8c03\u8bd5\u5668 +menu.debugger.replacetrace = \u66ff\u6362\u8ddf\u8e2a\u8c03\u7528 +menu.debugger.showlog = \u663e\u793a\u65e5\u5fd7 + +message.debugger = \u8be5 SWF \u8c03\u8bd5\u5668\u53ea\u80fd\u7528\u4e8e\u6253\u5370\u8bb0\u5f55\u6d88\u606f\u7684\u7a97\u53e3\uff0c\u6d4f\u89c8\u5668\u63a7\u5236\u53f0\u6216\u8b66\u62a5\u3002\r\n\u5b83\u4e0d\u662f\u8bbe\u8ba1\u7528\u4e8e\u529f\u80fd\uff0c\u5982\u6b65\u5165\u4ee3\u7801\uff0c\u65ad\u70b9\u7b49\u3002 + +contextmenu.addTag = \u6dfb\u52a0\u6807\u7b7e + +deobfuscation.comment.tryenable = \u63d0\u793a\uff1a\u5728\u8bbe\u7f6e\u60a8\u53ef\u4ee5\u5c1d\u8bd5\u542f\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d +deobfuscation.comment.failed = \u53cd\u6df7\u6dc6\u88ab\u6fc0\u6d3b\uff0c\u4f46\u662f\u53cd\u7f16\u8bd1\u8fd8\u662f\u5931\u8d25\u4e86\u3002\u5982\u679c\u6587\u4ef6\u4e0d\u6df7\u4e71\uff0c\u7981\u7528\u201c\u81ea\u52a8\u53cd\u6df7\u6dc6\u201d\u6548\u679c\u4f1a\u66f4\u597d\u3002 + +#after version 4.0.2 +preview.nextframe = \u4e0b\u4e00\u5e27 +preview.prevframe = \u4e0a\u4e00\u5e27 +preview.gotoframe = \u8f6c\u5230\u5e27... + +preview.gotoframe.dialog.title = \u8f6c\u5230\u5e27 +preview.gotoframe.dialog.message = \u8f93\u5165\u5e27\u53f7 (%min% - %max%) +preview.gotoframe.dialog.frame.error = \u65e0\u6548\u7684\u5e27\u53f7\u3002\u5b83\u5fc5\u987b\u662f\u6570\u5b57 %min% \u548c %max%\u4e4b\u95f4\u3002 + +error.text.invalid.continue = \u65e0\u6548\u6587\u672c: %text% \u5728\u884c %line%\u3002\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f + +#after version 4.0.5 +contextmenu.copyTag = \u590d\u5236\u6807\u7b7e\u5230 +fit = \u9002\u5408 +button.setAdvanceValues = \u8bbe\u7f6e advanc \u503c + +menu.tools.replace = \u6587\u672c\u66ff\u6362 + +message.confirm.close = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed{swfName}\u5417\uff1f +message.confirm.closeAll = \u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\u3002\u4f60\u771f\u7684\u8981\u5173\u95ed\u6240\u6709\u7684SWF\u5417\uff1f + +contextmenu.exportJavaSource = \u5bfc\u51fa Java \u6e90\u4ee3\u7801 +contextmenu.exportSwfXml = \u5bfc\u51fa SWF \u4e3a XML +contextmenu.importSwfXml = \u5bfc\u5165 SWF XML + +filter.xml = XML + +#after version 4.1.0 +contextmenu.undo = \u64a4\u6d88 + +text.align.left = \u5de6\u5bf9\u9f50 +text.align.right = \u53f3\u5bf9\u9f50 +text.align.center = \u5c45\u4e2d\u5bf9\u9f50 +text.align.justify = \u4e24\u7aef\u5bf9\u9f50 + +text.undo = \u64a4\u6d88\u66f4\u6539 + +menu.file.import.xml = \u5bfc\u5165 SWF XML +menu.file.export.xml = \u5bfc\u51fa SWF XML + +#after version 4.1.1 +text.align.translatex.decrease = \u51cf\u5c11 TranslateX +text.align.translatex.increase = \u589e\u52a0 TranslateX +selectPreviousTag = \u9009\u62e9\u4e0a\u4e00\u4e2a\u6807\u7b7e +selectNextTag = \u9009\u62e9\u4e0b\u4e00\u4e2a\u6807\u7b7e +button.ignoreAll = \u5ffd\u7565\u5168\u90e8 +menu.file.import.symbolClass = \u5bfc\u5165\u7b26\u53f7-Class +text.toggleCase = \u5207\u6362\u5916\u58f3 + +#after version 5.0.2 +preview.loop = \u5faa\u73af +menu.file.import.script = \u5bfc\u5165\u811a\u672c +contextmenu.copyTagWithDependencies = \u4ee5\u4f9d\u8d56\u5173\u7cfb\u5230\u590d\u5236\u6807\u7b7e +button.replaceWithTag = \u4f7f\u7528\u5176\u5b83\u5b57\u7b26\u66ff\u6362\u6807\u7b7e +button.resolveConstants = \u89e3\u6790\u5e38\u6570 + +#after version 5.1.0 +button.viewConstants = \u67e5\u770b\u5e38\u91cf +work.exported = \u5bfc\u51fa +button.replaceAlphaChannel = \u66ff\u6362 alpha \u901a\u9053... + +tagInfo.header.name = \u540d\u79f0 +tagInfo.header.value = \u503c +tagInfo.tagType = \u6807\u7b7e\u7c7b\u578b +tagInfo.characterId = \u5b57\u7b26 ID +tagInfo.offset = \u504f\u79fb +tagInfo.length = \u957f\u5ea6 +tagInfo.bounds = \u8fb9\u754c +tagInfo.width = \u5bbd\u5ea6 +tagInfo.height = \u9ad8\u5ea6 +tagInfo.neededCharacters = \u9700\u8981\u7684\u5b57\u7b26 + +button.viewhexpcode = \u67e5\u770b\u5341\u516d\u8fdb\u5236\u5e76\u6307\u793a +taginfo.header = \u57fa\u672c\u6807\u7b7e\u4fe1\u606f + +tagInfo.dependentCharacters = \u76f8\u5173\u5b57\u7b26 + +#after version 5.3.0 +header.uncompressed = \u65e0\u538b\u7f29 +header.warning.unsupportedGfxCompression = GFX \u4ec5\u652f\u6301\u975e\u538b\u7f29\u6216\u538b\u7f29\u7684 Zlib \u5185\u5bb9\u3002 +header.warning.minimumZlibVersion = ZLIB \u538b\u7f29\u9700\u8981SWF\u7b2c6\u7248\u6216\u66f4\u9ad8\u7248\u672c\u3002 +header.warning.minimumLzmaVersion = LZMA \u538b\u7f29\u9700\u8981 SWF \u7248\u672c 13 \u6216\u66f4\u9ad8\u7248\u672c\u3002 + +tagInfo.codecName = \u7f16\u89e3\u7801\u5668\u540d\u79f0 +tagInfo.exportFormat = \u5bfc\u51fa\u683c\u5f0f +tagInfo.samplingRate = \u91c7\u6837\u7387 +tagInfo.stereo = \u7acb\u4f53\u58f0 +tagInfo.sampleCount = \u91c7\u6837\u6570\u91cf + +filter.dmg = Mac \u53ef\u6267\u884c\u6587\u4ef6 (*.dmg) +filter.linuxExe = Linux \u53ef\u6267\u884c\u6587\u4ef6 + +import.script.result = %count% \u811a\u672c\u5df2\u5bfc\u5165\u3002 +import.script.as12warning = \u4ec5 1/2 \u7684\u811a\u672c\u53ef\u4ee5\u5bfc\u5165\u3002 + +error.constantPoolTooBig = \u5e38\u91cf\u6c60\u592a\u5927\u3002 \u7d22\u5f15=%index%, \u5927\u5c0f=%size% +error.image.alpha.invalid = \u65e0\u6548\u7684 Alpha \u901a\u9053\u6570\u636e\u3002 + +#after version 6.0.2 +contextmenu.saveUncompressedToFile = \u4fdd\u5b58\u5230\u672a\u538b\u7f29\u6587\u4ef6 +menu.settings.autoOpenLoadedSWFs = \u6253\u5f00\u5df2\u8f7d\u5165 SWF \u6587\u4ef6\u65f6\u64ad\u653e + +#after version 6.1.1 +menu.file.start = \u5f00\u59cb +menu.file.start.run = \u8fd0\u884c +menu.file.start.stop = \u505c\u6b62 +menu.file.start.debug = \u8c03\u8bd5 +menu.debugging = \u8c03\u8bd5\u4e2d +menu.debugging.debug = \u8c03\u8bd5 +menu.debugging.debug.stop = \u505c\u6b62 +menu.debugging.debug.pause = \u6682\u505c +menu.debugging.debug.stepOver = \u5355\u6b65\u6267\u884c +menu.debugging.debug.stepInto = \u5355\u6b65\u6b65\u5165 +menu.debugging.debug.stepOut = \u5355\u6b65\u6b65\u51fa +menu.debugging.debug.continue = \u7ee7\u7eed +menu.debugging.debug.stack = \u5806\u6808... +menu.debugging.debug.watch = \u65b0\u5efa\u67e5\u770b... + +message.playerpath.notset = Flash Player \u653e\u6620\u673a\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.debug.notset = Flash Player \u653e\u6620\u673a\u8c03\u8bd5\u7684\u5185\u5bb9\u6ca1\u6709\u627e\u5230\u3002\u8bf7\u5728\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u914d\u7f6e\u5176\u8def\u5f84\u3002 +message.playerpath.lib.notset = PlayerGlobal (.SWC) \u672a\u627e\u5230\u3002\u8bf7\u5728\u5176\u8def\u5f84\u914d\u7f6e\u9ad8\u7ea7\u8bbe\u7f6e/\u8def\u5f84\u3002 + +debugpanel.header = \u8c03\u8bd5\u4e2d + +variables.header.registers = \u5bc4\u5b58\u5668 +variables.header.locals = \u672c\u673a +variables.header.arguments = \u53c2\u6570 +variables.header.scopeChain = \u4f5c\u7528\u57df\u94fe +variables.column.name = \u540d\u79f0 +variables.column.type = \u7c7b\u578b +variables.column.value = \u503c + +callStack.header = \u8c03\u7528\u5806\u6808 +callStack.header.file = \u6587\u4ef6 +callStack.header.line = \u884c + +stack.header = \u5806\u53e0 +stack.header.item = \u9879\u76ee + +constantpool.header = \u5e38\u91cf\u6c60 +constantpool.header.id = Id +constantpool.header.value = \u503c + +work.running = \u8fd0\u884c\u884c +work.debugging = \u8c03\u8bd5\u4e2d +work.debugging.instrumenting = SWF \u51c6\u5907\u8c03\u8bd5 +work.breakat = \u65ad\u70b9\u5728\u0020 +work.halted = \u8c03\u8bd5\u5f00\u59cb\uff0c\u6267\u884c\u505c\u6b62\u3002\u6dfb\u52a0\u65ad\u70b9\uff0c\u7136\u540e\u70b9\u51fb\u7ee7\u7eed\uff08F5\uff09\u6062\u590d\u8fd0\u884c\u3002 + +debuglog.header = \u65e5\u5fd7 +debuglog.button.clear = \u6e05\u9664 + +#after 7.0.1 +work.debugging.wait = \u7b49\u5f85 Flash \u8c03\u8bd5\u653e\u6620\u673a\u8fde\u63a5 + +error.debug.listen = \u65e0\u6cd5\u76d1\u542c\u7aef\u53e3 %port%\u3002\u6709\u53ef\u80fd\u662f\u53e6\u4e00\u4e2a Flash \u8c03\u8bd5\u5668\u8fd0\u884c\u3002 + +debug.break.reason.unknown = (\u672a\u77e5) +debug.break.reason.breakpoint = (\u65ad\u70b9) +debug.break.reason.watch = (\u89c2\u770b) +debug.break.reason.fault = (\u6545\u969c) +debug.break.reason.stopRequest = (\u505c\u6b62\u8bf7\u6c42) +debug.break.reason.step = (\u6b65\u9aa4) +debug.break.reason.halt = (\u505c\u6b62) +debug.break.reason.scriptLoaded = (\u52a0\u8f7d\u811a\u672c) + +menu.file.start.debugpcode = \u8c03\u8bd5 P-code + +#after 7.1.2 +button.replaceNoFill = \u66ff\u6362 - \u66f4\u65b0\u8303\u56f4... +message.warning.svgImportExperimental = \u5e76\u975e\u6240\u6709\u7684\u529f\u80fd\u652f\u6301 SVG\u3002\u8bf7\u5bfc\u5165\u540e\u68c0\u67e5\u65e5\u5fd7\u3002 + +message.imported.swf = \u8be5 SWF \u6587\u4ef6\u4f7f\u7528\u7684\u90d1\u6e90\u662f\u4ece\u5bfc\u5165 SWF \u6587\u4ef6:\n%url%\n\u4f60\u60f3\u4ece\u8be5URL\u52a0\u8f7d\u5417\uff1f +message.imported.swf.manually = \u65e0\u6cd5\u52a0\u8f7d\u5bfc\u5165\u7684 SWF\n%url%\n\u8be5\u6587\u4ef6\u6216 URL \u4e0d\u5b58\u5728\u3002\n\u4f60\u8981\u9009\u62e9\u672c\u5730\u6587\u4ef6\u5417\uff1f + +message.warning.hexViewNotUpToDate = \u5341\u516d\u8fdb\u5236\u67e5\u770b\u6ca1\u6709\u53ca\u65f6\u66f4\u65b0\u3002\u8bf7\u4fdd\u5b58\u5e76\u91cd\u65b0\u52a0\u8f7d\u66f4\u65b0\u5341\u516d\u8fdb\u5236\u67e5\u770b\u8be5\u6587\u4ef6\u3002 +message.font.replace.updateTexts = \u67d0\u4e9b\u5b57\u7b26\u88ab\u66ff\u6362\u3002\u662f\u5426\u8981\u66f4\u65b0\u73b0\u6709\u7684\u6587\u672c\uff1f + +menu.settings.simplifyExpressions = \u7b80\u5316\u8868\u8fbe\u5f0f + +#after 8.0.1 +menu.recentFiles.empty = \u6700\u8fd1\u7684\u6587\u4ef6\u5217\u8868\u4e3a\u7a7a +message.warning.outOfMemory32BitJre = \u53d1\u751f\u5185\u5b58\u9519\u8bef\u3002\u60a8\u5728 64 \u4f4d\u7cfb\u7edf\u4e0a\u8fd0\u884c 32 \u4f4d\u7684 Java\u3002\u8bf7\u4f7f\u7528 64 \u4f4d\u7684 Java\u3002 + +menu.file.reloadAll = \u91cd\u65b0\u52a0\u8f7d\u6240\u6709 +message.confirm.reloadAll = \u6b64\u64cd\u4f5c\u4f1a\u53d6\u6d88\u6240\u6709\u7684 SWF \u6587\u4ef6\u6240\u6709\u672a\u4fdd\u5b58\u7684\u66f4\u6539\uff0c\u5e76\u518d\u6b21\u91cd\u65b0\u52a0\u8f7d\u6574\u4e2a\u5e94\u7528\u7a0b\u5e8f\u3002\n\u4f60\u60f3\u7ee7\u7eed\u5417\uff1f +export.script.singleFilePallelModeWarning = \u5355\u4e2a\u6587\u4ef6\u7684\u811a\u672c\u8f93\u51fa\u6ca1\u6709\u4f7f\u7528\u542f\u7528\u5e76\u884c\u52a0\u901f\u652f\u6301 + +button.showOriginalBytesInPcodeHex = \u663e\u793a\u539f\u59cb\u5b57\u8282 +button.remove = \u6e05\u9664 +button.showFileOffsetInPcodeHex = \u663e\u793a\u6587\u4ef6\u504f\u79fb + +generic.editor.amf3.title = AMF3 \u7f16\u8f91\u5668 +generic.editor.amf3.help = AMF3 \u503c\u8bed\u6cd5:\n\ + ------------------\n\ + \u6807\u91cf\u7c7b\u578b:\n\ + %scalar_samples%\ + \u5176\u4ed6\u7c7b\u578b:\n\ + %nonscalar_samples%\ + \n\ + \u6ce8\u610f:\n\ + \ * Nonscalar datatypes can be referenced by previously declared "id" attributes with # syntax:\n\ + %reference_sample%\n\ + \ * Keys in Dictionary entries can be any type\n +contextmenu.showInResources = \u5728\u8d44\u6e90\u663e\u793a + diff --git a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java index 1db811dfd..8de3c6ba2 100644 --- a/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/player/FlashPlayerPanel.java @@ -1,438 +1,438 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.player; - -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; -import com.jpexs.decompiler.flash.gui.Main; -import com.jpexs.helpers.CancellableWorker; -import com.jpexs.javactivex.ActiveX; -import com.jpexs.javactivex.ActiveXEvent; -import com.jpexs.javactivex.ActiveXException; -import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; -import com.sun.jna.Platform; -import java.awt.AWTException; -import java.awt.Color; -import java.awt.Component; -import java.awt.Panel; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Robot; -import java.awt.image.BufferedImage; -import java.io.Closeable; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * - * @author JPEXS - */ -public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { - - private static final Logger logger = Logger.getLogger(FlashPlayerPanel.class.getName()); - - private final int setMovieDelay = Configuration.setMovieDelay.get(); - - private final List listeners = new ArrayList<>(); - - private final ShockwaveFlash flash; - - private final Timer timer; - - private boolean stopped = true; - - private boolean closed = false; - - private float frameRate; - - @Override - public boolean loopAvailable() { - return false; - } - - @Override - public boolean screenAvailable() { - return true; - } - - @Override - public boolean zoomAvailable() { - return true; - } - - @Override - public double getZoomToFit() { - //TODO - return 1; - } - - @Override - public Zoom getZoom() { - return null; - } - - private double zoom = 1.0; - - @Override - public synchronized void zoom(Zoom zoom) { - double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; - int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); - if (zoomint == 0) { - zoomint = 1; - } - if (zoomint > 32767) { - zoomint = 32767; - } - if (zoomint == 100) { - zoomint = 0; - } - - flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values - flash.Zoom(zoomint); - } - - public synchronized String getVariable(String name) throws IOException { - return flash.GetVariable(name); - } - - public synchronized void setVariable(String name, String value) throws IOException { - flash.SetVariable(name, value); - } - - public synchronized String call(String callString) throws IOException { - - return flash.CallFunction(callString); - } - - @Override - public synchronized int getCurrentFrame() { - if (flash == null) { - return 0; - } - try { - return flash.getFrameNum(); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized int getTotalFrames() { - if (flash == null) { - return 0; - } - try { - if (flash.getReadyState() == 4) { - return flash.getTotalFrames(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - return 0; - } - - @Override - public synchronized void setBackground(Color color) { - try { - flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - public FlashPlayerPanel(Component frame) { - if (!Platform.isWindows()) { - throw new FlashUnsupportedException(); - } - - try { - Callable callable = new Callable() { - @Override - public ShockwaveFlash call() throws InterruptedException { - return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); - } - }; - - // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor - flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); - } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { - logger.log(Level.WARNING, "Cannot initialize flash panel", ex); - throw new FlashUnsupportedException(); - } - - flash.setAllowScriptAccess("always"); - try { - flash.setAllowNetworking("all"); - } catch (ActiveXException ex) { - // ignore - } - - flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { - fireMediaDisplayStateChanged(); - }); - - flash.addFlashCallListener((ActiveXEvent axe) -> { - String req = (String) axe.args.get("request"); - Matcher m = Pattern.compile("(.*)").matcher(req); - if (m.matches()) { - String funname = m.group(1); - String msg = m.group(2); - if (funname.equals("alert") || funname.equals("console.log")) { - if (Main.debugDialog != null) { - Main.debugDialog.log(funname + ":" + msg); - } - } - } - }); - - timer = new Timer(); - timer.schedule(new TimerTask() { - private boolean isPlaying = false; - - private int currentFrame = 0; - - @Override - public void run() { - if (closed) { - return; - } - try { - ShockwaveFlash flash1 = flash; - - boolean changed = false; - - if (flash1.getReadyState() >= 3) { - boolean isPlaying = flash1.IsPlaying(); - if (this.isPlaying != isPlaying) { - this.isPlaying = isPlaying; - } - - int currentFrame = flash1.CurrentFrame(); - if (this.currentFrame != currentFrame) { - this.currentFrame = currentFrame; - changed = true; - } - } else { - this.isPlaying = false; - } - - if (changed) { - fireMediaDisplayStateChanged(); - } - } catch (Exception ex) { - // ignore - cancel(); - } - } - }, 100, 100); - } - - public synchronized void stopSWF() { - displaySWF("-", null, 1); - stopped = true; - fireMediaDisplayStateChanged(); - } - - public synchronized boolean isStopped() { - return stopped; - } - - @Override - public BufferedImage printScreen() { - Point screenloc = getLocationOnScreen(); - try { - return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); - } catch (AWTException ex) { - return null; - } - } - - private String movieToPlay = null; - - private Thread playQueue; - - private final Object queueLock = new Object(); - - public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { - - // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors - if (playQueue == null) { - playQueue = new Thread() { - long lastTime; - - @Override - public void run() { - while (true) { - boolean empty; - synchronized (queueLock) { - empty = movieToPlay == null; - if (empty) { - try { - queueLock.wait(); - } catch (InterruptedException ex) { - break; - } - } - } - if (!empty) { - flash.setMovie(movieToPlay); - synchronized (queueLock) { - movieToPlay = null; - } - try { - Thread.sleep(setMovieDelay); - } catch (InterruptedException ex) { - break; - } - } - } - } - }; - playQueue.start(); - } - zoom = 1.0; - this.frameRate = frameRate; - if (bgColor != null) { - setBackground(bgColor); - } - synchronized (queueLock) { - movieToPlay = flashName; - queueLock.notify(); - } - - //play - stopped = false; - fireMediaDisplayStateChanged(); - } - - @Override - public synchronized void close() throws IOException { - timer.cancel(); - closed = true; - } - - @Override - public void pause() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void stop() { - try { - if (flash.getReadyState() >= 3) { - flash.Stop(); - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void rewind() { - try { - if (flash.getReadyState() >= 3) { - flash.Rewind(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public void play() { - try { - if (flash.getReadyState() >= 3) { - flash.Play(); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public boolean isPlaying() { - try { - if (flash.getReadyState() >= 3) { - return flash.IsPlaying(); - } else { - return false; - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - return false; - } - } - - @Override - public void setLoop(boolean loop - ) { - } - - @Override - public void gotoFrame(int frame - ) { - if (frame < 0) { - return; - } - if (frame >= getTotalFrames()) { - return; - } - try { - if (flash.getReadyState() >= 3) { - flash.GotoFrame(frame); - } - } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" - } - } - - @Override - public float getFrameRate() { - return frameRate; - } - - @Override - public boolean isLoaded() { - return !isStopped(); - } - - public void fireMediaDisplayStateChanged() { - for (MediaDisplayListener l : listeners) { - l.mediaDisplayStateChanged(this); - } - } - - @Override - public void addEventListener(MediaDisplayListener listener) { - listeners.add(listener); - } - - @Override - public void removeEventListener(MediaDisplayListener listener) { - listeners.remove(listener); - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.player; + +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.gui.FlashUnsupportedException; +import com.jpexs.decompiler.flash.gui.Main; +import com.jpexs.helpers.CancellableWorker; +import com.jpexs.javactivex.ActiveX; +import com.jpexs.javactivex.ActiveXEvent; +import com.jpexs.javactivex.ActiveXException; +import com.jpexs.javactivex.example.controls.flash.ShockwaveFlash; +import com.sun.jna.Platform; +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Component; +import java.awt.Panel; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.image.BufferedImage; +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @author JPEXS + */ +public final class FlashPlayerPanel extends Panel implements Closeable, MediaDisplay { + + private static final Logger logger = Logger.getLogger(FlashPlayerPanel.class.getName()); + + private final int setMovieDelay = Configuration.setMovieDelay.get(); + + private final List listeners = new ArrayList<>(); + + private final ShockwaveFlash flash; + + private final Timer timer; + + private boolean stopped = true; + + private boolean closed = false; + + private float frameRate; + + @Override + public boolean loopAvailable() { + return false; + } + + @Override + public boolean screenAvailable() { + return true; + } + + @Override + public boolean zoomAvailable() { + return true; + } + + @Override + public double getZoomToFit() { + //TODO + return 1; + } + + @Override + public Zoom getZoom() { + return null; + } + + private double zoom = 1.0; + + @Override + public synchronized void zoom(Zoom zoom) { + double zoomDouble = zoom.fit ? getZoomToFit() : zoom.value; + int zoomint = (int) Math.round(100 / (zoomDouble / this.zoom)); + if (zoomint == 0) { + zoomint = 1; + } + if (zoomint > 32767) { + zoomint = 32767; + } + if (zoomint == 100) { + zoomint = 0; + } + + flash.Zoom(0); // hack, but this call is needed otherwise unzoom will fail for larger zoom values + flash.Zoom(zoomint); + } + + public synchronized String getVariable(String name) throws IOException { + return flash.GetVariable(name); + } + + public synchronized void setVariable(String name, String value) throws IOException { + flash.SetVariable(name, value); + } + + public synchronized String call(String callString) throws IOException { + + return flash.CallFunction(callString); + } + + @Override + public synchronized int getCurrentFrame() { + if (flash == null) { + return 0; + } + try { + return flash.getFrameNum(); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized int getTotalFrames() { + if (flash == null) { + return 0; + } + try { + if (flash.getReadyState() == 4) { + return flash.getTotalFrames(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + return 0; + } + + @Override + public synchronized void setBackground(Color color) { + try { + flash.setBackgroundColor((color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue()); + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + public FlashPlayerPanel(Component frame) { + if (!Platform.isWindows()) { + throw new FlashUnsupportedException(); + } + + try { + Callable callable = new Callable() { + @Override + public ShockwaveFlash call() throws InterruptedException { + return ActiveX.createObject(ShockwaveFlash.class, FlashPlayerPanel.this); + } + }; + + // hack: Kernel32.INSTANCE.ConnectNamedPipe never completes in ActiveXControl static constructor + flash = CancellableWorker.call(callable, 5, TimeUnit.SECONDS); + } catch (ActiveXException | TimeoutException | InterruptedException | ExecutionException ex) { + logger.log(Level.WARNING, "Cannot initialize flash panel", ex); + throw new FlashUnsupportedException(); + } + + flash.setAllowScriptAccess("always"); + try { + flash.setAllowNetworking("all"); + } catch (ActiveXException ex) { + // ignore + } + + flash.addOnReadyStateChangeListener((ActiveXEvent axe) -> { + fireMediaDisplayStateChanged(); + }); + + flash.addFlashCallListener((ActiveXEvent axe) -> { + String req = (String) axe.args.get("request"); + Matcher m = Pattern.compile("(.*)").matcher(req); + if (m.matches()) { + String funname = m.group(1); + String msg = m.group(2); + if (funname.equals("alert") || funname.equals("console.log")) { + if (Main.debugDialog != null) { + Main.debugDialog.log(funname + ":" + msg); + } + } + } + }); + + timer = new Timer(); + timer.schedule(new TimerTask() { + private boolean isPlaying = false; + + private int currentFrame = 0; + + @Override + public void run() { + if (closed) { + return; + } + try { + ShockwaveFlash flash1 = flash; + + boolean changed = false; + + if (flash1.getReadyState() >= 3) { + boolean isPlaying = flash1.IsPlaying(); + if (this.isPlaying != isPlaying) { + this.isPlaying = isPlaying; + } + + int currentFrame = flash1.CurrentFrame(); + if (this.currentFrame != currentFrame) { + this.currentFrame = currentFrame; + changed = true; + } + } else { + this.isPlaying = false; + } + + if (changed) { + fireMediaDisplayStateChanged(); + } + } catch (Exception ex) { + // ignore + cancel(); + } + } + }, 100, 100); + } + + public synchronized void stopSWF() { + displaySWF("-", null, 1); + stopped = true; + fireMediaDisplayStateChanged(); + } + + public synchronized boolean isStopped() { + return stopped; + } + + @Override + public BufferedImage printScreen() { + Point screenloc = getLocationOnScreen(); + try { + return new Robot().createScreenCapture(new Rectangle(screenloc.x, screenloc.y, getWidth(), getHeight())); + } catch (AWTException ex) { + return null; + } + } + + private String movieToPlay = null; + + private Thread playQueue; + + private final Object queueLock = new Object(); + + public synchronized void displaySWF(final String flashName, final Color bgColor, final float frameRate) { + + // Minimum of 1000 ms (setMovieDelay) delay before calling flash.setMovie to avoid illegalAccess errors + if (playQueue == null) { + playQueue = new Thread() { + long lastTime; + + @Override + public void run() { + while (true) { + boolean empty; + synchronized (queueLock) { + empty = movieToPlay == null; + if (empty) { + try { + queueLock.wait(); + } catch (InterruptedException ex) { + break; + } + } + } + if (!empty) { + flash.setMovie(movieToPlay); + synchronized (queueLock) { + movieToPlay = null; + } + try { + Thread.sleep(setMovieDelay); + } catch (InterruptedException ex) { + break; + } + } + } + } + }; + playQueue.start(); + } + zoom = 1.0; + this.frameRate = frameRate; + if (bgColor != null) { + setBackground(bgColor); + } + synchronized (queueLock) { + movieToPlay = flashName; + queueLock.notify(); + } + + //play + stopped = false; + fireMediaDisplayStateChanged(); + } + + @Override + public synchronized void close() throws IOException { + timer.cancel(); + closed = true; + } + + @Override + public void pause() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void stop() { + try { + if (flash.getReadyState() >= 3) { + flash.Stop(); + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void rewind() { + try { + if (flash.getReadyState() >= 3) { + flash.Rewind(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public void play() { + try { + if (flash.getReadyState() >= 3) { + flash.Play(); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public boolean isPlaying() { + try { + if (flash.getReadyState() >= 3) { + return flash.IsPlaying(); + } else { + return false; + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + return false; + } + } + + @Override + public void setLoop(boolean loop + ) { + } + + @Override + public void gotoFrame(int frame + ) { + if (frame < 0) { + return; + } + if (frame >= getTotalFrames()) { + return; + } + try { + if (flash.getReadyState() >= 3) { + flash.GotoFrame(frame); + } + } catch (ActiveXException | NullPointerException ex) { // Can be "Data not available yet exception" + } + } + + @Override + public float getFrameRate() { + return frameRate; + } + + @Override + public boolean isLoaded() { + return !isStopped(); + } + + public void fireMediaDisplayStateChanged() { + for (MediaDisplayListener l : listeners) { + l.mediaDisplayStateChanged(this); + } + } + + @Override + public void addEventListener(MediaDisplayListener listener) { + listeners.add(listener); + } + + @Override + public void removeEventListener(MediaDisplayListener listener) { + listeners.remove(listener); + } +} From a8c21cb3b4d700a7ccd52d70a74d4f81864d2830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 18:47:49 +0100 Subject: [PATCH 050/114] Fixed removeIncludedActions - do..while changed to while(true) as it was not working when firstItem was excluded and thus removed. Statement "continue" in do..while checks condition immediately and then terminating loop, because firstItem is now the second of the list. Other excluded items then won't be removed. --- .../action/fastactionlist/FastActionList.java | 1521 +++++++++-------- 1 file changed, 762 insertions(+), 759 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java index 655c0b8f1..991aab147 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/fastactionlist/FastActionList.java @@ -1,759 +1,762 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.action.fastactionlist; - -import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.action.special.ActionStore; -import com.jpexs.decompiler.flash.action.special.ActionUnknown; -import com.jpexs.decompiler.flash.action.swf4.ActionIf; -import com.jpexs.decompiler.flash.action.swf4.ActionJump; -import com.jpexs.decompiler.flash.action.swf4.ActionPush; -import com.jpexs.decompiler.graph.GraphSourceItemContainer; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * - * @author JPEXS - */ -public class FastActionList implements Collection { - - private int size; - - private ActionItem firstItem; - - private final Map actionItemMap; - - private final Set actionItemSet; - - public FastActionList(ActionList actions) { - actionItemMap = new HashMap<>(actions.size()); - actionItemSet = new HashSet<>(actions.size()); - for (Action action : actions) { - insertItemAfter(null, action); - } - - size = actions.size(); - getContainerLastActions(actions, actionItemMap); - getJumps(actions, actionItemMap); - } - - public final ActionItem insertItemBefore(ActionItem item, Action action) { - ActionItem newItem = new ActionItem(action); - return insertItemBefore(item, newItem); - } - - public final ActionItem insertItemAfter(ActionItem item, Action action) { - ActionItem newItem = new ActionItem(action); - return insertItemAfter(item, newItem); - } - - public final ActionItem insertItemBefore(ActionItem item, ActionItem newItem) { - insertItemAfter(item.prev, newItem); - if (item == firstItem) { - firstItem = newItem; - } - - return newItem; - } - - public final ActionItem insertItemAfter(ActionItem item, ActionItem newItem) { - if (item == null && firstItem == null) { - firstItem = newItem; - newItem.next = newItem; - newItem.prev = newItem; - } else { - if (item == null) { - // insert to the end - item = firstItem.prev; - } - - ActionItem oldNext = item.next; - newItem.prev = item; - newItem.next = oldNext; - item.next = newItem; - oldNext.prev = newItem; - } - - size++; - actionItemMap.put(newItem.action, newItem); - actionItemSet.add(newItem); - return newItem; - } - - public ActionItem removeItem(ActionItem item) { - ActionItem next = null; - if (item == firstItem) { - if (item.next == item) { - // there is only 1 item - firstItem = null; - } else { - next = item.next; - firstItem = next; - next.prev = item.prev; - item.prev.next = next; - } - } else { - next = item.next; - item.prev.next = next; - next.prev = item.prev; - } - - size--; - actionItemMap.remove(item.action); - actionItemSet.remove(item); - - item.removeJumpTarget(); - item.removeContainerLastActions(); - - if (item.jumpsHere != null) { - for (ActionItem item1 : new ArrayList<>(item.jumpsHere)) { - item1.setJumpTarget(item.next); - } - } - - if (item.lastActionOf != null) { - for (ActionItem item1 : new ArrayList<>(item.lastActionOf)) { - item1.replaceContainerLastAction(item, item.prev); - } - } - - return next; - } - - public void removeItem(int index, int count) { - FastActionListIterator iterator = new FastActionListIterator(this, index); - for (int i = 0; i < count; i++) { - iterator.next(); - iterator.remove(); - } - } - - public ActionItem get(int index) { - FastActionListIterator iterator = new FastActionListIterator(this, index); - return iterator.next(); - } - - public void replaceJumpTargets(ActionItem target, ActionItem newTarget) { - if (target.jumpsHere != null) { - for (ActionItem item : new ArrayList<>(target.jumpsHere)) { - item.setJumpTarget(newTarget); - } - } - } - - private void getContainerLastActions(ActionList actions, Map actionItemMap) { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof GraphSourceItemContainer) { - item.setContainerLastActions(getContainerLastActions(actions, action, actionItemMap)); - } - - item = item.next; - } while (item != firstItem); - } - - private List getContainerLastActions(ActionList actions, Action action, Map actionItemMap) { - GraphSourceItemContainer container = (GraphSourceItemContainer) action; - List sizes = container.getContainerSizes(); - long endAddress = action.getAddress() + container.getHeaderSize(); - List lasts = new ArrayList<>(sizes.size()); - for (long size : sizes) { - endAddress += size; - long lastActionAddress = getNearAddress(actions, endAddress - 1, false); - Action lastAction = null; - if (lastActionAddress != -1) { - lastAction = actions.getByAddress(lastActionAddress); - } - - if (lastAction != null) { - lasts.add(actionItemMap.get(lastAction)); - } else { - lasts.add(null); - } - } - return lasts; - } - - private long getNearAddress(ActionList actions, long address, boolean next) { - int min = 0; - int max = actions.size() - 1; - - while (max >= min) { - int mid = (min + max) / 2; - long midValue = actions.get(mid).getAddress(); - if (midValue == address) { - return address; - } else if (midValue < address) { - min = mid + 1; - } else { - max = mid - 1; - } - } - - return next - ? (min < actions.size() ? actions.get(min).getAddress() : -1) - : (max >= 0 ? actions.get(max).getAddress() : -1); - } - - private void getJumps(ActionList actions, Map actionItemMap) { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - long target = -1; - if (action instanceof ActionIf) { - target = ((ActionIf) action).getTargetAddress(); - } else if (action instanceof ActionJump) { - target = ((ActionJump) action).getTargetAddress(); - } else if (action instanceof ActionStore) { - ActionStore aStore = (ActionStore) action; - int storeSize = aStore.getStoreSize(); - // skip storeSize + 1 actions (+1 is the current action) - Action targetAction = action; - for (int i = 0; i <= storeSize; i++) { - long address = targetAction.getAddress() + targetAction.getTotalActionLength(); - targetAction = actions.getByAddress(address); - if (targetAction == null) { - break; - } - } - - item.setJumpTarget(actionItemMap.get(targetAction)); - } - if (target >= 0) { - Action targetAction = actions.getByAddress(target); - item.setJumpTarget(actionItemMap.get(targetAction)); - } - - item = item.next; - } while (item != firstItem); - } - - private void updateActionAddressesAndLengths() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - long address = item.action.getAddress(); - do { - Action action = item.action; - action.setAddress(address); - action.updateLength(); - address += action.getTotalActionLength(); - item = item.next; - } while (item != firstItem); - } - - private void updateJumps() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - long endAddress = item.prev.action.getAddress(); - do { - Action action = item.action; - if (action instanceof ActionIf) { - ActionIf aIf = (ActionIf) action; - Action target = item.getJumpTargetAction(); - long offset; - if (target != null) { - offset = target.getAddress() - action.getAddress() - action.getTotalActionLength(); - } else { - offset = endAddress - action.getAddress() - action.getTotalActionLength(); - } - aIf.setJumpOffset((int) offset); - } else if (action instanceof ActionJump) { - ActionJump aJump = (ActionJump) action; - Action target = item.getJumpTargetAction(); - long offset; - if (target != null) { - offset = target.getAddress() - action.getAddress() - action.getTotalActionLength(); - } else { - offset = endAddress - action.getAddress() - action.getTotalActionLength(); - } - aJump.setJumpOffset((int) offset); - } - - item = item.next; - } while (item != firstItem); - } - - private void updateActionStores() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof ActionStore) { - ActionStore aStore = (ActionStore) action; - Action nextActionAfterStore = item.getJumpTargetAction(); - ActionItem item1 = item; - List store = new ArrayList<>(); - while (true) { - item1 = item1.next; - if (item1 == firstItem || item1.action == nextActionAfterStore) { - break; - } - - store.add(item1.action); - } - - aStore.setStore(store); - } - - item = item.next; - } while (item != firstItem); - } - - private void updateContainerSizes() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof GraphSourceItemContainer) { - GraphSourceItemContainer container = (GraphSourceItemContainer) action; - List lastActions = item.getContainerLastActions(); - long startAddress = action.getAddress() + container.getHeaderSize(); - for (int j = 0; j < lastActions.size(); j++) { - Action lastAction = lastActions.get(j).action; - int length = (int) (lastAction.getAddress() + lastAction.getTotalActionLength() - startAddress); - container.setContainerSize(j, length); - startAddress += length; - } - } - - item = item.next; - } while (item != firstItem); - } - - public ActionItem getContainer(ActionItem item) { - while (!(item.action instanceof GraphSourceItemContainer) && item != firstItem) { - item = item.prev; - } - - if (item.action instanceof GraphSourceItemContainer) { - return item; - } - - return null; - } - - public void expandPushes() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof ActionPush) { - ActionPush push = (ActionPush) action; - if (push.values.size() > 1) { - for (int i = 1; i < push.values.size(); i++) { - Object value = push.values.get(i); - ActionPush newPush = new ActionPush(value); - newPush.constantPool = push.constantPool; - insertItemAfter(item, newPush); - item = item.next; - } - - Object obj = push.values.get(0); - push.values.clear(); - push.values.add(obj); - } - } - - item = item.next; - } while (item != firstItem); - } - - public void removeUnknownActions() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof ActionUnknown) { - item = removeItem(item); - continue; - } - - item = item.next; - } while (item != firstItem); - } - - public void removeZeroJumps() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - Action action = item.action; - if (action instanceof ActionJump) { - if (item.getJumpTarget() == item.next && item.getJumpTarget() != firstItem) { - item = removeItem(item); - continue; - } - } - - item = item.next; - } while (item != firstItem); - } - - public void removeUnreachableActions() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - updateReachableFlags(null, null); - - do { - if (item.reachable == 0) { - item = removeItem(item); - continue; - } - - item = item.next; - } while (item != firstItem); - } - - public void removeIncludedActions() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - if (!item.excluded) { - item = removeItem(item); - continue; - } - - item = item.next; - } while (item != firstItem); - } - - public int getUnreachableActionCount(ActionItem jump, ActionItem jumpTarget) { - ActionItem item = firstItem; - if (item == null) { - return 0; - } - - updateReachableFlags(jump, jumpTarget); - jump.reachable = 0; - - int count = 0; - do { - if (item.reachable == 0) { - count++; - } - - item = item.next; - } while (item != firstItem); - - return count; - } - - private void clearReachableFlags() { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - item.reachable = 0; - item = item.next; - } while (item != firstItem); - } - - public void setExcludedFlags(boolean value) { - ActionItem item = firstItem; - if (item == null) { - return; - } - - do { - item.excluded = value; - item = item.next; - } while (item != firstItem); - } - - private void updateReachableFlags(ActionItem jump, ActionItem jumpTarget) { - if (firstItem == null) { - return; - } - - clearReachableFlags(); - - firstItem.reachable = 1; - ActionItem firstItem2 = firstItem; - boolean modified = true; - while (modified) { - modified = false; - ActionItem item = firstItem2; - do { - ActionItem next = item.next; - //ActionItem alternativeNext = null; - Action action = item.action; - if (item.reachable == 1) { - item.reachable = 2; - modified = true; - - if (item == firstItem2) { - firstItem2 = next; - } - - if (item == jump) { - if (jumpTarget.reachable == 0) { - jumpTarget.reachable = 1; - //alternativeNext = jumpTarget; - } - } else { - - if (!action.isExit() && !(action instanceof ActionJump)) { - if (next.reachable == 0) { - next.reachable = 1; - } - } - - if (action instanceof GraphSourceItemContainer) { - for (ActionItem lastActionItem : item.getContainerLastActions()) { - if (lastActionItem != null && lastActionItem.next != null && lastActionItem.next.reachable == 0) { - lastActionItem.next.reachable = 1; - //alternativeNext = lastActionItem.next; - } - } - } - - ActionItem target = item.getJumpTarget(); - if (target != null) { - if (target.reachable == 0) { - target.reachable = 1; - //alternativeNext = target; - } - } - } - } - - //item = alternativeNext == null || next.reachable == 1 ? next : alternativeNext; - item = next; - } while (item != firstItem); - } - } - - public ActionList updateActions() { - List resultList = new ArrayList<>(size); - ActionItem item = firstItem; - if (item == null) { - return new ActionList(resultList); - } - - do { - resultList.add(item.action); - item = item.next; - } while (item != firstItem); - - ActionList result = new ActionList(resultList); - updateActionAddressesAndLengths(); - updateJumps(); - updateActionStores(); - updateContainerSizes(); - return result; - } - - public ActionItem first() { - return firstItem; - } - - public ActionItem last() { - return firstItem == null ? null : firstItem.prev; - } - - public ActionList toActionList() { - return updateActions(); - } - - @Override - public int size() { - return size; - } - - @Override - public boolean isEmpty() { - return size == 0; - } - - @Override - public boolean contains(Object o) { - if (o instanceof ActionItem) { - return actionItemSet.contains(o); - } else if (o instanceof Action) { - return actionItemMap.containsKey((Action) o); - } - - return false; - } - - @Override - public FastActionListIterator iterator() { - return new FastActionListIterator(this); - } - - @Override - public Object[] toArray() { - Object[] result = new Object[size]; - - ActionItem item = firstItem; - if (item == null) { - return result; - } - - int i = 0; - do { - result[i] = item.action; - item = item.next; - i++; - } while (item != firstItem); - return null; - } - - @Override - @SuppressWarnings("unchecked") - public T[] toArray(T[] a) { - if (a.length != size) { - a = (T[]) new ActionItem[size]; - } - - ActionItem item = firstItem; - if (item == null) { - return a; - } - - int i = 0; - do { - a[i] = (T) item; - item = item.next; - i++; - } while (item != firstItem); - return null; - } - - @Override - public boolean add(ActionItem e) { - insertItemAfter(null, e); - return true; - } - - @Override - public boolean remove(Object o) { - ActionItem item = null; - if (o instanceof ActionItem) { - item = (ActionItem) o; - } else if (o instanceof Action) { - item = actionItemMap.get((Action) o); - } - - if (item == null) { - return false; - } - - removeItem(item); - return true; - } - - @Override - public boolean containsAll(Collection c) { - for (Object c1 : c) { - if (!contains(c1)) { - return false; - } - } - - return true; - } - - @Override - public boolean addAll(Collection c) { - for (ActionItem c1 : c) { - insertItemAfter(null, c1); - } - - return true; - } - - @Override - public boolean removeAll(Collection c) { - boolean result = false; - for (Object c1 : c) { - result |= remove(c1); - } - - return result; - } - - @Override - public boolean retainAll(Collection c) { - ActionItem item = firstItem; - if (item == null) { - return false; - } - - boolean modified = false; - do { - if (!c.contains(item)) { - item = removeItem(item); - modified = true; - continue; - } - - item = item.next; - } while (item != firstItem); - return modified; - } - - @Override - public void clear() { - firstItem = null; - size = 0; - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.action.fastactionlist; + +import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.action.special.ActionStore; +import com.jpexs.decompiler.flash.action.special.ActionUnknown; +import com.jpexs.decompiler.flash.action.swf4.ActionIf; +import com.jpexs.decompiler.flash.action.swf4.ActionJump; +import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.graph.GraphSourceItemContainer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * + * @author JPEXS + */ +public class FastActionList implements Collection { + + private int size; + + private ActionItem firstItem; + + private final Map actionItemMap; + + private final Set actionItemSet; + + public FastActionList(ActionList actions) { + actionItemMap = new HashMap<>(actions.size()); + actionItemSet = new HashSet<>(actions.size()); + for (Action action : actions) { + insertItemAfter(null, action); + } + + size = actions.size(); + getContainerLastActions(actions, actionItemMap); + getJumps(actions, actionItemMap); + } + + public final ActionItem insertItemBefore(ActionItem item, Action action) { + ActionItem newItem = new ActionItem(action); + return insertItemBefore(item, newItem); + } + + public final ActionItem insertItemAfter(ActionItem item, Action action) { + ActionItem newItem = new ActionItem(action); + return insertItemAfter(item, newItem); + } + + public final ActionItem insertItemBefore(ActionItem item, ActionItem newItem) { + insertItemAfter(item.prev, newItem); + if (item == firstItem) { + firstItem = newItem; + } + + return newItem; + } + + public final ActionItem insertItemAfter(ActionItem item, ActionItem newItem) { + if (item == null && firstItem == null) { + firstItem = newItem; + newItem.next = newItem; + newItem.prev = newItem; + } else { + if (item == null) { + // insert to the end + item = firstItem.prev; + } + + ActionItem oldNext = item.next; + newItem.prev = item; + newItem.next = oldNext; + item.next = newItem; + oldNext.prev = newItem; + } + + size++; + actionItemMap.put(newItem.action, newItem); + actionItemSet.add(newItem); + return newItem; + } + + public ActionItem removeItem(ActionItem item) { + ActionItem next = null; + if (item == firstItem) { + if (item.next == item) { + // there is only 1 item + firstItem = null; + } else { + next = item.next; + firstItem = next; + next.prev = item.prev; + item.prev.next = next; + } + } else { + next = item.next; + item.prev.next = next; + next.prev = item.prev; + } + + size--; + actionItemMap.remove(item.action); + actionItemSet.remove(item); + + item.removeJumpTarget(); + item.removeContainerLastActions(); + + if (item.jumpsHere != null) { + for (ActionItem item1 : new ArrayList<>(item.jumpsHere)) { + item1.setJumpTarget(item.next); + } + } + + if (item.lastActionOf != null) { + for (ActionItem item1 : new ArrayList<>(item.lastActionOf)) { + item1.replaceContainerLastAction(item, item.prev); + } + } + + return next; + } + + public void removeItem(int index, int count) { + FastActionListIterator iterator = new FastActionListIterator(this, index); + for (int i = 0; i < count; i++) { + iterator.next(); + iterator.remove(); + } + } + + public ActionItem get(int index) { + FastActionListIterator iterator = new FastActionListIterator(this, index); + return iterator.next(); + } + + public void replaceJumpTargets(ActionItem target, ActionItem newTarget) { + if (target.jumpsHere != null) { + for (ActionItem item : new ArrayList<>(target.jumpsHere)) { + item.setJumpTarget(newTarget); + } + } + } + + private void getContainerLastActions(ActionList actions, Map actionItemMap) { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof GraphSourceItemContainer) { + item.setContainerLastActions(getContainerLastActions(actions, action, actionItemMap)); + } + + item = item.next; + } while (item != firstItem); + } + + private List getContainerLastActions(ActionList actions, Action action, Map actionItemMap) { + GraphSourceItemContainer container = (GraphSourceItemContainer) action; + List sizes = container.getContainerSizes(); + long endAddress = action.getAddress() + container.getHeaderSize(); + List lasts = new ArrayList<>(sizes.size()); + for (long size : sizes) { + endAddress += size; + long lastActionAddress = getNearAddress(actions, endAddress - 1, false); + Action lastAction = null; + if (lastActionAddress != -1) { + lastAction = actions.getByAddress(lastActionAddress); + } + + if (lastAction != null) { + lasts.add(actionItemMap.get(lastAction)); + } else { + lasts.add(null); + } + } + return lasts; + } + + private long getNearAddress(ActionList actions, long address, boolean next) { + int min = 0; + int max = actions.size() - 1; + + while (max >= min) { + int mid = (min + max) / 2; + long midValue = actions.get(mid).getAddress(); + if (midValue == address) { + return address; + } else if (midValue < address) { + min = mid + 1; + } else { + max = mid - 1; + } + } + + return next + ? (min < actions.size() ? actions.get(min).getAddress() : -1) + : (max >= 0 ? actions.get(max).getAddress() : -1); + } + + private void getJumps(ActionList actions, Map actionItemMap) { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + long target = -1; + if (action instanceof ActionIf) { + target = ((ActionIf) action).getTargetAddress(); + } else if (action instanceof ActionJump) { + target = ((ActionJump) action).getTargetAddress(); + } else if (action instanceof ActionStore) { + ActionStore aStore = (ActionStore) action; + int storeSize = aStore.getStoreSize(); + // skip storeSize + 1 actions (+1 is the current action) + Action targetAction = action; + for (int i = 0; i <= storeSize; i++) { + long address = targetAction.getAddress() + targetAction.getTotalActionLength(); + targetAction = actions.getByAddress(address); + if (targetAction == null) { + break; + } + } + + item.setJumpTarget(actionItemMap.get(targetAction)); + } + if (target >= 0) { + Action targetAction = actions.getByAddress(target); + item.setJumpTarget(actionItemMap.get(targetAction)); + } + + item = item.next; + } while (item != firstItem); + } + + private void updateActionAddressesAndLengths() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + long address = item.action.getAddress(); + do { + Action action = item.action; + action.setAddress(address); + action.updateLength(); + address += action.getTotalActionLength(); + item = item.next; + } while (item != firstItem); + } + + private void updateJumps() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + long endAddress = item.prev.action.getAddress(); + do { + Action action = item.action; + if (action instanceof ActionIf) { + ActionIf aIf = (ActionIf) action; + Action target = item.getJumpTargetAction(); + long offset; + if (target != null) { + offset = target.getAddress() - action.getAddress() - action.getTotalActionLength(); + } else { + offset = endAddress - action.getAddress() - action.getTotalActionLength(); + } + aIf.setJumpOffset((int) offset); + } else if (action instanceof ActionJump) { + ActionJump aJump = (ActionJump) action; + Action target = item.getJumpTargetAction(); + long offset; + if (target != null) { + offset = target.getAddress() - action.getAddress() - action.getTotalActionLength(); + } else { + offset = endAddress - action.getAddress() - action.getTotalActionLength(); + } + aJump.setJumpOffset((int) offset); + } + + item = item.next; + } while (item != firstItem); + } + + private void updateActionStores() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof ActionStore) { + ActionStore aStore = (ActionStore) action; + Action nextActionAfterStore = item.getJumpTargetAction(); + ActionItem item1 = item; + List store = new ArrayList<>(); + while (true) { + item1 = item1.next; + if (item1 == firstItem || item1.action == nextActionAfterStore) { + break; + } + + store.add(item1.action); + } + + aStore.setStore(store); + } + + item = item.next; + } while (item != firstItem); + } + + private void updateContainerSizes() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof GraphSourceItemContainer) { + GraphSourceItemContainer container = (GraphSourceItemContainer) action; + List lastActions = item.getContainerLastActions(); + long startAddress = action.getAddress() + container.getHeaderSize(); + for (int j = 0; j < lastActions.size(); j++) { + Action lastAction = lastActions.get(j).action; + int length = (int) (lastAction.getAddress() + lastAction.getTotalActionLength() - startAddress); + container.setContainerSize(j, length); + startAddress += length; + } + } + + item = item.next; + } while (item != firstItem); + } + + public ActionItem getContainer(ActionItem item) { + while (!(item.action instanceof GraphSourceItemContainer) && item != firstItem) { + item = item.prev; + } + + if (item.action instanceof GraphSourceItemContainer) { + return item; + } + + return null; + } + + public void expandPushes() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof ActionPush) { + ActionPush push = (ActionPush) action; + if (push.values.size() > 1) { + for (int i = 1; i < push.values.size(); i++) { + Object value = push.values.get(i); + ActionPush newPush = new ActionPush(value); + newPush.constantPool = push.constantPool; + insertItemAfter(item, newPush); + item = item.next; + } + + Object obj = push.values.get(0); + push.values.clear(); + push.values.add(obj); + } + } + + item = item.next; + } while (item != firstItem); + } + + public void removeUnknownActions() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof ActionUnknown) { + item = removeItem(item); + continue; + } + + item = item.next; + } while (item != firstItem); + } + + public void removeZeroJumps() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + Action action = item.action; + if (action instanceof ActionJump) { + if (item.getJumpTarget() == item.next && item.getJumpTarget() != firstItem) { + item = removeItem(item); + continue; + } + } + + item = item.next; + } while (item != firstItem); + } + + public void removeUnreachableActions() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + updateReachableFlags(null, null); + + do { + if (item.reachable == 0) { + item = removeItem(item); + continue; + } + + item = item.next; + } while (item != firstItem); + } + + public void removeIncludedActions() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + while (true) { + if (!item.excluded) { + item = removeItem(item); + continue; + } + + item = item.next; + if (item == firstItem) { + break; + } + } + } + + public int getUnreachableActionCount(ActionItem jump, ActionItem jumpTarget) { + ActionItem item = firstItem; + if (item == null) { + return 0; + } + + updateReachableFlags(jump, jumpTarget); + jump.reachable = 0; + + int count = 0; + do { + if (item.reachable == 0) { + count++; + } + + item = item.next; + } while (item != firstItem); + + return count; + } + + private void clearReachableFlags() { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + item.reachable = 0; + item = item.next; + } while (item != firstItem); + } + + public void setExcludedFlags(boolean value) { + ActionItem item = firstItem; + if (item == null) { + return; + } + + do { + item.excluded = value; + item = item.next; + } while (item != firstItem); + } + + private void updateReachableFlags(ActionItem jump, ActionItem jumpTarget) { + if (firstItem == null) { + return; + } + + clearReachableFlags(); + + firstItem.reachable = 1; + ActionItem firstItem2 = firstItem; + boolean modified = true; + while (modified) { + modified = false; + ActionItem item = firstItem2; + do { + ActionItem next = item.next; + //ActionItem alternativeNext = null; + Action action = item.action; + if (item.reachable == 1) { + item.reachable = 2; + modified = true; + + if (item == firstItem2) { + firstItem2 = next; + } + + if (item == jump) { + if (jumpTarget.reachable == 0) { + jumpTarget.reachable = 1; + //alternativeNext = jumpTarget; + } + } else { + + if (!action.isExit() && !(action instanceof ActionJump)) { + if (next.reachable == 0) { + next.reachable = 1; + } + } + + if (action instanceof GraphSourceItemContainer) { + for (ActionItem lastActionItem : item.getContainerLastActions()) { + if (lastActionItem != null && lastActionItem.next != null && lastActionItem.next.reachable == 0) { + lastActionItem.next.reachable = 1; + //alternativeNext = lastActionItem.next; + } + } + } + + ActionItem target = item.getJumpTarget(); + if (target != null) { + if (target.reachable == 0) { + target.reachable = 1; + //alternativeNext = target; + } + } + } + } + + //item = alternativeNext == null || next.reachable == 1 ? next : alternativeNext; + item = next; + } while (item != firstItem); + } + } + + public ActionList updateActions() { + List resultList = new ArrayList<>(size); + ActionItem item = firstItem; + if (item == null) { + return new ActionList(resultList); + } + + do { + resultList.add(item.action); + item = item.next; + } while (item != firstItem); + + ActionList result = new ActionList(resultList); + updateActionAddressesAndLengths(); + updateJumps(); + updateActionStores(); + updateContainerSizes(); + return result; + } + + public ActionItem first() { + return firstItem; + } + + public ActionItem last() { + return firstItem == null ? null : firstItem.prev; + } + + public ActionList toActionList() { + return updateActions(); + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public boolean contains(Object o) { + if (o instanceof ActionItem) { + return actionItemSet.contains(o); + } else if (o instanceof Action) { + return actionItemMap.containsKey((Action) o); + } + + return false; + } + + @Override + public FastActionListIterator iterator() { + return new FastActionListIterator(this); + } + + @Override + public Object[] toArray() { + Object[] result = new Object[size]; + + ActionItem item = firstItem; + if (item == null) { + return result; + } + + int i = 0; + do { + result[i] = item.action; + item = item.next; + i++; + } while (item != firstItem); + return null; + } + + @Override + @SuppressWarnings("unchecked") + public T[] toArray(T[] a) { + if (a.length != size) { + a = (T[]) new ActionItem[size]; + } + + ActionItem item = firstItem; + if (item == null) { + return a; + } + + int i = 0; + do { + a[i] = (T) item; + item = item.next; + i++; + } while (item != firstItem); + return null; + } + + @Override + public boolean add(ActionItem e) { + insertItemAfter(null, e); + return true; + } + + @Override + public boolean remove(Object o) { + ActionItem item = null; + if (o instanceof ActionItem) { + item = (ActionItem) o; + } else if (o instanceof Action) { + item = actionItemMap.get((Action) o); + } + + if (item == null) { + return false; + } + + removeItem(item); + return true; + } + + @Override + public boolean containsAll(Collection c) { + for (Object c1 : c) { + if (!contains(c1)) { + return false; + } + } + + return true; + } + + @Override + public boolean addAll(Collection c) { + for (ActionItem c1 : c) { + insertItemAfter(null, c1); + } + + return true; + } + + @Override + public boolean removeAll(Collection c) { + boolean result = false; + for (Object c1 : c) { + result |= remove(c1); + } + + return result; + } + + @Override + public boolean retainAll(Collection c) { + ActionItem item = firstItem; + if (item == null) { + return false; + } + + boolean modified = false; + do { + if (!c.contains(item)) { + item = removeItem(item); + modified = true; + continue; + } + + item = item.next; + } while (item != firstItem); + return modified; + } + + @Override + public void clear() { + firstItem = null; + size = 0; + } +} From de1440b7a777f138c062f8110c1cd80cd15298c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 18:53:30 +0100 Subject: [PATCH 051/114] ActionDeobfuscator - isFakeName changed to call isValidName because it failed in some cases. --- .../deobfuscation/ActionDeobfuscator.java | 1393 ++++++++--------- 1 file changed, 694 insertions(+), 699 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java index 7b03f5d6b..4d0238e52 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/deobfuscation/ActionDeobfuscator.java @@ -1,699 +1,694 @@ -/* - * Copyright (C) 2010-2016 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. - */ -package com.jpexs.decompiler.flash.action.deobfuscation; - -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.ActionList; -import com.jpexs.decompiler.flash.action.ActionListReader; -import com.jpexs.decompiler.flash.action.LocalDataArea; -import com.jpexs.decompiler.flash.action.Stage; -import com.jpexs.decompiler.flash.action.fastactionlist.ActionItem; -import com.jpexs.decompiler.flash.action.fastactionlist.FastActionList; -import com.jpexs.decompiler.flash.action.fastactionlist.FastActionListIterator; -import com.jpexs.decompiler.flash.action.special.ActionEnd; -import com.jpexs.decompiler.flash.action.swf4.ActionAdd; -import com.jpexs.decompiler.flash.action.swf4.ActionAnd; -import com.jpexs.decompiler.flash.action.swf4.ActionAsciiToChar; -import com.jpexs.decompiler.flash.action.swf4.ActionCharToAscii; -import com.jpexs.decompiler.flash.action.swf4.ActionDivide; -import com.jpexs.decompiler.flash.action.swf4.ActionEquals; -import com.jpexs.decompiler.flash.action.swf4.ActionGetTime; -import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; -import com.jpexs.decompiler.flash.action.swf4.ActionIf; -import com.jpexs.decompiler.flash.action.swf4.ActionJump; -import com.jpexs.decompiler.flash.action.swf4.ActionLess; -import com.jpexs.decompiler.flash.action.swf4.ActionMBAsciiToChar; -import com.jpexs.decompiler.flash.action.swf4.ActionMBStringLength; -import com.jpexs.decompiler.flash.action.swf4.ActionMultiply; -import com.jpexs.decompiler.flash.action.swf4.ActionNot; -import com.jpexs.decompiler.flash.action.swf4.ActionOr; -import com.jpexs.decompiler.flash.action.swf4.ActionPush; -import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; -import com.jpexs.decompiler.flash.action.swf4.ActionStringAdd; -import com.jpexs.decompiler.flash.action.swf4.ActionStringEquals; -import com.jpexs.decompiler.flash.action.swf4.ActionStringLength; -import com.jpexs.decompiler.flash.action.swf4.ActionStringLess; -import com.jpexs.decompiler.flash.action.swf4.ActionSubtract; -import com.jpexs.decompiler.flash.action.swf4.ActionToInteger; -import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; -import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; -import com.jpexs.decompiler.flash.action.swf5.ActionAdd2; -import com.jpexs.decompiler.flash.action.swf5.ActionBitAnd; -import com.jpexs.decompiler.flash.action.swf5.ActionBitLShift; -import com.jpexs.decompiler.flash.action.swf5.ActionBitOr; -import com.jpexs.decompiler.flash.action.swf5.ActionBitRShift; -import com.jpexs.decompiler.flash.action.swf5.ActionBitURShift; -import com.jpexs.decompiler.flash.action.swf5.ActionBitXor; -import com.jpexs.decompiler.flash.action.swf5.ActionCallFunction; -import com.jpexs.decompiler.flash.action.swf5.ActionConstantPool; -import com.jpexs.decompiler.flash.action.swf5.ActionDecrement; -import com.jpexs.decompiler.flash.action.swf5.ActionDefineFunction; -import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; -import com.jpexs.decompiler.flash.action.swf5.ActionEquals2; -import com.jpexs.decompiler.flash.action.swf5.ActionIncrement; -import com.jpexs.decompiler.flash.action.swf5.ActionLess2; -import com.jpexs.decompiler.flash.action.swf5.ActionModulo; -import com.jpexs.decompiler.flash.action.swf5.ActionPushDuplicate; -import com.jpexs.decompiler.flash.action.swf5.ActionReturn; -import com.jpexs.decompiler.flash.action.swf5.ActionToNumber; -import com.jpexs.decompiler.flash.action.swf5.ActionToString; -import com.jpexs.decompiler.flash.action.swf5.ActionTypeOf; -import com.jpexs.decompiler.flash.action.swf6.ActionGreater; -import com.jpexs.decompiler.flash.action.swf6.ActionStringGreater; -import com.jpexs.decompiler.flash.ecma.EcmaScript; -import com.jpexs.decompiler.flash.helpers.SWFDecompilerAdapter; -import com.jpexs.decompiler.flash.helpers.collections.FixItemCounterStack; -import com.jpexs.decompiler.graph.GraphTargetItem; -import com.jpexs.decompiler.graph.model.FalseItem; -import com.jpexs.decompiler.graph.model.PushItem; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Stack; - -/** - * - * @author JPEXS - */ -public class ActionDeobfuscator extends SWFDecompilerAdapter { - - private final int executionLimit = 5000; - - @Override - public void actionListParsed(ActionList actions, SWF swf) throws InterruptedException { - FastActionList fastActions = new FastActionList(actions); - fastActions.removeUnknownActions(); - fastActions.expandPushes(); - Map fakeFunctions = getFakeFunctionResults(fastActions); - boolean changed = true; - boolean useVariables = false; - while (changed) { - changed = removeGetTimes(fastActions); - changed |= removeObfuscationIfs(fastActions, fakeFunctions, useVariables); - changed |= removeObfuscatedUnusedVariables(fastActions); - - actions.setActions(fastActions.toActionList()); - changed |= ActionListReader.fixConstantPools(null, actions); - if (!changed && !useVariables) { - useVariables = true; - changed = true; - } - } - } - - private boolean removeGetTimes(FastActionList actions) { - if (actions.isEmpty()) { - return false; - } - - boolean ret = false; - boolean changed = true; - int getTimeCount = 1; - while (changed && getTimeCount > 0) { - changed = false; - actions.removeUnreachableActions(); - actions.removeZeroJumps(); - getTimeCount = 0; - - // GetTime, If => Jump, assume GetTime > 0 - FastActionListIterator iterator = actions.iterator(); - while (iterator.hasNext()) { - Action a = iterator.next().action; - ActionItem a2Item = iterator.peek(0); - Action a2 = a2Item.action; - boolean isGetTime = a instanceof ActionGetTime; - if (isGetTime) { - getTimeCount++; - } - - if (isGetTime && a2 instanceof ActionIf) { - ActionJump jump = new ActionJump(0); - ActionItem jumpItem = new ActionItem(jump); - jumpItem.setJumpTarget(a2Item.getJumpTarget()); - iterator.remove(); // GetTime - iterator.next(); - iterator.remove(); // If - iterator.add(jumpItem); // replace If with Jump - changed = true; - ret = true; - getTimeCount--; - } - } - - if (!changed && getTimeCount > 0) { - // GetTime, Increment If => Jump - iterator = actions.iterator(); - while (iterator.hasNext()) { - Action a = iterator.next().action; - Action a1 = iterator.peek(0).action; - ActionItem a2Item = iterator.peek(1); - Action a2 = a2Item.action; - if (a instanceof ActionGetTime && a1 instanceof ActionIncrement && a2 instanceof ActionIf) { - ActionJump jump = new ActionJump(0); - ActionItem jumpItem = new ActionItem(jump); - jumpItem.setJumpTarget(a2Item.getJumpTarget()); - iterator.remove(); // GetTime - iterator.next(); - iterator.remove(); // Increment - iterator.next(); - iterator.remove(); // If - iterator.add(jumpItem); // replace If with Jump - changed = true; - ret = true; - } - } - } - } - - return ret; - } - - private boolean removeObfuscationIfs(FastActionList actions, Map fakeFunctions, boolean useVariables) throws InterruptedException { - if (actions.isEmpty()) { - return false; - } - - boolean ret = false; - actions.removeUnreachableActions(); - actions.removeZeroJumps(); - - ActionConstantPool cPool = getConstantPool(actions); - LocalDataArea localData = new LocalDataArea(new Stage(null), true); - localData.stack = new FixItemCounterStack(); - ExecutionResult result = new ExecutionResult(); - FastActionListIterator iterator = actions.iterator(); - boolean first = true; - while (iterator.hasNext()) { - if (Thread.currentThread().isInterrupted()) { - throw new InterruptedException(); - } - - ActionItem actionItem = iterator.next(); - result.clear(); - localData.clear(); - /*ActionItem container = actions.getContainer(actionItem); - actions.setExcludedFlags(false); - if (container != null) { - markContainerActions(container, actions); - }*/ - - executeActions(actionItem, localData, cPool, result, fakeFunctions, useVariables, first); - - if (result.item != null && result.resultValue == null) { - int newIstructionCount = 1 /*jump */ + result.stack.size(); - if (result.constantPool != null) { - newIstructionCount++; - } - - newIstructionCount += 3 * result.variables.size(); - /* 2x Push + Set or Define */ - - boolean allValueValid = true; - for (Object value : result.variables.values()) { - if (!ActionPush.isValidValue(value)) { - allValueValid = false; - break; - } - } - - if (allValueValid && newIstructionCount < result.maxSkippedInstructions) { - int unreachableCount = result.minSkippedInstructions; - if (newIstructionCount >= result.minSkippedInstructions) { - unreachableCount = actions.getUnreachableActionCount(actionItem, result.item); - } - - if (newIstructionCount < unreachableCount) { - if (result.stack.isEmpty() && result.variables.isEmpty() && result.constantPool == null && actionItem.action instanceof ActionJump) { - actionItem.setJumpTarget(result.item); - } else { - ActionItem prevActionItem = actionItem.prev; - if (result.constantPool != null) { - ActionConstantPool constantPool2 = new ActionConstantPool(new ArrayList<>(result.constantPool.constantPool)); - ActionItem constantPoolItem = new ActionItem(constantPool2); - iterator.addBefore(constantPoolItem); - } - - for (String variableName : result.variables.keySet()) { - Object value = result.variables.get(variableName); - ActionPush push = new ActionPush(variableName); - ActionItem pushItem = new ActionItem(push); - iterator.addBefore(pushItem); - push = new ActionPush(value); - pushItem = new ActionItem(push); - iterator.addBefore(pushItem); - - if (result.defines.contains(variableName)) { - ActionDefineLocal defineLocal = new ActionDefineLocal(); - ActionItem defineLocalItem = new ActionItem(defineLocal); - iterator.addBefore(defineLocalItem); - } else { - ActionSetVariable setVariable = new ActionSetVariable(); - ActionItem setVariableItem = new ActionItem(setVariable); - iterator.addBefore(setVariableItem); - } - } - - if (!result.stack.isEmpty()) { - for (Object obj : result.stack) { - ActionPush push = new ActionPush(obj); - ActionItem pushItem = new ActionItem(push); - iterator.addBefore(pushItem); - } - } - - ActionJump jump = new ActionJump(0); - ActionItem jumpItem = new ActionItem(jump); - jumpItem.setJumpTarget(result.item); - iterator.addBefore(jumpItem); - - actions.replaceJumpTargets(actionItem, prevActionItem.next); - } - - ActionItem prevItem = actionItem.prev; - - actions.removeUnreachableActions(); - actions.removeZeroJumps(); - - iterator.setCurrent(prevItem.next.next); - ret = true; - } - } - } - - first = false; - } - - //actions.setExcludedFlags(false); - return ret; - } - - private boolean removeObfuscatedUnusedVariables(FastActionList actions) throws InterruptedException { - if (actions.isEmpty()) { - return false; - } - - Map pushValues = getPushValues(actions); - - boolean ret = false; - - // Push, Push DefineLocal => remove when first pushed value is obfuscated and never used - FastActionListIterator iterator = actions.iterator(); - while (iterator.hasNext()) { - Action a = iterator.next().action; - Action a1 = iterator.peek(0).action; - Action a2 = iterator.peek(1).action; - if (a instanceof ActionPush && a1 instanceof ActionPush && a2 instanceof ActionDefineLocal) { - ActionPush pushName = (ActionPush) a; - ActionPush pushValue = (ActionPush) a1; - if (pushName.values.size() == 1 && pushValue.values.size() == 1) { - String strName = EcmaScript.toString(pushName.values.get(0), pushName.constantPool); - if (isFakeName(strName) && pushValues.get(strName) == 1) { - iterator.remove(); // Push name - iterator.next(); - iterator.remove(); // Push value - iterator.next(); - iterator.remove(); // DefineLocal - ret = true; - } - } - } - } - - return ret; - } - - private Map getPushValues(FastActionList actions) { - Map ret = new HashMap<>(); - for (ActionItem actionItem : actions) { - Action action = actionItem.action; - if (action instanceof ActionPush) { - ActionPush push = (ActionPush) action; - for (int i = 0; i < push.values.size(); i++) { - String str = EcmaScript.toString(push.values.get(i), push.constantPool); - Integer cnt = ret.get(str); - cnt = cnt == null ? 1 : cnt + 1; - ret.put(str, cnt); - } - } - } - - return ret; - } - - private ActionConstantPool getConstantPool(FastActionList actions) { - ActionConstantPool cPool = null; - for (ActionItem actionItem : actions) { - Action action = actionItem.action; - if (action instanceof ActionConstantPool) { - if (cPool != null) { - // there are multiple constant pools - return null; - } - cPool = (ActionConstantPool) action; - } - } - return cPool; - } - - private Map getFakeFunctionResults(FastActionList actions) throws InterruptedException { - /* - DefineFunction "fakeName" 0 { - Push 1777 - Return - } - */ - - Map results = new HashMap<>(); - - LocalDataArea localData = new LocalDataArea(new Stage(null)); - localData.stack = new FixItemCounterStack(); - ExecutionResult result = new ExecutionResult(); - for (ActionItem actionItem : actions) { - Action action = actionItem.action; - if (action instanceof ActionDefineFunction) { - ActionDefineFunction def = (ActionDefineFunction) action; - if (def.paramNames.isEmpty() && def.functionName.length() > 0) { - // remove funcion only when the function name contains only non printable characters - if (!isFakeName(def.functionName)) { - continue; - } - - result.clear(); - if (markContainerActions(actionItem, actions)) { - localData.clear(); - executeActions(actionItem.next, localData, null, result, null, true, false); - if (result.resultValue != null) { - results.put(def.functionName, result.resultValue); - actions.removeIncludedActions(); - } - } - } - } - } - - actions.setExcludedFlags(false); - return results; - } - - private boolean markContainerActions(ActionItem actionItem, FastActionList actions) { - ActionItem lastActionItem = actionItem.getContainerLastActions().get(0); - // has at least 1 inner item - if (lastActionItem != actionItem) { - actions.setExcludedFlags(true); - ActionItem actionItem2 = actionItem; - do { - actionItem2.excluded = false; - actionItem2 = actionItem2.next; - } while (actionItem2 != lastActionItem && actionItem2 != actions.last()); - actionItem2.excluded = false; - - return true; - } - - return false; - } - - protected boolean isFakeName(String name) { - for (char ch : name.toCharArray()) { - if (ch > 31) { - return false; - } - } - - return true; - } - - private void executeActions(ActionItem item, LocalDataArea localData, ActionConstantPool constantPool, ExecutionResult result, Map fakeFunctions, boolean useVariables, boolean allowGetUninitializedVariables) throws InterruptedException { - if (item.action.isExit()) { - return; - } - - FixItemCounterStack stack = (FixItemCounterStack) localData.stack; - int instructionsProcessed = 0; - int skippedInstructions = 0; - ActionConstantPool lastConstantPool = null; - - boolean skippedInstructionsUnknown = false; - boolean jumpedHere = true; - boolean jumpFound = false; - while (true) { - if (item.isExcluded()) { - break; - } - - if (instructionsProcessed > executionLimit) { - break; - } - - Action action = item.action; - - /*System.out.print(action.getASMSource(actions, new ArrayList(), ScriptExportMode.PCODE)); - for (int j = 0; j < stack.size(); j++) { - System.out.print(" '" + stack.get(j).getResult() + "'"); - } - System.out.println();*/ - if (action instanceof ActionConstantPool) { - lastConstantPool = (ActionConstantPool) action; - } else if (action instanceof ActionDefineLocal) { - if (stack.size() < 2) { - break; - } - - String variableName = EcmaScript.toString(stack.peek(2)); - result.defines.add(variableName); - } else if (action instanceof ActionGetVariable) { - if (stack.isEmpty()) { - break; - } - - String variableName = stack.peek().toString(); - if (!localData.localVariables.containsKey(variableName) - && (!allowGetUninitializedVariables || !isFakeName(variableName))) { - break; - } - } - - if (action instanceof ActionCallFunction) { - if (stack.size() < 2) { - break; - } - - String functionName = stack.pop().toString(); - long numArgs = EcmaScript.toUint32(stack.pop()); - if (numArgs == 0) { - if (fakeFunctions != null && fakeFunctions.containsKey(functionName)) { - stack.push(fakeFunctions.get(functionName)); - } else { - break; - } - } else { - break; - } - } else if (!action.execute(localData)) { - break; - } - - if (!useVariables && (action instanceof ActionDefineLocal - || action instanceof ActionGetVariable - || action instanceof ActionSetVariable - || action instanceof ActionConstantPool - || action instanceof ActionCallFunction - || action instanceof ActionReturn - || action instanceof ActionEnd)) { - break; - } - - if (!(action instanceof ActionPush - || action instanceof ActionPushDuplicate - //|| action instanceof ActionPop - || action instanceof ActionAsciiToChar - || action instanceof ActionCharToAscii - || action instanceof ActionDecrement - || action instanceof ActionIncrement - || action instanceof ActionNot - || action instanceof ActionToInteger - || action instanceof ActionToNumber - || action instanceof ActionToString - || action instanceof ActionTypeOf - || action instanceof ActionStringLength - || action instanceof ActionMBAsciiToChar - || action instanceof ActionMBStringLength - || action instanceof ActionAnd - || action instanceof ActionAdd - || action instanceof ActionAdd2 - || action instanceof ActionBitAnd - || action instanceof ActionBitLShift - || action instanceof ActionBitOr - || action instanceof ActionBitRShift - || action instanceof ActionBitURShift - || action instanceof ActionBitXor - || action instanceof ActionDivide - || action instanceof ActionEquals - || action instanceof ActionEquals2 - || action instanceof ActionGreater - || action instanceof ActionLess - || action instanceof ActionLess2 - || action instanceof ActionModulo - || action instanceof ActionMultiply - || action instanceof ActionOr - || action instanceof ActionStringAdd - || action instanceof ActionStringEquals - || action instanceof ActionStringGreater - || action instanceof ActionStringLess - || action instanceof ActionSubtract - || action instanceof ActionIf - || action instanceof ActionJump - || action instanceof ActionDefineLocal - || action instanceof ActionGetVariable - || action instanceof ActionSetVariable - || action instanceof ActionConstantPool - || action instanceof ActionCallFunction - || action instanceof ActionReturn - || action instanceof ActionEnd)) { - break; - } - - if (action instanceof ActionPush) { - ActionPush push = (ActionPush) action; - boolean ok = true; - instructionsProcessed += push.values.size() - 1; - for (Object value : push.values) { - if ((constantPool == null && value instanceof ConstantIndex) || value instanceof RegisterNumber) { - ok = false; - break; - } - } - if (!ok) { - break; - } - } - - boolean isEnd = action instanceof ActionEnd; - if (!isEnd) { - ActionItem prevItem = item; - boolean prevJumpedHere = jumpedHere; - if (localData.jump != null) { - item = item.getJumpTarget(); - jumpedHere = true; - localData.jump = null; - } else { - item = item.next; - jumpedHere = false; - } - - instructionsProcessed++; - if (!skippedInstructionsUnknown) { - boolean isJumpTarget = prevItem.isJumpTarget() || prevItem.prev.isContainerLastAction(); - if (isJumpTarget) { - if (prevJumpedHere && prevItem.jumpsHereSize() == 1) { - isJumpTarget = false; - } - } - - if (isJumpTarget) { - skippedInstructionsUnknown = true; - } else { - skippedInstructions++; - if (action instanceof ActionIf) { - skippedInstructionsUnknown = true; - } - } - - if (jumpedHere) { - skippedInstructionsUnknown = true; - } - } - } - - if (isEnd || (stack.allItemsFixed() && (action instanceof ActionIf || (jumpFound && action instanceof ActionJump) || action instanceof ActionSetVariable))) { - result.item = item; - result.instructionsProcessed = instructionsProcessed; - result.minSkippedInstructions = skippedInstructions; - result.maxSkippedInstructions = skippedInstructionsUnknown ? Integer.MAX_VALUE : skippedInstructions; - result.constantPool = lastConstantPool; - result.variables.clear(); - for (String variableName : localData.localVariables.keySet()) { - Object value = localData.localVariables.get(variableName); - result.variables.put(variableName, value); - } - result.stack.clear(); - result.stack.addAll(stack); - - if (isEnd) { - break; - } - } - - if (action instanceof ActionReturn) { - result.resultValue = localData.returnValue; - break; - } - - if (action instanceof ActionJump) { - jumpFound = true; - } - } - } - - @Override - public void actionTreeCreated(List tree, SWF swf) { - if (tree.size() > 0) { - GraphTargetItem firstItem = tree.get(0); - if (firstItem instanceof PushItem && firstItem.value instanceof FalseItem) { - tree.remove(0); - } - } - } - - class ExecutionResult { - - public ActionItem item; - - public int instructionsProcessed; - - public int minSkippedInstructions; - - public int maxSkippedInstructions; - - public Stack stack = new Stack<>(); - - public Object resultValue; - - public ActionConstantPool constantPool; - - public Map variables = new LinkedHashMap<>(); - - public Set defines = new HashSet<>(); - - public void clear() { - item = null; - instructionsProcessed = 0; - minSkippedInstructions = 0; - maxSkippedInstructions = 0; - stack.clear(); - resultValue = null; - constantPool = null; - variables.clear(); - defines.clear(); - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS, All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. + */ +package com.jpexs.decompiler.flash.action.deobfuscation; + +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.action.Action; +import com.jpexs.decompiler.flash.action.ActionList; +import com.jpexs.decompiler.flash.action.ActionListReader; +import com.jpexs.decompiler.flash.action.LocalDataArea; +import com.jpexs.decompiler.flash.action.Stage; +import com.jpexs.decompiler.flash.action.fastactionlist.ActionItem; +import com.jpexs.decompiler.flash.action.fastactionlist.FastActionList; +import com.jpexs.decompiler.flash.action.fastactionlist.FastActionListIterator; +import com.jpexs.decompiler.flash.action.special.ActionEnd; +import com.jpexs.decompiler.flash.action.swf4.ActionAdd; +import com.jpexs.decompiler.flash.action.swf4.ActionAnd; +import com.jpexs.decompiler.flash.action.swf4.ActionAsciiToChar; +import com.jpexs.decompiler.flash.action.swf4.ActionCharToAscii; +import com.jpexs.decompiler.flash.action.swf4.ActionDivide; +import com.jpexs.decompiler.flash.action.swf4.ActionEquals; +import com.jpexs.decompiler.flash.action.swf4.ActionGetTime; +import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; +import com.jpexs.decompiler.flash.action.swf4.ActionIf; +import com.jpexs.decompiler.flash.action.swf4.ActionJump; +import com.jpexs.decompiler.flash.action.swf4.ActionLess; +import com.jpexs.decompiler.flash.action.swf4.ActionMBAsciiToChar; +import com.jpexs.decompiler.flash.action.swf4.ActionMBStringLength; +import com.jpexs.decompiler.flash.action.swf4.ActionMultiply; +import com.jpexs.decompiler.flash.action.swf4.ActionNot; +import com.jpexs.decompiler.flash.action.swf4.ActionOr; +import com.jpexs.decompiler.flash.action.swf4.ActionPush; +import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; +import com.jpexs.decompiler.flash.action.swf4.ActionStringAdd; +import com.jpexs.decompiler.flash.action.swf4.ActionStringEquals; +import com.jpexs.decompiler.flash.action.swf4.ActionStringLength; +import com.jpexs.decompiler.flash.action.swf4.ActionStringLess; +import com.jpexs.decompiler.flash.action.swf4.ActionSubtract; +import com.jpexs.decompiler.flash.action.swf4.ActionToInteger; +import com.jpexs.decompiler.flash.action.swf4.ConstantIndex; +import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; +import com.jpexs.decompiler.flash.action.swf5.ActionAdd2; +import com.jpexs.decompiler.flash.action.swf5.ActionBitAnd; +import com.jpexs.decompiler.flash.action.swf5.ActionBitLShift; +import com.jpexs.decompiler.flash.action.swf5.ActionBitOr; +import com.jpexs.decompiler.flash.action.swf5.ActionBitRShift; +import com.jpexs.decompiler.flash.action.swf5.ActionBitURShift; +import com.jpexs.decompiler.flash.action.swf5.ActionBitXor; +import com.jpexs.decompiler.flash.action.swf5.ActionCallFunction; +import com.jpexs.decompiler.flash.action.swf5.ActionConstantPool; +import com.jpexs.decompiler.flash.action.swf5.ActionDecrement; +import com.jpexs.decompiler.flash.action.swf5.ActionDefineFunction; +import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; +import com.jpexs.decompiler.flash.action.swf5.ActionEquals2; +import com.jpexs.decompiler.flash.action.swf5.ActionIncrement; +import com.jpexs.decompiler.flash.action.swf5.ActionLess2; +import com.jpexs.decompiler.flash.action.swf5.ActionModulo; +import com.jpexs.decompiler.flash.action.swf5.ActionPushDuplicate; +import com.jpexs.decompiler.flash.action.swf5.ActionReturn; +import com.jpexs.decompiler.flash.action.swf5.ActionToNumber; +import com.jpexs.decompiler.flash.action.swf5.ActionToString; +import com.jpexs.decompiler.flash.action.swf5.ActionTypeOf; +import com.jpexs.decompiler.flash.action.swf6.ActionGreater; +import com.jpexs.decompiler.flash.action.swf6.ActionStringGreater; +import com.jpexs.decompiler.flash.ecma.EcmaScript; +import com.jpexs.decompiler.flash.helpers.SWFDecompilerAdapter; +import com.jpexs.decompiler.flash.helpers.collections.FixItemCounterStack; +import com.jpexs.decompiler.graph.GraphTargetItem; +import com.jpexs.decompiler.graph.model.FalseItem; +import com.jpexs.decompiler.graph.model.PushItem; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Stack; + +/** + * + * @author JPEXS + */ +public class ActionDeobfuscator extends SWFDecompilerAdapter { + + private final int executionLimit = 5000; + + @Override + public void actionListParsed(ActionList actions, SWF swf) throws InterruptedException { + FastActionList fastActions = new FastActionList(actions); + fastActions.removeUnknownActions(); + fastActions.expandPushes(); + Map fakeFunctions = getFakeFunctionResults(fastActions); + boolean changed = true; + boolean useVariables = false; + while (changed) { + changed = removeGetTimes(fastActions); + changed |= removeObfuscationIfs(fastActions, fakeFunctions, useVariables); + changed |= removeObfuscatedUnusedVariables(fastActions); + + actions.setActions(fastActions.toActionList()); + changed |= ActionListReader.fixConstantPools(null, actions); + if (!changed && !useVariables) { + useVariables = true; + changed = true; + } + } + } + + private boolean removeGetTimes(FastActionList actions) { + if (actions.isEmpty()) { + return false; + } + + boolean ret = false; + boolean changed = true; + int getTimeCount = 1; + while (changed && getTimeCount > 0) { + changed = false; + actions.removeUnreachableActions(); + actions.removeZeroJumps(); + getTimeCount = 0; + + // GetTime, If => Jump, assume GetTime > 0 + FastActionListIterator iterator = actions.iterator(); + while (iterator.hasNext()) { + Action a = iterator.next().action; + ActionItem a2Item = iterator.peek(0); + Action a2 = a2Item.action; + boolean isGetTime = a instanceof ActionGetTime; + if (isGetTime) { + getTimeCount++; + } + + if (isGetTime && a2 instanceof ActionIf) { + ActionJump jump = new ActionJump(0); + ActionItem jumpItem = new ActionItem(jump); + jumpItem.setJumpTarget(a2Item.getJumpTarget()); + iterator.remove(); // GetTime + iterator.next(); + iterator.remove(); // If + iterator.add(jumpItem); // replace If with Jump + changed = true; + ret = true; + getTimeCount--; + } + } + + if (!changed && getTimeCount > 0) { + // GetTime, Increment If => Jump + iterator = actions.iterator(); + while (iterator.hasNext()) { + Action a = iterator.next().action; + Action a1 = iterator.peek(0).action; + ActionItem a2Item = iterator.peek(1); + Action a2 = a2Item.action; + if (a instanceof ActionGetTime && a1 instanceof ActionIncrement && a2 instanceof ActionIf) { + ActionJump jump = new ActionJump(0); + ActionItem jumpItem = new ActionItem(jump); + jumpItem.setJumpTarget(a2Item.getJumpTarget()); + iterator.remove(); // GetTime + iterator.next(); + iterator.remove(); // Increment + iterator.next(); + iterator.remove(); // If + iterator.add(jumpItem); // replace If with Jump + changed = true; + ret = true; + } + } + } + } + + return ret; + } + + private boolean removeObfuscationIfs(FastActionList actions, Map fakeFunctions, boolean useVariables) throws InterruptedException { + if (actions.isEmpty()) { + return false; + } + + boolean ret = false; + actions.removeUnreachableActions(); + actions.removeZeroJumps(); + + ActionConstantPool cPool = getConstantPool(actions); + LocalDataArea localData = new LocalDataArea(new Stage(null), true); + localData.stack = new FixItemCounterStack(); + ExecutionResult result = new ExecutionResult(); + FastActionListIterator iterator = actions.iterator(); + boolean first = true; + while (iterator.hasNext()) { + if (Thread.currentThread().isInterrupted()) { + throw new InterruptedException(); + } + + ActionItem actionItem = iterator.next(); + result.clear(); + localData.clear(); + /*ActionItem container = actions.getContainer(actionItem); + actions.setExcludedFlags(false); + if (container != null) { + markContainerActions(container, actions); + }*/ + + executeActions(actionItem, localData, cPool, result, fakeFunctions, useVariables, first); + + if (result.item != null && result.resultValue == null) { + int newIstructionCount = 1 /*jump */ + result.stack.size(); + if (result.constantPool != null) { + newIstructionCount++; + } + + newIstructionCount += 3 * result.variables.size(); + /* 2x Push + Set or Define */ + + boolean allValueValid = true; + for (Object value : result.variables.values()) { + if (!ActionPush.isValidValue(value)) { + allValueValid = false; + break; + } + } + + if (allValueValid && newIstructionCount < result.maxSkippedInstructions) { + int unreachableCount = result.minSkippedInstructions; + if (newIstructionCount >= result.minSkippedInstructions) { + unreachableCount = actions.getUnreachableActionCount(actionItem, result.item); + } + + if (newIstructionCount < unreachableCount) { + if (result.stack.isEmpty() && result.variables.isEmpty() && result.constantPool == null && actionItem.action instanceof ActionJump) { + actionItem.setJumpTarget(result.item); + } else { + ActionItem prevActionItem = actionItem.prev; + if (result.constantPool != null) { + ActionConstantPool constantPool2 = new ActionConstantPool(new ArrayList<>(result.constantPool.constantPool)); + ActionItem constantPoolItem = new ActionItem(constantPool2); + iterator.addBefore(constantPoolItem); + } + + for (String variableName : result.variables.keySet()) { + Object value = result.variables.get(variableName); + ActionPush push = new ActionPush(variableName); + ActionItem pushItem = new ActionItem(push); + iterator.addBefore(pushItem); + push = new ActionPush(value); + pushItem = new ActionItem(push); + iterator.addBefore(pushItem); + + if (result.defines.contains(variableName)) { + ActionDefineLocal defineLocal = new ActionDefineLocal(); + ActionItem defineLocalItem = new ActionItem(defineLocal); + iterator.addBefore(defineLocalItem); + } else { + ActionSetVariable setVariable = new ActionSetVariable(); + ActionItem setVariableItem = new ActionItem(setVariable); + iterator.addBefore(setVariableItem); + } + } + + if (!result.stack.isEmpty()) { + for (Object obj : result.stack) { + ActionPush push = new ActionPush(obj); + ActionItem pushItem = new ActionItem(push); + iterator.addBefore(pushItem); + } + } + + ActionJump jump = new ActionJump(0); + ActionItem jumpItem = new ActionItem(jump); + jumpItem.setJumpTarget(result.item); + iterator.addBefore(jumpItem); + + actions.replaceJumpTargets(actionItem, prevActionItem.next); + } + + ActionItem prevItem = actionItem.prev; + + actions.removeUnreachableActions(); + actions.removeZeroJumps(); + + iterator.setCurrent(prevItem.next.next); + ret = true; + } + } + } + + first = false; + } + + //actions.setExcludedFlags(false); + return ret; + } + + private boolean removeObfuscatedUnusedVariables(FastActionList actions) throws InterruptedException { + if (actions.isEmpty()) { + return false; + } + + Map pushValues = getPushValues(actions); + + boolean ret = false; + + // Push, Push DefineLocal => remove when first pushed value is obfuscated and never used + FastActionListIterator iterator = actions.iterator(); + while (iterator.hasNext()) { + Action a = iterator.next().action; + Action a1 = iterator.peek(0).action; + Action a2 = iterator.peek(1).action; + if (a instanceof ActionPush && a1 instanceof ActionPush && a2 instanceof ActionDefineLocal) { + ActionPush pushName = (ActionPush) a; + ActionPush pushValue = (ActionPush) a1; + if (pushName.values.size() == 1 && pushValue.values.size() == 1) { + String strName = EcmaScript.toString(pushName.values.get(0), pushName.constantPool); + if (isFakeName(strName) && pushValues.get(strName) == 1) { + iterator.remove(); // Push name + iterator.next(); + iterator.remove(); // Push value + iterator.next(); + iterator.remove(); // DefineLocal + ret = true; + } + } + } + } + + return ret; + } + + private Map getPushValues(FastActionList actions) { + Map ret = new HashMap<>(); + for (ActionItem actionItem : actions) { + Action action = actionItem.action; + if (action instanceof ActionPush) { + ActionPush push = (ActionPush) action; + for (int i = 0; i < push.values.size(); i++) { + String str = EcmaScript.toString(push.values.get(i), push.constantPool); + Integer cnt = ret.get(str); + cnt = cnt == null ? 1 : cnt + 1; + ret.put(str, cnt); + } + } + } + + return ret; + } + + private ActionConstantPool getConstantPool(FastActionList actions) { + ActionConstantPool cPool = null; + for (ActionItem actionItem : actions) { + Action action = actionItem.action; + if (action instanceof ActionConstantPool) { + if (cPool != null) { + // there are multiple constant pools + return null; + } + cPool = (ActionConstantPool) action; + } + } + return cPool; + } + + private Map getFakeFunctionResults(FastActionList actions) throws InterruptedException { + /* + DefineFunction "fakeName" 0 { + Push 1777 + Return + } + */ + + Map results = new HashMap<>(); + + LocalDataArea localData = new LocalDataArea(new Stage(null)); + localData.stack = new FixItemCounterStack(); + ExecutionResult result = new ExecutionResult(); + for (ActionItem actionItem : actions) { + Action action = actionItem.action; + if (action instanceof ActionDefineFunction) { + ActionDefineFunction def = (ActionDefineFunction) action; + if (def.paramNames.isEmpty() && def.functionName.length() > 0) { + // remove funcion only when the function name contains only non printable characters + if (!isFakeName(def.functionName)) { + continue; + } + + result.clear(); + if (markContainerActions(actionItem, actions)) { + localData.clear(); + executeActions(actionItem.next, localData, null, result, null, true, false); + if (result.resultValue != null) { + results.put(def.functionName, result.resultValue); + actions.removeIncludedActions(); + } + } + } + } + } + + actions.setExcludedFlags(false); + return results; + } + + private boolean markContainerActions(ActionItem actionItem, FastActionList actions) { + ActionItem lastActionItem = actionItem.getContainerLastActions().get(0); + // has at least 1 inner item + if (lastActionItem != actionItem) { + actions.setExcludedFlags(true); + ActionItem actionItem2 = actionItem; + do { + actionItem2.excluded = false; + actionItem2 = actionItem2.next; + } while (actionItem2 != lastActionItem && actionItem2 != actions.last()); + actionItem2.excluded = false; + + return true; + } + + return false; + } + + protected boolean isFakeName(String name) { + return !IdentifiersDeobfuscation.isValidName(false, name); + } + + private void executeActions(ActionItem item, LocalDataArea localData, ActionConstantPool constantPool, ExecutionResult result, Map fakeFunctions, boolean useVariables, boolean allowGetUninitializedVariables) throws InterruptedException { + if (item.action.isExit()) { + return; + } + + FixItemCounterStack stack = (FixItemCounterStack) localData.stack; + int instructionsProcessed = 0; + int skippedInstructions = 0; + ActionConstantPool lastConstantPool = null; + + boolean skippedInstructionsUnknown = false; + boolean jumpedHere = true; + boolean jumpFound = false; + while (true) { + if (item.isExcluded()) { + break; + } + + if (instructionsProcessed > executionLimit) { + break; + } + + Action action = item.action; + + /*System.out.print(action.getASMSource(actions, new ArrayList(), ScriptExportMode.PCODE)); + for (int j = 0; j < stack.size(); j++) { + System.out.print(" '" + stack.get(j).getResult() + "'"); + } + System.out.println();*/ + if (action instanceof ActionConstantPool) { + lastConstantPool = (ActionConstantPool) action; + } else if (action instanceof ActionDefineLocal) { + if (stack.size() < 2) { + break; + } + + String variableName = EcmaScript.toString(stack.peek(2)); + result.defines.add(variableName); + } else if (action instanceof ActionGetVariable) { + if (stack.isEmpty()) { + break; + } + + String variableName = stack.peek().toString(); + if (!localData.localVariables.containsKey(variableName) + && (!allowGetUninitializedVariables || !isFakeName(variableName))) { + break; + } + } + + if (action instanceof ActionCallFunction) { + if (stack.size() < 2) { + break; + } + + String functionName = stack.pop().toString(); + long numArgs = EcmaScript.toUint32(stack.pop()); + if (numArgs == 0) { + if (fakeFunctions != null && fakeFunctions.containsKey(functionName)) { + stack.push(fakeFunctions.get(functionName)); + } else { + break; + } + } else { + break; + } + } else if (!action.execute(localData)) { + break; + } + + if (!useVariables && (action instanceof ActionDefineLocal + || action instanceof ActionGetVariable + || action instanceof ActionSetVariable + || action instanceof ActionConstantPool + || action instanceof ActionCallFunction + || action instanceof ActionReturn + || action instanceof ActionEnd)) { + break; + } + + if (!(action instanceof ActionPush + || action instanceof ActionPushDuplicate + //|| action instanceof ActionPop + || action instanceof ActionAsciiToChar + || action instanceof ActionCharToAscii + || action instanceof ActionDecrement + || action instanceof ActionIncrement + || action instanceof ActionNot + || action instanceof ActionToInteger + || action instanceof ActionToNumber + || action instanceof ActionToString + || action instanceof ActionTypeOf + || action instanceof ActionStringLength + || action instanceof ActionMBAsciiToChar + || action instanceof ActionMBStringLength + || action instanceof ActionAnd + || action instanceof ActionAdd + || action instanceof ActionAdd2 + || action instanceof ActionBitAnd + || action instanceof ActionBitLShift + || action instanceof ActionBitOr + || action instanceof ActionBitRShift + || action instanceof ActionBitURShift + || action instanceof ActionBitXor + || action instanceof ActionDivide + || action instanceof ActionEquals + || action instanceof ActionEquals2 + || action instanceof ActionGreater + || action instanceof ActionLess + || action instanceof ActionLess2 + || action instanceof ActionModulo + || action instanceof ActionMultiply + || action instanceof ActionOr + || action instanceof ActionStringAdd + || action instanceof ActionStringEquals + || action instanceof ActionStringGreater + || action instanceof ActionStringLess + || action instanceof ActionSubtract + || action instanceof ActionIf + || action instanceof ActionJump + || action instanceof ActionDefineLocal + || action instanceof ActionGetVariable + || action instanceof ActionSetVariable + || action instanceof ActionConstantPool + || action instanceof ActionCallFunction + || action instanceof ActionReturn + || action instanceof ActionEnd)) { + break; + } + + if (action instanceof ActionPush) { + ActionPush push = (ActionPush) action; + boolean ok = true; + instructionsProcessed += push.values.size() - 1; + for (Object value : push.values) { + if ((constantPool == null && value instanceof ConstantIndex) || value instanceof RegisterNumber) { + ok = false; + break; + } + } + if (!ok) { + break; + } + } + + boolean isEnd = action instanceof ActionEnd; + if (!isEnd) { + ActionItem prevItem = item; + boolean prevJumpedHere = jumpedHere; + if (localData.jump != null) { + item = item.getJumpTarget(); + jumpedHere = true; + localData.jump = null; + } else { + item = item.next; + jumpedHere = false; + } + + instructionsProcessed++; + if (!skippedInstructionsUnknown) { + boolean isJumpTarget = prevItem.isJumpTarget() || prevItem.prev.isContainerLastAction(); + if (isJumpTarget) { + if (prevJumpedHere && prevItem.jumpsHereSize() == 1) { + isJumpTarget = false; + } + } + + if (isJumpTarget) { + skippedInstructionsUnknown = true; + } else { + skippedInstructions++; + if (action instanceof ActionIf) { + skippedInstructionsUnknown = true; + } + } + + if (jumpedHere) { + skippedInstructionsUnknown = true; + } + } + } + + if (isEnd || (stack.allItemsFixed() && (action instanceof ActionIf || (jumpFound && action instanceof ActionJump) || action instanceof ActionSetVariable))) { + result.item = item; + result.instructionsProcessed = instructionsProcessed; + result.minSkippedInstructions = skippedInstructions; + result.maxSkippedInstructions = skippedInstructionsUnknown ? Integer.MAX_VALUE : skippedInstructions; + result.constantPool = lastConstantPool; + result.variables.clear(); + for (String variableName : localData.localVariables.keySet()) { + Object value = localData.localVariables.get(variableName); + result.variables.put(variableName, value); + } + result.stack.clear(); + result.stack.addAll(stack); + + if (isEnd) { + break; + } + } + + if (action instanceof ActionReturn) { + result.resultValue = localData.returnValue; + break; + } + + if (action instanceof ActionJump) { + jumpFound = true; + } + } + } + + @Override + public void actionTreeCreated(List tree, SWF swf) { + if (tree.size() > 0) { + GraphTargetItem firstItem = tree.get(0); + if (firstItem instanceof PushItem && firstItem.value instanceof FalseItem) { + tree.remove(0); + } + } + } + + class ExecutionResult { + + public ActionItem item; + + public int instructionsProcessed; + + public int minSkippedInstructions; + + public int maxSkippedInstructions; + + public Stack stack = new Stack<>(); + + public Object resultValue; + + public ActionConstantPool constantPool; + + public Map variables = new LinkedHashMap<>(); + + public Set defines = new HashSet<>(); + + public void clear() { + item = null; + instructionsProcessed = 0; + minSkippedInstructions = 0; + maxSkippedInstructions = 0; + stack.clear(); + resultValue = null; + constantPool = null; + variables.clear(); + defines.clear(); + } + } +} From 13e2391a268812d91710c633f1b16fae88a338c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 19:00:44 +0100 Subject: [PATCH 052/114] update changelog --- CHANGELOG.md | 4573 +++++++++++++++++++++++++------------------------- 1 file changed, 2287 insertions(+), 2286 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32b1f67ba..375c18360 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2287 +1,2288 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [Unreleased] -### Added -- [#1240] AS search using multiple threads when parallel speedup is enabled -- [#1308] Search by all P-code files in AS3 -- [#1333] Exporting sprites as swf files -- [#1365] Allow to configure all types of configuration settings from command line -- [#1369] Allow zoom in sprite (and button) export - -### Fixed -- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter -- [#1343] AS 1/2 direct editation critical bug -- [#1348] Cannot properly export frame with cyrillic symbols to SVG -- [#1354] Various FLA export problem fixes -- [#1367] Raw edit conditional type fix. -- [#1401] SVG export: duplicate pattern IDs fixed -- [#1402] SVG export: certain font characters not exported properly fixed - -## [10.0.0] - 2016-12-24 -### Added -- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only -- optional AS3 direct editation with Flex SDK -- AS3 p-code editing - metadata read/write support -- AS3 p-code editing - end of the block command like in RABCDasm -- AS3 p-code editing - popup docs for more than instructions -- Debugger - New columns for variable details - scope, flags, trait -- Debugger - Add watch feature -- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases -- Deobfuscation Tool - Fix colliding trait/classes via toolbar command -- Auto rename identifiers option now fixes colliding trait/classes aswell -- [#1254] FLA export - detecting scripts on AS3 timeline -- [#907] FFDec Library JAR file has version inside it. -- [#1311], [#1313] actionScript source font size -- Display warning when library version and GUI version mismatch -- Changelog file -- [#1308] Search by all P-code files (AS 1/2 only) - -### Changed -- [#1189] AS3 - sort imports to have same order always -- GUI: AS3 P-code header show actual trait type and method type -- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" -- Set advance values button has confirm dialog with information -- [#1274] Linux package no longer requires Oracle Java only -- Library now packaged inside ZIP file - -### Fixed -- P-code docs formatting fix -- Export dialog - handling sprite and SWF frames correctly -- [#1275] debugger - show local variables fixes -- AS3 p-code editing - popup docs correctly displayed when label on line start -- [#1278] replacing DefineBits error -- [#1281] DefineFont 2/3 getting character advance value when replacing fix -- Set advance values button - Do not set advance if the char cannot be displayed in source font -- AS3 Goto declaration for single character names -- Identifier renaming for top level classes -- AS3 direct editation not correctly saving local register names -- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir -- Mac OS X installer fix (.pkg) -- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers -- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix -- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes -- [#1302] Callpropvoid instruction docblock not correct -- [#1309] recent files not getting updates -- [#1312] faster colliding usages finder -- [#1303] garbled text when exporting frame with text -- [#1314] user interface: button order -- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) -- [#1323] Audio playback fails - -## [9.0.0] - 2016-08-12 -### Added -- Instance metadata (AMF3) editing in PlaceObject4 -- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) -- [#1171] Export stroke scale to FLA -- FLA export - check invalid unicode characters -- [#1170] Extract from memory in commandline -- Reload one vs Reload all buttons -- ABC: Float and Float4 support -- AS3 p-code instruction documentation in GUI -- [#1241] Settings to show original bytes in hex view -- Search in dump view -- Jump to resources view from hex view -- Show warning on 32bit JRE - -### Changed -- [#1162] improved opening loaded SWF files -- Flash Viewer - skip frames when not on time -- [#1199] Automatically import alpha channel to JPEG3/4 from PNG - -### Fixed -- [#1151] Filters on texts fixed -- [#1128] Adding characters to font fixed (FontAlignZones not removed) -- [#1163] Clicking open->file makes program buggy -- Refresh tree after raw edit -- [#1172] Text double escape fix -- [#1174] Change language fix -- some AS2 deobfuscation fixes -- [#1183] Index out of bounds fix -- Implicit coersion on binary/unary opfix -- debugger: corect display variable values through getters -- Multiple XLF export fix -- [#1193] FLA export - text tag advance fix, one layer shape fix -- [#1193] FLA export - smoothed image detection, export raw JPEG data -- [#1193] Export space character to TTF correctly -- [#1200] Previous search text selected when quick find -- Flash viewer: aspect ratio on startup fix -- [#1198] Saving trait slot const value -- Zoom parameter commandline fixed -- [#1205] clipping fixed -- [#1194] Wrong sound effects in FLA -- [#1210] Frame Export fix -- Improved/fixed go to declaration in AS3 -- [#1217] PCode window not in same position as AS -- Hide memor search on non windows platform -- [#1244] Incorrect showing of NOP instructions -- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back -- [#1241] File content is different from hex view -- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont -- [#1236] won't open fixed -- [#1251] SWF not same after export XML and import back -- [#1265] Error during export -- [#1268] Font export - Using second glyph when two glyphs for one character found -- [#1268] GFX compacted font - fixed advance values on export - -## [8.0.1] - 2016-02-20 -### Changed -- FFDec debug tab in advanced settings moved to other tabs - -### Fixed -- [#1161] AS1/2 deobfuscation broken -- AS1/2 Simplify expressions fix - -## [8.0.0] - 2016-02-18 -### Added -- Debugger - AS1/2 Show registers -- Debugger - display variables in the tree structure -- Debugger - set value of variable -- Debugger - AS1/2 View constantpool -- Debugger - P-code level debugging for both AS1/2 and AS3 -- Basic SVG import for shapes -- Simplify expression setting -- [#1118] Loading characters through ImportAssets - show as readonly -- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 -- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) -- [#1121] Ability to save binary data by its name -- [#1052] Add object to existing frame -- Allow adding tag to main timeline -- AS1/2: Ctrl+click to declaration of variables, registers -- Allow trait specification in pcode import -- Icons for tag types in Dump view -- Show error message when a text tag is invalid (glyph index problem) -- AS3 direct editation - store local register names in debug info = allow to rename them - -### Changed -- New application icon and splash screen -- [#1145] AS3 better declaration type detection, better convert_x instruction handling -- Binary export - use .swf extension for swf files -- Better tree labels in generic tag editor (Raw edit) -- [#758] Allow zooming more than preview area in internal viewer - -### Fixed -- [#1096] FLA export - pretty print -- [#1104] AS1/2/3 Script Importat not working -- [#1107] Text Offset Incorrect fixed -- [#1106] New Shapes replace function fix -- [#1113] It takes too long to switch between rendered sprite -- [#1075] Lenght of DefineText in some cases -- [#1127] autoRenameIdentifiers is not supported in CLI mode -- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed -- [#1103] Foreach variables fixes -- AS3 Switch fixes -- Default clause position in switch -- [#1133] Incorrect frame order for nested sprite -- [#1135] Handle try "to" in p-code correctly -- Font wideOffsets,wideCodes fixed in DefineFont2/3 -- AS3: super method call -- [#1138] All exported videos are the same file which may be broken -- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages -- [#1137] running flashplayer(debugger) executable in Linux/MacOs -- [#1144] Command line argument renameInvalidIdentifiers -- [#1145] double not (!!) not removed -- [#1147] Sprite is exported incorrectly -- [#1148] handing end of stream exception in abc reader, loc exception -- [#1152] Font info tag modified tag was not set => saved swf was corrupt -- [#1154] Some 32bit JRE problems - program won't start -- [#1145] Correct precedence handling on binary operators -- [#116] not resolving unusual tags in DefineSprite - -## [7.1.2] - 2015-12-03 -### Fixed -- AS3 debugger start halt fix -- AS1/2 debugger fix on nondebug enabled SWFs -- AS1/2 debugger fix for functions -- Debug menu item enabled fix -- AS3 local reg index fix -- Advanced settings calendar -- AVM2 instructions in hex view -- [#1070] Incorrect switch decompilation -- [#1098] Import XML fix - -## [7.1.1] - 2015-11-23 -### Fixed -- Critical debugger fix - widelines - -## [7.1.0] - 2015-11-23 -### Added -- AS1/2 debugger -- Breakpoint/IP marker on line beginning - -### Changed -- Starting debugger on demand -- Installer message about playerglobal is only warning now - -### Fixed -- [#1033], [#1083] AS3 deobfuscation issues -- [#1091] AS 1/2 direct editation saving - -## [7.0.1] - 2015-11-18 -### Fixed -- Debugger: Adding breakpoint if script initializer not displayed - -## [7.0.0] - 2015-11-18 -### Added -- AS3 Debugger - breakpoints, stepping, show variables -- Faster AS3 direct editation - -### Changed -- Better Configuration of flashplayer paths - -### Removed -- Removed old "debugger" buttons -- Removed search from browsers cache - inactual code - -### Fixed -- Many AS3 direct editation related bugs -- [#1076] export fix - -## [6.1.1] - 2015-10-30 -### Fixed -- Deobfuscate AS3 metadata -- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix -- [#1063] AS3 direct edit - script initializer fix, generating method names -- XML export/import fixes -- [#1019] Namespace imports fix -- AVM2 code execution fix -- [#1016] AS3 direct editation fixes -- [#1010] AS2 direct editation - internal and override is not a reserved word -- [#1008] pushshort instruction diassembly -- [#1004] this/super can be AS1/2 variable -- [#933] AS3 allow numbers as object literal keys - -## [6.1.0] - 2015-10-26 -### Added -- Open other loaded SWFs during playback (useful for loaders) -- Export uncompressed data from dump tree -- Print performance statistics from commandline -- [#1062] Editing/displaying script initializers -- Enable debugging on SWF file (commandline) - -### Changed -- Faster syntax highlighting -- Better AS1/2 deobfuscator -- [#418] AS3 deobfuscator improved - -### Fixed -- AS call method fix (first parameter is "this") -- [#1047] open all scripts folders -- [#812] decompile fail -- [#1056] deltaY missing when adding a new StraightEdgeRecord -- [#1057] Editing as in editor results in package name moving -- [#991] GUI export -- [#689] Ignore Case not correctly toggled -- [#1060] reversed and/or detection in some cases -- [#1037] isXML call - -## [6.0.2] - 2015-09-12 -### Added -- AS3: Display and direct edit trait Metadata -- Allow to specify tag type on image or shape import -- Convert image tags from commandline -- [#489] Hex decode very large integers -- Add new tags without show empty folders -- Dependent characters in basic tag info -- [#1007] replace bytearray in raw editing -- Italian translation - -### Changed -- AS2 parser - add string to constant pool if there is not enough space -- [#1044] AS2 - order scripts by physical location, name by offset - -### Removed -- Deprecated commandline parameters removed - -### Fixed -- JNA problems on some JDKs -- [#947] Marklevels errors ignored 17a94b7 -- [#953] Mac application permission fix (maybe) -- [#954] IndexOutOfBounds fix -- [#950] AddTrait setting modified fix -- [#945] AS1/2 directeditation fix - member named as global function -- [#957] AS1/2 IndexOutOfBounds fix -- [#956] Invalid jump offsets warning -- [#968] Sprites export with wrong coloring -- [#978] case sensitivity of filenames -- [#955] AS2 decompilation problem -- Image alpha fixes -- [#966] Go to document class -- [#991] scripts exporting -- [#999] save as fla -- [#1000] image export for malformed JPEG3 tags -- [#1017] store alchemy opcodes with wrong order -- [#1030] stack overflow fix - -## [6.0.1] - 2015-07-06 -### Added -- Special §§ instructions marked as red -- [#949] Replace alpha channel from commandline -- AS3 deobfuscation from commandline -- Option to ignore FlashCC/Alchemy packages - -### Changed -- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements - -### Fixed -- AS1/2 deobfuscation fixed -- [#952] Not loading SWF without extension - -## [6.0.0] - 2015-07-04 -### Added -- New AS3 deobfuscation method -- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... -- Allow reload FFDec when no SWF is opened -- [#858] Allow to set compression type in header -- [#905] Show codec details for sound items -- Better alchemy/DomainMemory instruction handling -- Better obfuscated names handling -- [#920] Export instance name to SVG -- [#921] Export html DefineEditText to SVG -- Open multiple files with drag and drop -- Better "multi packs" handling (Alchemy) -- SWF version 29 to flash player 18 mapping -- ImportAssets2 sha1 field -- [#924] Sprites to image from commandline -- AS1/2 direct editation big numbers fix -- Allow to add FILTERs and SHAPERECORDs in generic tag editor -- Enable close all menu when no swf is selected -- Restore modified state even when something goes wrong -- Some old tags added - -### Changed -- AS decompilation highly improved -- Better &&, || handling -- DoABCDefine renamed to DoABC2 -- Separated Sprite export settings - -### Deprecated -- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) - -### Fixed -- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. -- Few menu issues -- [#895] Correct handling CMYK JPEG -- [#884] AS direct edit assignment -- [#899] Show script after AS3 direct editation -- Some AS1/2 parser problems -- [#903] FLA export - fix for missing fontname, lastframe -- [#855] AS3 direct edit - for..in variable declaration fix -- [#850] Constant initialization for same multinames -- [#832] AS3 direct edit - other ABCs resolving fix -- [#904] Cannot export images -- [#910] Missing instructions -- Opening not existent files on restoring last session -- [#922] Edit text leading -- Put image before shape on shape replace -- [#916] Replacing Shape corrupts SWF -- JRE setup parameters fixed -- [#938] Parallel speedup limit fix - -## [5.3.0] - 2015-05-25 -### Added -- Generic tag editor: improved table editing (import/export assets tags, etc.) - -### Changed -- Classic (nonribbon) UI improved - has same items as Ribbon UI -- Icons improvements -- Disabling menu items when work in progress - -### Fixed -- [#897] Classic UI fix - -## [5.2.0] - 2015-05-22 -### Added -- UI8 editbox for swf version in header panel -- Basic tag information panel - -### Changed -- AS1/2: Shown only the constant pool(s) in pcode editor -- Do not allow to chage tag tree selection, when current tag is under editing -- Faster bitmap export -- Using less memory when playing sounds -- Error message changed when the opened file is not swf - -### Fixed -- [#470] panels size after resizing from/to full screen -- [#877] A small glitch after search in AS -- [#878] small glitch after saving P-code or swf file -- [#470] glitch -- [#845] If frame consist 2 DoAction then it imports only first one -- pdf export (when no frame exists) -- text rendering (alpha channel was ignored), -- bmp export (paddings when width%2==1) -- [#883] -dumpSWF option does not work anymore -- [#882] Canvas export border size -- [#760] Internal viewer line linear gradient fill is not working -- [#887] error on export a special swf's P-CODE -- Extensions of exported images fixed - -## [5.1.0] - 2015-05-04 -### Added -- Allow to copy/move multiple tags, and dependencies -- [#842] For reconstruction if debug line info present -- [#841] Loop control for sound preview -- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button -- Scrollbar added to fontpanel -- SWF header editor -- Configure what object types to export in exportdialog - -### Changed -- Better gif exporter -- [#772]: closing loading dialog now cancels the loading of the swf -- [#762] export pcode with different extension - -### Fixed -- CRITICAL: Update System Bug causing updates not working -- [#862] AS3 asm: do not read beyond return/throw instructions -- [#865], [#613]: ribbon prefered width fix -- [#868] export path fix, allow to export buttons -- [#865] TagTree font size problem on high resolution screens -- [#713],[#807] Installer for 4.0+ fails to access Adobe Website -- [#728] Large fonts, [#857] add scroll on DefineFont3 - -## [5.0.2] - 2015-04-18 -### Added -- Reopen last session - -### Fixed -- ffdec.sh file line endings fixed - -## [5.0.1] - 2015-04-18 -### Fixed -- [#860]: Opening bundle (zip, swc, any binary file) files fixed - -## [5.0.0] - 2015-04-18 -### Added -- Color skins -- [#824] Mac OS X package -- [#809] Move left,right buttons for DefineTexts using translatex parameter -- [#805] Editor mode for DefineTexts -- [#825] Hotkeys for next/previous DefineText -- Export/Import symbol classes/export asset tags -- Frame export progress -- [#737] Single file script export -- Displaying changed AS3 scripts in GUI as bold -- Additional character info tags placed under character node -- New icons for other tags (metadata,fileattributes,setbackground,place/remove) -- Metadata tag editor - -### Changed -- Default color skin altered -- [#350] Allow only one running instance (Windows only, can be turned off) -- SWFs in zip based bundles (SWC for example) can be modified & saved -- Performace improvements -- More compact SWF-XML format -- Marking changed parentnodes as bold too - -### Fixed -- [#814] Exporting with scale problem -- [#816] P-code not shown after class initializer trait selection -- [#835] Static initializer improvements -- AS3 direct editing - local register decrement fix -- AS3 direct editing - maintain register order/names -- [#836] AS1/2/3 Correct expression precedence handling -- AS3 preincrement -- [#848] Correct toggling text switches -- [#817] AS1/2 for..in variable declaration -- [#849] Attribute member -- [#852] Ignore case for russian characters -- [#837] AS3 try..finally without catch - -## [4.1.1] - 2015-02-21 -### Added -- Export/Import XML added to ribbon menu -- Few GUI enhancements -- Undo tag changes context menu - -### Changed -- Java 8 now required - -### Removed -- Removed support for Java below 8 - -### Fixed -- [#811] export ActionScript - -## [4.1.0] - 2015-02-18 -### Added -- XML export/import -- confirmation dialogs added -- Add support for non-standard ABC-compressed SWF file -- [#745] Copy tag to another SWF -- [#803] Align text in DefineText - -### Changed -- performance improvements -- [#758] Zoom to fit is dynamic - -### Fixed -- [#738] Frame export -- [#742] Can't edit frames -- [#747] Move tag to adds extra frame -- [#749] Internal viewer Sprite fill color -- [#752] Sound is not stopped -- [#753] Reload swf -- [#759] Decompilation § symbol -- [#766] Can't extract all resources -- [#768] Super calls not being correctly recognized -- [#773] Scripts associated with ClipActions are not shown -- [#776] Stop working after setting "number of threads" to 0 -- [#783] No OK box when edited script or text was saved -- [#785] Text search. Remember last choise, Unicode case insensitive search -- [#787] Search in AS bug (when navigating to searched results) -- [#788] Add DefineCompactedFont Tag to gfx file -- [#790] Impossible to change letters under a font -- [#794] Font extraction fails sometimes -- [#798] Close file streams after export, exporting progress -- [#800] Unexpected deleted carrier return in DefineEditText -- Build fix on Linux -- Fis Startup Script for OpenJDK -- Other minor fixes - -## [4.0.5] - 2014-12-01 -### Added -- Escape control characters in strings, identifier names -- [#676] import text error messages / logging enhancement -- [#734] \xAB escapes, \uABCD escapes -- [#687] AS3 - allowing p-code comments on separate line -- [#709] Text Export to Single File with custom filename - -### Fixed -- [#732] Random freezing - JavactiveX library updated. -- [#730] Not working without ActiveX fix on Windows -- [#735] Automatic deobfuscation not correctly switched (required restart) - -## [4.0.4] - 2014-11-23 -### Changed -- better file cache, removing unneccessary temp files - -### Fixed -- obfuscated identifiers - -## [4.0.3] - 2014-11-23 -### Added -- [#722] Go to next/previous frame -- BMP file format export (images,frames,shapes) and import(images) - -### Fixed -- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type -- [#715] namespace resolving fix -- [#635],[#726] placing cursor inside Unicode characters - -## [4.0.2] - 2014-11-22 -### Added -- show frame number during play -- flashplayer - show controls for DefineSprite -- goto frame -- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design - -### Changed -- [#720]: edited shape tag is not marked as modified after replacing -- reorganized about dialog - -### Fixed -- [#719] null swf name in Proxy after cancelling rename dialog -- flashplayer - font display -- [#723]: saving swf with invalid referenced characters -- DefineCompactedFont paging -- [#288] Less memory usage during FLA export -- Corrected syntax hilighting for AS3 P-code - -## [4.0.1] - 2014-11-12 -### Fixed -- [#713] Installer can continue when no file can be downloaded -- Fixed shapes -- Checking for updates moved to separate thread - -## [4.0.0] - 2014-11-11 -### Added -- [#677] Zoom level in export settings -- internal viewer: linear/srgb gradients -- zooming buttons for flashplayer/internal viewer -- stroke scaling modes for canvas export -- create snapshot button -- [#389] Selecting font face on import -- [#701] Importing font from TTF file -- Reorganized font panel -- [#707] Debugger for logging messages -- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets -- [#685] Getting local register names from debug info can be disabled -- Adding new tags -- [#698] Allowing unicode letters in identifiers -- [#710] Information about deobfuscation in error comments -- One EXE for 32/64 bit, uses percentage memory. -- EXE SplashScreen -- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc -- Config setting to load inner SWFs automatically -- Replace shape with image - -### Changed -- better FlashPlayer integration using JavactiveX library -- Faster building tag tree -- Faster timeline construction -- [#711] Improved folder view - faster and with correct context menu - -### Fixed -- AS2 deobfuscation fixes -- AS2 loops fix -- [#681] Linux script fixes -- AS2 constructor name fix -- [#688] AS3 direct edit fixes -- [#691] AS3 p-code reading/saving fix -- AS3 direct edit -submethod name resolve fix -- frames to html canvas fix -- [#524] Mask layer not applied when nonempty script layer -- [#663] AS3 imports fixes -- Font export of dot character -- Font panel Yes button fixed -- [#702] GFX font reading fix -- Better obfuscated names handling -- [#539] for(each) in declaration fixes - -## [3.0.0] - 2014-09-20 -### Added -- Separated GUI (GPL) and library (now LGPL) -- Editing obfuscated identifiers via new paragraph(§) syntax -- Timeline View with preview and object hilighting -- Show GFX data in dump view -- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline -- Dump view - selecting node -- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption - -### Removed -- Removed deprecated commandline export formats (see --help) - -### Fixed -- FileAttributes tag reading fix -- [#649] GFX reading fixed -- [#656] Search in memory - 64 bit processes fix -- [#661] scripts not showing -- [#664] expanding fillStyles in raw edit -- [#668] add missing character fix, text tags fix -- [#674] texts hilighting initialization fix -- [#675] AS1/2 and/or operator compilation -- [#632] Locking file after opening (cannot save, etc.) -- [#651] Unnecessary removing expression killed in unreachable part -- [#678] Windows batch file paths fixed -- [#672] Disabling transparency slider on RGB only selection -- [#684] Sound streams inside DefineSprites, soundstream handling - -## [2.1.4] - 2014-08-23 -### Added -- AS1/2: New method for deobfuscation (can be switched off in settings) -- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters - -### Fixed -- [#647] Skipping FileAttributesTag with Parallel speedup on -- [#648] Export from embedded SWF - -## [2.1.3] - 2014-08-18 -### Added -- Show "save" and "saveas" in application menu -- Saving data range in dump view -- Show actions, abcdata in dumpview (context menu on the tree node) -- [#612] show color in hex format - -### Changed -- Faster dump info collecting (less memory) -- Allow selecting multiple files in open file dialog - -### Fixed -- [#623] ffdec.sh UNIX file endings, executable -- [#624] search in embedded swf files -- [#632] AS1/2 Unnecessary GetVariable before NewObject -- [#627] filter swf not working -- LZMA saving -- Export pcode&hex from commandline -- [#640] text import fixed, ignore BOM - -## [2.1.2] - 2014-07-20 -### Added -- Dump view -- Context menu: Jump to character, raw edit all tags -- Catalan translation -- SWF header display - -### Fixed -- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes -- [#592] AS3 Multiname resolving in P-code causing different bytecode -- [#585] AS3 moving popped values to output -- [#578] Always on top fixed on search results -- [#501] GotoFrame2 fix -- [#616] Frames to PNG export -- Export context menu -- [#559] Bitmap export opacity -- [#401] Placeobject 3/4 fix -- [#593] Return object newline -- [#594] Setting for curly brace - -## [2.1.1] - 2014-06-05 -### Added -- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers -- AS1/2 direct edit - global functions improvements -- AS1/2 negate operator, unary minus operator -- Opening SWFs in BinaryData tags -- AS1: Old string operators support, and/or, <> operator (editation) -- Statusbar loading animation improved -- [#579] AS3 direct editation - removing old class/methods from ABC -- remove character without the dependencies (remove only the place/remove tags) -- Running on system with no home directory -- [#428] PDF export (as images only) -- Commandline FlashPaper to PDF export -- Select frames / Characters commandline options - -### Changed -- [#337] quickfind visibility improved -- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) - -### Fixed -- [#576] AS1/2 direct editation: DefineFunction2 fix -- AS1/2 property fix -- AS1/2 typeof operator fix -- [#250] line spacing fix -- PlaceObject 3-4 className -- [#579] AS3 direct editation bugfixes - property resolving, integer values -- Morphshape canvas export fix -- Canvas export fix - closing path -- [#580] Rename invalid identifiers commandline fix -- [#510] JSyntaxPane find and replace dialog wrap around fix -- No more frame caching during export => memory saving (like [#583]) -- [#586] DropShadow filter fix -- Canvas export colortransform fix - -## [2.1.0 update 2] - 2014-05-08 -### Added -- AS3 decompilation/editation: Vector initializers -- AS3 direct editation: more classes in one file - -### Fixed -- [#574] DefineSprite editing fix -- Various AS3 direct editation fixes - -## [2.1.0 update 1] - 2014-05-05 -### Added -- Portugese-brasilian translation - -### Changed -- HTML Canvas export improvements - -### Fixed -- Various AS3 direct editation bugs, like [#570] - -## [2.1.0] - 2014-05-01 -### Added -- AS3 direct editation (Experimental!) -- Frames SVG Export -- Shape/MorphShape/Frames HTML 5 Canvas Export -- [#559] morphshapes as animated SVG -- [#563] Single file text export/import -- Font WOFF export -- Advanced settings dialog with tabs, config names, descriptions - -### Fixed -- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments -- Internal viewer: Filters fix - -## [2.0.1 update 2] - 2014-04-05 -### Fixed -- [#557] AS3 null namespace fix - p-code not working - -## [2.0.1 update 1] - 2014-04-04 -### Fixed -- [#556] Goto main class on startup fix -- [#557] Nullpointer fix (private namespaces) - -## [2.0.1] - 2014-04-03 -### Added -- Thumbnail view -- Font TTF export -- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) -- Expand all context menu -- Internal viewer: Button mouse move and click handling -- Playing sounds without flash player -- Internal viewer: Sounds on stage -- All sounds to WAV export -- Internal viewer: Showing texts, dynamic text border/fill -- [#504]: Unicode characters in JSyntaxPane -- Internal viewer: showing object under cursor -- Folder icons -- Sound/Image format on command line. -- Removing placeobject tags -- Removing frames -- AS: "elseif" statements -- Code formatting: space before parenthesis - -### Changed -- Single frames animated. - -### Fixed -- [#529] limit the number of displayed binaryData bytes -- [#538] Interface are sometimes dynamic -- [#537] super is sometime preceded by a dot -- [#540] Saving SWF changes very large static uint values -- [#387] Frames preview bugged -- AS:loop mismatch fix on parallel speedup -- [#552] Some timeout exceptions -- [#494] Fixed nightly builds updates - -## [2.0.0] - 2014-03-02 -### Added -- Generic tag tree editor -- Timeline view (stub only) -- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) -- [#513]: command line option to extract swf from binary file -- Configurable code formatting (Indentation + brace position) -- [#262] Export FLA: Font character ranges export -- Configurable checking for updates - -### Changed -- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes -- Improved commandline usage -- Automatic deobfuscation default value set to False (See News on webpages) -- Check for updates can be configured to inform about Nightly builds aswell - -### Deprecated -- Some commandline options are now deprecated, see --help - -### Fixed -- [#499] Cannot save via Proxy fixed -- [#504] font name reading fixed -- [#508] Support for OS without GUI -- [#305] Export FLA: empty sound layers -- [#312] Export FLA: Improved Shape/MorphShape fix -- [#503] Export FLA: Smoothing invalid shapes -- [#401] Invalid GFX tags in non GFX files -- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues -- [#361] FFDec icon is not visible on application start -- [#392] Video stream data fix -- [#516] AS3 P-code editor - Null name namespace handling - -## [1.8.1 update 1] - 2014-02-02 -### Fixed -- [#495] font embedding fix -- [#496] date format in new version dialog -- cosmetic changes - -## [1.8.1] - 2014-01-30 -### Added -- [#299] replace DefineBits images -- [#303] open folder with exported FLA -- [#324],[#346] SWC/zip/other binary file support -- [#371] detailed logging -- [#426] command line switch to rename identifiers -- [#457] clear recent opened files list -- [#458] save selected system font for swf fonts -- [#460] text editor: do not scroll to the end automatically -- [#462] font embedding dialog: show more sample characters -- [#463] global search in texts -- [#465] make font properties editable -- [#466] font preview - -### Changed -- [#369] new SVG and preview image rendering -- [#390] refresh font list without reloading the application -- [#453] update texts aftert adding new character to a font tag -- [#459] remember text panel splitter position -- [#461] font panel gui redesigned - -### Fixed -- [#451] dialog windows are not on the center of the screen -- [#454] Text syntax highlighting -- [#455],[#465] classic interface issues -- [#474] changeing language only available one time -- [#477] log window localization -- [#481] SVG export fix -- [#484] Oversized advance value after editing DefineText with DefineFont2 font -- [#493] missing search results - -## [1.8.0 update 1] - 2013-12-27 -### Added -- [#453] refresh (edit+save action) all texts button - -### Fixed -- Flash panel and font panel fixed - -## [1.8.0] - 2013-12-27 -### Added -- [#350] Allow to open multiple SWFs -- [#365] Filter fake SWFs during memory search -- [#366] Allow to sort the result list in memory search window -- [#429] Auto rename invalid identifiers setting -- [#447] Non-ribbon interface - -### Fixed -- [#354] Infinite decompilation fixed -- [#438] Case sensitive Command line arguments fixed -- [#436] Saving actionscript fixed -- [#446] Precedence issue fixed -- [#451] Dialogue window positions on a multi-monitor configuration fixed - -## [1.7.4 update 1] - 2013-12-05 -### Added -- [#426] Command line parameter for renaming invalid identifiers - -### Fixed -- [#427] Exception on linux fixed -- [#405], [#420], [#421] Some decompilation issues fixed -- [#430] Configuration default value problem fixed -- [#397], [#431] Deobfuscation stucked sometimes problem fixed - -## [1.7.4] - 2013-11-10 -### Added -- [#169] hexedit method body bytes -- [#335] last opened files -- [#404] Exporting P-code and Hex + console parameters -- [#407] register name is configurable -- Advanced settings -- Cancellable decompiling, exporting and searching - -### Fixed -- [#399], [#400] performance optimizations - -## [1.7.3 update 2] - 2013-09-29 -### Fixed -- [#398] AS3 p-code values with index 0 (null) - -## [1.7.3 update 1] - 2013-09-28 -### Added -- [#382] AS3: Adding new method - -## [1.7.3] - 2013-09-27 -### Added -- AS3: Multiname and namespace editing. -- [#382],[#396] AS3: Adding new trait (method/slot/const) -- AS3: Highlighting pair parenthesis/bracket -- AS3: Editing various new P-code parameters -- AS3: Highligting of trait names/types/parameters -- AS3: Global rename identifier for traits -- [#357] Playback controls for DefineSound -- [#391] AS3: Native methods mark -- [#395] Support for GFx ScaleForm SWFs (with fonts editing) -- Displaying fonts in internal viewer -- [#334], [#395] New Embed font dialog - selecting character ranges with preview -- Replacing characters in font (Yes/No to all dialog) - -### Changed -- AS3: New p-code syntax inspired by RABCDasm -- AS3: Editing whole trait in one textarea -- AS3: Removed messages about adding new constants -- AS3: Modified colors in editor -- [#301] Clearing error log causes icon to reset - -## [1.7.2 update 2] - 2013-09-13 -### Changed -- Updated translations - -### Fixed -- [#383] Firefox browser cache handling -- [#386] SWF resizing - -## [1.7.2 update 1] - 2013-09-11 -### Changed -- updated translations - -### Fixed -- [#383] Fixed cache loading when Firefox not used - -## [1.7.2] - 2013-09-11 -### Added -- [#357] Sounds Preview (Windows only) -- Movies preview (Windows only) -- Whole SWF display -- Preview controls (Play,Pause,Stop) -- Search SWFs in browsers cache (Firefox, Chrome) -- [#367] Memory search: Save selected files to disk -- Portugese translation - -### Changed -- [#380] Faster displaying DefineBitsLossless(2) images - -### Fixed -- [#292] Background color for Fonts preview fixed -- [#375] Replacing DefineBitsLossless image tag -- [#378] Refreshing language of JSyntaxPane -- MORPHGRADIENT reading fix - -## [1.7.1] - 2013-08-25 -### Added -- Loading SWFs from other processes memory (Windows only, sorry) -- [#325] Spanish translation -- [#210] Ukrainian and Dutch translation -- [#355] Chinese translation -- [#292] Change background color in SWF preview -- [#301] Clear errors log button -- [#313] Command line parameter for ignore all errors -- [#330] Protection agains adding same characters -- [#332] AS1/2 Showing elapsed times during commandline export -- [#344] Reload opened SWF -- Decompilation timeouts - -### Fixed -- [#295] Export FLA: wrong font -- [#297] Too bright titlebar button colors -- [#307] Export FLA: fixed empty textfields -- [#309] Export FLA: static text letter spacing detection -- [#310] Export FLA: Strokes -- [#311] Export FLA: BitmapFill -- [#327] AS1/2 Disassembly error stop application -- [#328] Fixed replacing images in DefineBitsJPEGX -- [#333] AS1/2 action reading -- [#336] Graph window is too small -- [#337] Quick search panel barely visible in same cases -- [#338] Expand/collapse icon in errorlog - -## [1.7.0 update 1] - 2013-08-11 -### Added -- [#315] German translation (partial) - -### Fixed -- [#123] Better context menu integration -- [#243],[#326] Better deobfuscation -- [#287] Typo in parallelSpeedUp parameter -- [#290],[#291] improved select language dialog -- [#294] minor GUI fixes -- [#298] Progressbar positition issues -- [#296] better export directory remembering -- [#314] Better deobfuscating filenames -- [#316] Readonly editor panes accepted Ctrl+Z/Y -- [#318] Export FLA: Shapes export fix -- [#319] AS3: Improved try..catch..finally decompilation -- [#323] AS3: Fixed default switch part - -## [1.7.0] - 2013-08-03 -### Added -- Listing contributors on about page -- [#223] AS2: Detecting uninitialized class fields -- [#250] Export FLA: Detecting static fields margin and spacing -- [#261] Export FLA: AS1/2 Frame scripts on first layer -- [#269] Commandline parameters for switching configuration -- [#274] AS3 Displaying elapsed time during commandline export -- [#275] AS3 Removing returnvoid as last statement - -### Changed -- New GUI based on Substance look and feel -- Menu changed to ribbon panel -- New round icon -- [#258] AS1/2: Improved chained assignments -- [#267] Starting program without choosing a file -- [#286] Saving to temp file first - -### Fixed -- [#123] Improved context menu integration on Windows -- [#233] Globally rename identifier deselects item in the tree -- [#235] Export FLA: Dynamic text fields coordinates -- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation -- [#251] Export FLA: Fixed filter strength rounding -- [#257] Export FLA: Text field color and size issues -- [#259] Fixed images alpha -- [#260] Export FLA: Labels position -- [#268] AS1/2 Function parameter shown as register instead loc -- [#272] AS3 Class initializer editation fix -- [#276] Fixed anonymous/inline functions handling -- [#220] Improved editing fonts / texts -- [#284],... other small fixes - -## [1.6.7] - 2013-07-20 -### Added -- [#220] Selection of font to import characters from -- [#232] Automatically add .swf extension in saveas dialog -- [#253] Abort/Retry/Ignore dialog on errors with file saving - -### Changed -- Improved translations - -### Fixed -- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation -- [#203] AS1/2 improved direct editing -- [#220] Adding characters to font fix -- [#225] AS1/2 object literal without name quotes -- [#236] AS1/2 Rename invalid identifiers issues -- [#245] AS3 Double space around "as" keyword -- [#247] AS3 Scrolling to main class at startup -- [#248] Memory issues (slowdown) -- [#254] Expressions as commands -- [#255] Windows 7 loading issues -- [#256] AS3 Object literal in return clause -- SWF text parsing (new lines) -- Labels size by locales - -## [1.6.6 update 2] - 2013-07-16 -### Fixed -- [#241] Program could not be started - -## [1.6.6 update 1] - 2013-07-16 -### Changed -- Better localization support - -### Fixed -- [#238],[#239],[#240] Fixed deobfuscation related problems -- [#237] Parentheses in AS1/2 add,subtract - -## [1.6.6] - 2013-07-16 -### Added -- [#217] Russian translation (focus) -- [#219] Hungarian translation (honfika) -- [#224] Swedish translation (Capasha) -- [#220] Adding characters to Fonts, displaying font info -- [#121] Search progress indication -- Error log - -### Changed -- [#203] Improved direct editing of AS1/2 -- [#207] Update SWF preview after switching external/internal flash player - -### Fixed -- [#151] Memory caching -- [#171] Skipping invalid AS3 code - newobject, newarray -- [#206] AS3 switch problem -- [#208] Renaming anonymous functions -- [#209],[#229] FLA export texts positions -- [#213],[#221] other decompilation issues -- [#225] AS object literal broken with ternar operator -- [#226] onClip indentation in FLA export -- [#227] gotoAndStop wrong frame index -- [#230] FLA export missing strokes -- Shapes viewer - missing strokes - -## [1.6.5 update 1] - 2013-07-09 -### Fixed -- [#151] Fixed caching in memory -- [#172] AS1/2 constant detection fix -- [#174] Renaming SymbolClass fix -- [#175],[#212] Fixed create directory issues on export -- [#185],[#186] on-clip actions indentation -- [#197] AS1/2 Missing storeregister before switch -- [#216] AS2 Fixed field order -- [#213] AS2 Fixed var fields quotes, switch nullpointer - -## [1.6.5] - 2013-07-08 -### Added -- Multilanguage support (currently English and Czech) -- [#151] Option for caching in memory instead of files -- [#168] Export selection in tree context menu -- [#176] option to show main class on startup -- [#177] saving window maximized state -- [#202] Removing tags other than DefineSprite - -### Changed -- [#173],[#190] Better renaming -- [#129], [#153] Better deobfuscation -- [#180] better error handling -- [#185],[#186] better displaying and exporting onclip actions - -### Fixed -- [#123] Better context menu integration -- [#136] FLA export - text sizes -- [#137],[#179] foreach issues (hasNext) -- [#144] Plain text export - empty line fix -- [#144] Not displaying texts -- [#164] DefineMorphShape issues -- [#167] Sprite tag appearing twice in export filename -- [#170] AS3 Try in loop -- [#172] loop detection fix -- [#175] use empty namespace -- [#178] AS subtract with negate -- [#181] AS3 missing quotes in object field -- [#182] missing namespace imports -- [#183] wrong stage size -- [#184] wrong video link -- [#189] Fixed three dots in tree -- [#191] Focalgradient fill fix -- [#195] AS2 issues -- [#196],[#197] switch issues -- [#198] DefineFont2 empty check -- [#200] DefineBitsLossLess fix -- [#201] Nonworking main window in Linux/MacOS (due toAssociation) - -## [1.6.4 update 1] - 2013-06-30 -### Fixed -- [#166] For loops detection -- [#165] AS3:direct lookupswitch support - -## [1.6.4] - 2013-06-30 -### Added -- [#63] Globally rename identifier -- [#67] Deobfuscation - rename identifiers according to type -- [#117] Drag & Drop SWF file to main window opens it -- [#123] Context menu integration on Windows -- [#127] Drag & Drop items from tree outside of application -- [#134] AS3: Find document class -- [#144] New lines in plain text export -- [#155] Remembering window size + splitbar positions between runs - -### Changed -- [#142] Using exportassets tag for tag names -- [#146] Display AS2 classes as tree of packages -- Better loop detection - -### Fixed -- [#129] AS1/2: not refreshing decompiled after rename -- [#130] Renaming SymbolClass identifiers too -- [#132] Renaming identifiers renamed strings -- [#136] Invalid text positions in FLA export -- [#145] Unicode support -- [#147] Escape filenames during obfuscated AS3 export -- [#148] Better package vs classname handling -- [#152] Empty if branches not inverted -- [#156] Better search handling (not freezing) -- [#157] AS3: Try statements in loops -- [#158] Graph repaint problem -- [#159] AS3: Improper rest parameter handling -- [#160] Commandline binaryData export -- [#162] DefineBitsJPEG2 image replacing -- [#163] Closing SWF file after loading -- other minor fixes - -## [1.6.3 update 2] - 2013-06-21 -### Changed -- [#149] Ifs with empty onTrue branches now inverted - -### Fixed -- [#150] Long line restriction removed - -## [1.6.3 update 1] - 2013-06-21 -### Fixed -- Memory limit decreased - FFDec was not working on 32 bit JVM. - -## [1.6.3] - 2013-06-20 -### Changed -- Parallel SpeedUp can be disabled in menu -- Better loop detection - -### Fixed -- [#119] Replacements file not found issue -- [#101] AS1/2 postincrement fix -- [#114],[#116],[#135],[#141] Fixed loop detection -- [#102] Fixed loop highlighting in export -- [#124] Flash player file path detection -- [#128] Improved imports -- [#135] CommentItem fix -- [#129],[#131] Better deobfuscation -- [#104] AS3 inc/dec local deobfuscation fix -- [#113],[#133],[#140] Memory limit increased - -## [1.6.2] - 2013-06-09 -### Added -- New loop detection algorithm - -### Changed -- [#108] - Faster loading and decompiling (Parallelism) -- Improved Internal flash viewer - shapes and morphshapes - -### Fixed -- Ternar operator fix -- [#102] Fixed Shapes to FLA export -- AS1/2 class detection fix -- [#105],[#104],[#101] fixed via new loop detection - -## [1.6.1] - 2013-06-03 -### Added -- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) -- [#109], [#106], [#107] some code improvements - -### Changed -- Application needs Java 1.7 to run - -### Removed -- Support for Java before 1.7 - -### Fixed -- [#102], [#110] AS3: Class highlight fix -- [#103] AS3:Fixed setslot handling -- [#104] AS3:Inc/Declocal nullpointer fix -- [#104] Multiple conditions in loop fix -- [#111] AS3:Object literal truncates line -- [#105] Better do while..break handling -- loop fixes - -## [1.6.0 update 1] - 2013-05-25 -### Added -- better FLA export - -### Fixed -- Many FLA export related bugs (like [#96]) -- [#98] Empty initializers do not cause empty lines now -- [#99] small logging issues -- [#100] large obfuscated code support - -## [1.6.0] - 2013-05-20 -### Added -- Export to FLA (Experimental BETA!) -- [#85] Search text in all ActionScripts -- SWF 11 support - -### Fixed -- [#79] ActionStartDrag constraint fix -- [#92] Inversed GreaterThan/LessThan -- [#93] AS1/2 fixed switch detection -- [#94] AS1/2 ActionTry - register cast fix -- [#95] Better script end handling - -## [1.5.2] - 2013-05-05 -### Added -- Improved automatic update system (changes log). -- Handling script traits as separate objects. -- [#86] open/save file dialog now accepts absolute paths in quotes - -### Fixed -- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 -- [#88] Fixed graph building -- [#89] AS3: bracket in property name lead to missing dot -- [#82] printgraph issue - -## [1.5.1 update 1] - 2013-05-04 -### Added -- Exporting texts via commandline -- Exporting all via commandline - -### Fixed -- DefineText2 color parameter -- AS3 GetSlot,SetSlot -- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... -- [#83] Fixed images transparency (zlib fix) -- Fixed graphparts with only jump in it (obfuscators) -- MORPHGRADIENT FIX -- Trasparency in DefineBitsJPEG3 and 4 -- Displaying shapes,morphshapes and sprites with bitmaps - -## [1.5.1] - 2013-05-01 -### Added -- Support for larger switches (10+cases) -- Editing text tags -- [#65] Exporting text tags -- Removing sprites -- Replacing images - -### Fixed -- DefineMorphShape2 fix -- [#79] - AS1/2 class detection fix, wrong printgraph fix -- [#78] - script trait slots fix - -## [1.5.0 update 1] - 2013-04-21 -### Fixed -- Automatic deobfuscation config defaulted to Off for AS1/2. - -## [1.5.0] - 2013-04-20 -### Added -- Direct editing of ActionScript 1/2 code (Beta) -- AS1/2: ifFrameLoaded support -- Automatic deobfuscation can be disabled in the menu -- [#48] - Decompile only specified class (commandline option) -- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices -- [#66] - Decompressing LZMA via commandline -- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) -- [#69] - DoABC vs DoABCDefine tags decompilation -- [#75] - Comma separator in while/do..while conditions, better if..return handling -- AS1/2: parsing NaN,Infinity value (Fix for [#73]) - -### Changed -- New icons (edit/save/cancel and main menu) - -### Fixed -- [#62] - Errors on not defined character tags (import tag) -- [#72] - First ternary operator expression was always true -- Fixed many deobfuscation related bugs - -## [1.4.3 update 2] - 2013-04-10 -### Fixed -- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) -- Try to fix lib/FlashPlayer.exe issue - -## [1.4.3 update 1] - 2013-04-06 -### Fixed -- [#38] - Indentation in const/var initializers, missing semicolon -- [#56] - Test output left in last release -- [#57] - Unknown instructions now do not log an exception (obfuscators do this) -- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. -- AS3 loops fix -- While true fix - -## [1.4.3] - 2013-04-04 -### Added -- AS1/2 Better deobfuscation - -### Fixed -- [#45] - Unicode characters fix -- [#50] - AS1/2 Function body deobfuscation fix -- [#51] - Displaying java class names instead of expressions -- [#52] - AS1/2 Better constantpool detection (deobfuscation) -- [#38] - AS3 indentation in initialized const/var value for newobject -- Fixed ImportAssets2 tag id - -## [1.4.2 update 1] - 2013-03-25 -### Fixed -- [#47] - wrong AS3 deobfuscation -- AS3 deobfuscation issues -- AS3 switch - -## [1.4.2] - 2013-03-24 -### Added -- [#42] - Displaying code as hex -- AS1/2: Renaming identifiers (deobfuscation) -- AS1/2,AS3: Better deobfuscation -- Storing configuration to user home -- Installer for Windows systems - -### Changed -- Graph button changed to icon. - -### Fixed -- [#39] - AS1/2 NewMethod..Pop fix -- [#40] - No logging + For..in..return decompilation -- [#44] - DefineFont2 fix -- [#36] - Multiname with invalid index -- [#43] - Ternary operator and more -- [#46] - Ifs with empty branches got ignored -- [#3] - Ignoring unknown opcodes -- Logging exceptions during export - -## [1.4.1] - 2013-03-10 -### Added -- Exporting sounds -- Better AS1/2 deobfuscation (disassembly & decompilation) - -### Fixed -- Exporting only first 1000 frames of the movie -- Decompiled code was not refreshed on AS1/2 changes -- Application no longer creates empty directories on export - -## [1.4.0 update 1] - 2013-03-04 -### Fixed -- [#37] - AS3: Reversed loop conditions - -## [1.4.0] - 2013-03-03 -### Added -- AS3: ignoring return void at the end of methods -- New icons - Silk icons -- AS3: Traits list sort button -- Better Graph display -- Frames view -- Exporting of movies (No audio) -- Some AS3 related Tests -- Homepage & Donate link in the menu - -### Changed -- Tree view instead of tabs -- AS1/2 and AS3 now share same decompiling method. - -### Fixed -- [#34] - Reversed loop conditions -- [#35] - Fixed unicode strings (Japanese) - -## [1.3.1] - 2013-02-23 -### Changed -- Flash player no longer uses SWT library - -### Fixed -- [#32] - AS2: Action255 bug -- [#31] - Erorrneous tags are now ignored -- DefineBitsLossLess 1&2 on 8bit colormapped images - -## [1.3.0] - 2013-02-17 -### Added -- Decompilation is more resistant to obfuscation -- Shapes SVG export -- AS2: Decompiling classes & interfaces -- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) -- AS3: Deobfuscation menu -- Graph button for displaying code flow Graph - -### Changed -- Complete new decompiling method in both AS1/2 and AS3 -- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". -- To edit source, Edit button must be pressed first (Due to click&go feature) - -### Fixed -- AS3: Method info editor fixed -- Edittext & Button displaying - -## [1.2.0] - 2013-01-19 -### Added -- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). -- Images display and export -- AS2: Exporting selection -- Progressbar during loading - -### Changed -- One merged window for AS1/2 and 3. -- Updated icons - -### Fixed -- AS3: xml attrib, switch in anonymous function (in AS2 too) - -## [1.1.0] - 2013-01-02 -### Added -- Checking for updates -- AS2: Exporting -- AS3: Decompiling whole scripts instead of just classes -- AS3: Exporting selected scripts -- AS3: Script search bar -- AS3: List of DoABCTags now has default "- all -" item -- AS3: Better imports, use namespaces -- AS3: XML related instructions -- AS3: Anonymous functions with names -- AS3: Better initialization of const values -- Logging exceptions to log.txt file - -### Fixed -- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops - -## [1.0.1] - 2012-12-26 -### Added -- AS3: Runtime namespace resolving -- AS3: Arguments variable -- AS3: Better recognizing Pre/Post Increments/Decrements -- AS3: Better declarations - -### Fixed -- AS3: Fixed static variables - -## [1.0.0] - 2012-12-24 -### Added -- Support for LZMA compressed files -- AS3: Detecting local register types for declaration. -- AS3: Displaying inline functions -- AS3: Last save/open dir is remembered -- AS3: Better usage detection for multinames -- AS3: Commandline arguments for exporting -- AS3: Better chained assignments -- AS2: FSCommand2 instruction support -- Proxy: Mimetype application/octet-stream added -- Added executable for Windows users. - -### Changed -- AS3: GUI - Constants tab moved to the top -- AS3: Deobfuscation is now optional, can be accessed via menu - -### Fixed -- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) -- Other minor fixes - -## [beta 1] - 2011-07-30 -### Added -- AS3: Automatic computing method body parameters (EXPERIMENTAL) -- AS3: Editing return type of methods -- AS3: Editing type and default value for variables/constants (Slot/Const traits) -- AS1/2: Few enhancements -- About dialog - -### Changed -- Gui: Updated Icons - -### Fixed -- AS 1/2: Fixed large bug causing Ifs to not decompile properly -- Proxy: Some minor fixes - -## [alpha 10] - 2011-07-13 -### Added -- AS3:Highlighting actual line -- AS3:Completing instruction names via Ctrl+Space -- AS3:Editing method parameters, method body parameters via tab panel -- AS3:ByteCode minor_version 17 supported - decimal datatypes -- AS3:Local variables and method parameters take name from debug information if present -- AS3:Automatic renaming of classes/methods when obfuscated names -- AS3:Better error messages (When cannot decompile obfuscated code) - -### Fixed -- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) -- AS3:Hilighting fixes -- AS3:Fixed decrement/increment statements decompilation -- AS3:Decompiler now adds variable declarations on the beginning of decompiled method -- AS3:Try/catch statements fixed when debug information present -- AS3:Fixed for each statements -- AS3:Other minor fixes - -## [alpha 9] - 2011-07-02 -### Added -- AS3: Added disassembling of some new types of instructions -- AS3: Exporting source as PCode - -### Fixed -- AS3: Many other bugfixes... - -## [alpha 8] - 2010-09-19 -### Added -- AS3: Editing exceptions -- AS3: Finding usage of multinames from constant table - -### Changed -- AS1/2: Better GUI -- AS1/2: Better decompiling of Ifs, For..in - -## [alpha 7] - 2010-09-04 -### Added -- Initial public release - -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev -[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 -[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 -[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 -[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 -[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 -[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 -[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 -[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 -[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 -[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 -[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 -[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 -[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 -[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 -[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 -[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 -[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 -[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 -[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 -[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 -[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 -[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 -[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 -[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 -[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 -[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 -[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 -[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 -[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 -[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 -[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 -[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 -[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 -[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 -[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 -[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 -[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 -[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 -[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 -[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 -[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 -[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 -[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 -[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 -[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 -[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 -[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 -[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 -[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 -[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 -[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 -[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 -[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 -[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 -[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 -[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 -[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 -[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 -[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 -[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 -[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 -[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 -[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 -[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 -[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 -[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 -[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 -[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 -[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 -[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 -[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 -[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 -[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 -[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 -[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 -[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 -[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 -[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 -[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 -[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 -[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 -[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 -[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 -[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 -[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 -[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 -[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 -[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 -[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 -[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 -[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 -[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 -[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 -[#1156]: https://www.free-decompiler.com/flash/issues/1156 -[#1171]: https://www.free-decompiler.com/flash/issues/1171 -[#1170]: https://www.free-decompiler.com/flash/issues/1170 -[#1241]: https://www.free-decompiler.com/flash/issues/1241 -[#1162]: https://www.free-decompiler.com/flash/issues/1162 -[#1199]: https://www.free-decompiler.com/flash/issues/1199 -[#1151]: https://www.free-decompiler.com/flash/issues/1151 -[#1128]: https://www.free-decompiler.com/flash/issues/1128 -[#1163]: https://www.free-decompiler.com/flash/issues/1163 -[#1172]: https://www.free-decompiler.com/flash/issues/1172 -[#1174]: https://www.free-decompiler.com/flash/issues/1174 -[#1183]: https://www.free-decompiler.com/flash/issues/1183 -[#1193]: https://www.free-decompiler.com/flash/issues/1193 -[#1200]: https://www.free-decompiler.com/flash/issues/1200 -[#1198]: https://www.free-decompiler.com/flash/issues/1198 -[#1205]: https://www.free-decompiler.com/flash/issues/1205 -[#1194]: https://www.free-decompiler.com/flash/issues/1194 -[#1210]: https://www.free-decompiler.com/flash/issues/1210 -[#1217]: https://www.free-decompiler.com/flash/issues/1217 -[#1244]: https://www.free-decompiler.com/flash/issues/1244 -[#1247]: https://www.free-decompiler.com/flash/issues/1247 -[#1236]: https://www.free-decompiler.com/flash/issues/1236 -[#1251]: https://www.free-decompiler.com/flash/issues/1251 -[#1265]: https://www.free-decompiler.com/flash/issues/1265 -[#1268]: https://www.free-decompiler.com/flash/issues/1268 -[#1161]: https://www.free-decompiler.com/flash/issues/1161 -[#1118]: https://www.free-decompiler.com/flash/issues/1118 -[#409]: https://www.free-decompiler.com/flash/issues/409 -[#1132]: https://www.free-decompiler.com/flash/issues/1132 -[#1134]: https://www.free-decompiler.com/flash/issues/1134 -[#1121]: https://www.free-decompiler.com/flash/issues/1121 -[#1052]: https://www.free-decompiler.com/flash/issues/1052 -[#1145]: https://www.free-decompiler.com/flash/issues/1145 -[#758]: https://www.free-decompiler.com/flash/issues/758 -[#1096]: https://www.free-decompiler.com/flash/issues/1096 -[#1104]: https://www.free-decompiler.com/flash/issues/1104 -[#1107]: https://www.free-decompiler.com/flash/issues/1107 -[#1106]: https://www.free-decompiler.com/flash/issues/1106 -[#1113]: https://www.free-decompiler.com/flash/issues/1113 -[#1075]: https://www.free-decompiler.com/flash/issues/1075 -[#1127]: https://www.free-decompiler.com/flash/issues/1127 -[#1103]: https://www.free-decompiler.com/flash/issues/1103 -[#1133]: https://www.free-decompiler.com/flash/issues/1133 -[#1135]: https://www.free-decompiler.com/flash/issues/1135 -[#1138]: https://www.free-decompiler.com/flash/issues/1138 -[#1139]: https://www.free-decompiler.com/flash/issues/1139 -[#930]: https://www.free-decompiler.com/flash/issues/930 -[#1137]: https://www.free-decompiler.com/flash/issues/1137 -[#1144]: https://www.free-decompiler.com/flash/issues/1144 -[#1147]: https://www.free-decompiler.com/flash/issues/1147 -[#1148]: https://www.free-decompiler.com/flash/issues/1148 -[#1152]: https://www.free-decompiler.com/flash/issues/1152 -[#1154]: https://www.free-decompiler.com/flash/issues/1154 -[#116]: https://www.free-decompiler.com/flash/issues/116 -[#1070]: https://www.free-decompiler.com/flash/issues/1070 -[#1098]: https://www.free-decompiler.com/flash/issues/1098 -[#1033]: https://www.free-decompiler.com/flash/issues/1033 -[#1083]: https://www.free-decompiler.com/flash/issues/1083 -[#1091]: https://www.free-decompiler.com/flash/issues/1091 -[#1076]: https://www.free-decompiler.com/flash/issues/1076 -[#1068]: https://www.free-decompiler.com/flash/issues/1068 -[#1063]: https://www.free-decompiler.com/flash/issues/1063 -[#1019]: https://www.free-decompiler.com/flash/issues/1019 -[#1016]: https://www.free-decompiler.com/flash/issues/1016 -[#1010]: https://www.free-decompiler.com/flash/issues/1010 -[#1008]: https://www.free-decompiler.com/flash/issues/1008 -[#1004]: https://www.free-decompiler.com/flash/issues/1004 -[#933]: https://www.free-decompiler.com/flash/issues/933 -[#1062]: https://www.free-decompiler.com/flash/issues/1062 -[#418]: https://www.free-decompiler.com/flash/issues/418 -[#1047]: https://www.free-decompiler.com/flash/issues/1047 -[#812]: https://www.free-decompiler.com/flash/issues/812 -[#1056]: https://www.free-decompiler.com/flash/issues/1056 -[#1057]: https://www.free-decompiler.com/flash/issues/1057 -[#991]: https://www.free-decompiler.com/flash/issues/991 -[#689]: https://www.free-decompiler.com/flash/issues/689 -[#1060]: https://www.free-decompiler.com/flash/issues/1060 -[#1037]: https://www.free-decompiler.com/flash/issues/1037 -[#489]: https://www.free-decompiler.com/flash/issues/489 -[#1007]: https://www.free-decompiler.com/flash/issues/1007 -[#1044]: https://www.free-decompiler.com/flash/issues/1044 -[#947]: https://www.free-decompiler.com/flash/issues/947 -[#953]: https://www.free-decompiler.com/flash/issues/953 -[#954]: https://www.free-decompiler.com/flash/issues/954 -[#950]: https://www.free-decompiler.com/flash/issues/950 -[#945]: https://www.free-decompiler.com/flash/issues/945 -[#957]: https://www.free-decompiler.com/flash/issues/957 -[#956]: https://www.free-decompiler.com/flash/issues/956 -[#968]: https://www.free-decompiler.com/flash/issues/968 -[#978]: https://www.free-decompiler.com/flash/issues/978 -[#955]: https://www.free-decompiler.com/flash/issues/955 -[#966]: https://www.free-decompiler.com/flash/issues/966 -[#999]: https://www.free-decompiler.com/flash/issues/999 -[#1000]: https://www.free-decompiler.com/flash/issues/1000 -[#1017]: https://www.free-decompiler.com/flash/issues/1017 -[#1030]: https://www.free-decompiler.com/flash/issues/1030 -[#949]: https://www.free-decompiler.com/flash/issues/949 -[#944]: https://www.free-decompiler.com/flash/issues/944 -[#939]: https://www.free-decompiler.com/flash/issues/939 -[#942]: https://www.free-decompiler.com/flash/issues/942 -[#952]: https://www.free-decompiler.com/flash/issues/952 -[#858]: https://www.free-decompiler.com/flash/issues/858 -[#905]: https://www.free-decompiler.com/flash/issues/905 -[#920]: https://www.free-decompiler.com/flash/issues/920 -[#921]: https://www.free-decompiler.com/flash/issues/921 -[#924]: https://www.free-decompiler.com/flash/issues/924 -[#895]: https://www.free-decompiler.com/flash/issues/895 -[#884]: https://www.free-decompiler.com/flash/issues/884 -[#899]: https://www.free-decompiler.com/flash/issues/899 -[#903]: https://www.free-decompiler.com/flash/issues/903 -[#855]: https://www.free-decompiler.com/flash/issues/855 -[#850]: https://www.free-decompiler.com/flash/issues/850 -[#832]: https://www.free-decompiler.com/flash/issues/832 -[#904]: https://www.free-decompiler.com/flash/issues/904 -[#910]: https://www.free-decompiler.com/flash/issues/910 -[#922]: https://www.free-decompiler.com/flash/issues/922 -[#916]: https://www.free-decompiler.com/flash/issues/916 -[#938]: https://www.free-decompiler.com/flash/issues/938 -[#897]: https://www.free-decompiler.com/flash/issues/897 -[#470]: https://www.free-decompiler.com/flash/issues/470 -[#877]: https://www.free-decompiler.com/flash/issues/877 -[#878]: https://www.free-decompiler.com/flash/issues/878 -[#845]: https://www.free-decompiler.com/flash/issues/845 -[#883]: https://www.free-decompiler.com/flash/issues/883 -[#882]: https://www.free-decompiler.com/flash/issues/882 -[#760]: https://www.free-decompiler.com/flash/issues/760 -[#887]: https://www.free-decompiler.com/flash/issues/887 -[#842]: https://www.free-decompiler.com/flash/issues/842 -[#841]: https://www.free-decompiler.com/flash/issues/841 -[#772]: https://www.free-decompiler.com/flash/issues/772 -[#762]: https://www.free-decompiler.com/flash/issues/762 -[#862]: https://www.free-decompiler.com/flash/issues/862 -[#865]: https://www.free-decompiler.com/flash/issues/865 -[#613]: https://www.free-decompiler.com/flash/issues/613 -[#868]: https://www.free-decompiler.com/flash/issues/868 -[#713]: https://www.free-decompiler.com/flash/issues/713 -[#807]: https://www.free-decompiler.com/flash/issues/807 -[#728]: https://www.free-decompiler.com/flash/issues/728 -[#857]: https://www.free-decompiler.com/flash/issues/857 -[#860]: https://www.free-decompiler.com/flash/issues/860 -[#824]: https://www.free-decompiler.com/flash/issues/824 -[#809]: https://www.free-decompiler.com/flash/issues/809 -[#805]: https://www.free-decompiler.com/flash/issues/805 -[#825]: https://www.free-decompiler.com/flash/issues/825 -[#737]: https://www.free-decompiler.com/flash/issues/737 -[#350]: https://www.free-decompiler.com/flash/issues/350 -[#814]: https://www.free-decompiler.com/flash/issues/814 -[#816]: https://www.free-decompiler.com/flash/issues/816 -[#835]: https://www.free-decompiler.com/flash/issues/835 -[#836]: https://www.free-decompiler.com/flash/issues/836 -[#848]: https://www.free-decompiler.com/flash/issues/848 -[#817]: https://www.free-decompiler.com/flash/issues/817 -[#849]: https://www.free-decompiler.com/flash/issues/849 -[#852]: https://www.free-decompiler.com/flash/issues/852 -[#837]: https://www.free-decompiler.com/flash/issues/837 -[#811]: https://www.free-decompiler.com/flash/issues/811 -[#745]: https://www.free-decompiler.com/flash/issues/745 -[#803]: https://www.free-decompiler.com/flash/issues/803 -[#738]: https://www.free-decompiler.com/flash/issues/738 -[#742]: https://www.free-decompiler.com/flash/issues/742 -[#747]: https://www.free-decompiler.com/flash/issues/747 -[#749]: https://www.free-decompiler.com/flash/issues/749 -[#752]: https://www.free-decompiler.com/flash/issues/752 -[#753]: https://www.free-decompiler.com/flash/issues/753 -[#759]: https://www.free-decompiler.com/flash/issues/759 -[#766]: https://www.free-decompiler.com/flash/issues/766 -[#768]: https://www.free-decompiler.com/flash/issues/768 -[#773]: https://www.free-decompiler.com/flash/issues/773 -[#776]: https://www.free-decompiler.com/flash/issues/776 -[#783]: https://www.free-decompiler.com/flash/issues/783 -[#785]: https://www.free-decompiler.com/flash/issues/785 -[#787]: https://www.free-decompiler.com/flash/issues/787 -[#788]: https://www.free-decompiler.com/flash/issues/788 -[#790]: https://www.free-decompiler.com/flash/issues/790 -[#794]: https://www.free-decompiler.com/flash/issues/794 -[#798]: https://www.free-decompiler.com/flash/issues/798 -[#800]: https://www.free-decompiler.com/flash/issues/800 -[#676]: https://www.free-decompiler.com/flash/issues/676 -[#734]: https://www.free-decompiler.com/flash/issues/734 -[#687]: https://www.free-decompiler.com/flash/issues/687 -[#709]: https://www.free-decompiler.com/flash/issues/709 -[#732]: https://www.free-decompiler.com/flash/issues/732 -[#730]: https://www.free-decompiler.com/flash/issues/730 -[#735]: https://www.free-decompiler.com/flash/issues/735 -[#722]: https://www.free-decompiler.com/flash/issues/722 -[#725]: https://www.free-decompiler.com/flash/issues/725 -[#715]: https://www.free-decompiler.com/flash/issues/715 -[#635]: https://www.free-decompiler.com/flash/issues/635 -[#726]: https://www.free-decompiler.com/flash/issues/726 -[#716]: https://www.free-decompiler.com/flash/issues/716 -[#717]: https://www.free-decompiler.com/flash/issues/717 -[#718]: https://www.free-decompiler.com/flash/issues/718 -[#720]: https://www.free-decompiler.com/flash/issues/720 -[#719]: https://www.free-decompiler.com/flash/issues/719 -[#723]: https://www.free-decompiler.com/flash/issues/723 -[#288]: https://www.free-decompiler.com/flash/issues/288 -[#677]: https://www.free-decompiler.com/flash/issues/677 -[#389]: https://www.free-decompiler.com/flash/issues/389 -[#701]: https://www.free-decompiler.com/flash/issues/701 -[#707]: https://www.free-decompiler.com/flash/issues/707 -[#302]: https://www.free-decompiler.com/flash/issues/302 -[#685]: https://www.free-decompiler.com/flash/issues/685 -[#698]: https://www.free-decompiler.com/flash/issues/698 -[#710]: https://www.free-decompiler.com/flash/issues/710 -[#711]: https://www.free-decompiler.com/flash/issues/711 -[#681]: https://www.free-decompiler.com/flash/issues/681 -[#688]: https://www.free-decompiler.com/flash/issues/688 -[#691]: https://www.free-decompiler.com/flash/issues/691 -[#524]: https://www.free-decompiler.com/flash/issues/524 -[#663]: https://www.free-decompiler.com/flash/issues/663 -[#702]: https://www.free-decompiler.com/flash/issues/702 -[#539]: https://www.free-decompiler.com/flash/issues/539 -[#650]: https://www.free-decompiler.com/flash/issues/650 -[#680]: https://www.free-decompiler.com/flash/issues/680 -[#649]: https://www.free-decompiler.com/flash/issues/649 -[#656]: https://www.free-decompiler.com/flash/issues/656 -[#661]: https://www.free-decompiler.com/flash/issues/661 -[#664]: https://www.free-decompiler.com/flash/issues/664 -[#668]: https://www.free-decompiler.com/flash/issues/668 -[#674]: https://www.free-decompiler.com/flash/issues/674 -[#675]: https://www.free-decompiler.com/flash/issues/675 -[#632]: https://www.free-decompiler.com/flash/issues/632 -[#651]: https://www.free-decompiler.com/flash/issues/651 -[#678]: https://www.free-decompiler.com/flash/issues/678 -[#672]: https://www.free-decompiler.com/flash/issues/672 -[#684]: https://www.free-decompiler.com/flash/issues/684 -[#647]: https://www.free-decompiler.com/flash/issues/647 -[#648]: https://www.free-decompiler.com/flash/issues/648 -[#612]: https://www.free-decompiler.com/flash/issues/612 -[#623]: https://www.free-decompiler.com/flash/issues/623 -[#624]: https://www.free-decompiler.com/flash/issues/624 -[#627]: https://www.free-decompiler.com/flash/issues/627 -[#640]: https://www.free-decompiler.com/flash/issues/640 -[#595]: https://www.free-decompiler.com/flash/issues/595 -[#592]: https://www.free-decompiler.com/flash/issues/592 -[#585]: https://www.free-decompiler.com/flash/issues/585 -[#578]: https://www.free-decompiler.com/flash/issues/578 -[#501]: https://www.free-decompiler.com/flash/issues/501 -[#616]: https://www.free-decompiler.com/flash/issues/616 -[#559]: https://www.free-decompiler.com/flash/issues/559 -[#401]: https://www.free-decompiler.com/flash/issues/401 -[#593]: https://www.free-decompiler.com/flash/issues/593 -[#594]: https://www.free-decompiler.com/flash/issues/594 -[#579]: https://www.free-decompiler.com/flash/issues/579 -[#428]: https://www.free-decompiler.com/flash/issues/428 -[#337]: https://www.free-decompiler.com/flash/issues/337 -[#584]: https://www.free-decompiler.com/flash/issues/584 -[#576]: https://www.free-decompiler.com/flash/issues/576 -[#250]: https://www.free-decompiler.com/flash/issues/250 -[#580]: https://www.free-decompiler.com/flash/issues/580 -[#510]: https://www.free-decompiler.com/flash/issues/510 -[#583]: https://www.free-decompiler.com/flash/issues/583 -[#586]: https://www.free-decompiler.com/flash/issues/586 -[#574]: https://www.free-decompiler.com/flash/issues/574 -[#570]: https://www.free-decompiler.com/flash/issues/570 -[#563]: https://www.free-decompiler.com/flash/issues/563 -[#561]: https://www.free-decompiler.com/flash/issues/561 -[#509]: https://www.free-decompiler.com/flash/issues/509 -[#433]: https://www.free-decompiler.com/flash/issues/433 -[#557]: https://www.free-decompiler.com/flash/issues/557 -[#556]: https://www.free-decompiler.com/flash/issues/556 -[#504]: https://www.free-decompiler.com/flash/issues/504 -[#529]: https://www.free-decompiler.com/flash/issues/529 -[#538]: https://www.free-decompiler.com/flash/issues/538 -[#537]: https://www.free-decompiler.com/flash/issues/537 -[#540]: https://www.free-decompiler.com/flash/issues/540 -[#387]: https://www.free-decompiler.com/flash/issues/387 -[#552]: https://www.free-decompiler.com/flash/issues/552 -[#494]: https://www.free-decompiler.com/flash/issues/494 -[#513]: https://www.free-decompiler.com/flash/issues/513 -[#262]: https://www.free-decompiler.com/flash/issues/262 -[#499]: https://www.free-decompiler.com/flash/issues/499 -[#508]: https://www.free-decompiler.com/flash/issues/508 -[#305]: https://www.free-decompiler.com/flash/issues/305 -[#312]: https://www.free-decompiler.com/flash/issues/312 -[#503]: https://www.free-decompiler.com/flash/issues/503 -[#304]: https://www.free-decompiler.com/flash/issues/304 -[#306]: https://www.free-decompiler.com/flash/issues/306 -[#507]: https://www.free-decompiler.com/flash/issues/507 -[#424]: https://www.free-decompiler.com/flash/issues/424 -[#425]: https://www.free-decompiler.com/flash/issues/425 -[#478]: https://www.free-decompiler.com/flash/issues/478 -[#485]: https://www.free-decompiler.com/flash/issues/485 -[#517]: https://www.free-decompiler.com/flash/issues/517 -[#518]: https://www.free-decompiler.com/flash/issues/518 -[#361]: https://www.free-decompiler.com/flash/issues/361 -[#392]: https://www.free-decompiler.com/flash/issues/392 -[#516]: https://www.free-decompiler.com/flash/issues/516 -[#495]: https://www.free-decompiler.com/flash/issues/495 -[#496]: https://www.free-decompiler.com/flash/issues/496 -[#299]: https://www.free-decompiler.com/flash/issues/299 -[#303]: https://www.free-decompiler.com/flash/issues/303 -[#324]: https://www.free-decompiler.com/flash/issues/324 -[#346]: https://www.free-decompiler.com/flash/issues/346 -[#371]: https://www.free-decompiler.com/flash/issues/371 -[#426]: https://www.free-decompiler.com/flash/issues/426 -[#457]: https://www.free-decompiler.com/flash/issues/457 -[#458]: https://www.free-decompiler.com/flash/issues/458 -[#460]: https://www.free-decompiler.com/flash/issues/460 -[#462]: https://www.free-decompiler.com/flash/issues/462 -[#463]: https://www.free-decompiler.com/flash/issues/463 -[#465]: https://www.free-decompiler.com/flash/issues/465 -[#466]: https://www.free-decompiler.com/flash/issues/466 -[#369]: https://www.free-decompiler.com/flash/issues/369 -[#390]: https://www.free-decompiler.com/flash/issues/390 -[#453]: https://www.free-decompiler.com/flash/issues/453 -[#459]: https://www.free-decompiler.com/flash/issues/459 -[#461]: https://www.free-decompiler.com/flash/issues/461 -[#451]: https://www.free-decompiler.com/flash/issues/451 -[#454]: https://www.free-decompiler.com/flash/issues/454 -[#455]: https://www.free-decompiler.com/flash/issues/455 -[#474]: https://www.free-decompiler.com/flash/issues/474 -[#477]: https://www.free-decompiler.com/flash/issues/477 -[#481]: https://www.free-decompiler.com/flash/issues/481 -[#484]: https://www.free-decompiler.com/flash/issues/484 -[#493]: https://www.free-decompiler.com/flash/issues/493 -[#365]: https://www.free-decompiler.com/flash/issues/365 -[#366]: https://www.free-decompiler.com/flash/issues/366 -[#429]: https://www.free-decompiler.com/flash/issues/429 -[#447]: https://www.free-decompiler.com/flash/issues/447 -[#354]: https://www.free-decompiler.com/flash/issues/354 -[#438]: https://www.free-decompiler.com/flash/issues/438 -[#436]: https://www.free-decompiler.com/flash/issues/436 -[#446]: https://www.free-decompiler.com/flash/issues/446 -[#427]: https://www.free-decompiler.com/flash/issues/427 -[#405]: https://www.free-decompiler.com/flash/issues/405 -[#420]: https://www.free-decompiler.com/flash/issues/420 -[#421]: https://www.free-decompiler.com/flash/issues/421 -[#430]: https://www.free-decompiler.com/flash/issues/430 -[#397]: https://www.free-decompiler.com/flash/issues/397 -[#431]: https://www.free-decompiler.com/flash/issues/431 -[#169]: https://www.free-decompiler.com/flash/issues/169 -[#335]: https://www.free-decompiler.com/flash/issues/335 -[#404]: https://www.free-decompiler.com/flash/issues/404 -[#407]: https://www.free-decompiler.com/flash/issues/407 -[#399]: https://www.free-decompiler.com/flash/issues/399 -[#400]: https://www.free-decompiler.com/flash/issues/400 -[#398]: https://www.free-decompiler.com/flash/issues/398 -[#382]: https://www.free-decompiler.com/flash/issues/382 -[#396]: https://www.free-decompiler.com/flash/issues/396 -[#357]: https://www.free-decompiler.com/flash/issues/357 -[#391]: https://www.free-decompiler.com/flash/issues/391 -[#395]: https://www.free-decompiler.com/flash/issues/395 -[#334]: https://www.free-decompiler.com/flash/issues/334 -[#301]: https://www.free-decompiler.com/flash/issues/301 -[#383]: https://www.free-decompiler.com/flash/issues/383 -[#386]: https://www.free-decompiler.com/flash/issues/386 -[#367]: https://www.free-decompiler.com/flash/issues/367 -[#380]: https://www.free-decompiler.com/flash/issues/380 -[#292]: https://www.free-decompiler.com/flash/issues/292 -[#375]: https://www.free-decompiler.com/flash/issues/375 -[#378]: https://www.free-decompiler.com/flash/issues/378 -[#325]: https://www.free-decompiler.com/flash/issues/325 -[#210]: https://www.free-decompiler.com/flash/issues/210 -[#355]: https://www.free-decompiler.com/flash/issues/355 -[#313]: https://www.free-decompiler.com/flash/issues/313 -[#330]: https://www.free-decompiler.com/flash/issues/330 -[#332]: https://www.free-decompiler.com/flash/issues/332 -[#344]: https://www.free-decompiler.com/flash/issues/344 -[#295]: https://www.free-decompiler.com/flash/issues/295 -[#297]: https://www.free-decompiler.com/flash/issues/297 -[#307]: https://www.free-decompiler.com/flash/issues/307 -[#309]: https://www.free-decompiler.com/flash/issues/309 -[#310]: https://www.free-decompiler.com/flash/issues/310 -[#311]: https://www.free-decompiler.com/flash/issues/311 -[#327]: https://www.free-decompiler.com/flash/issues/327 -[#328]: https://www.free-decompiler.com/flash/issues/328 -[#333]: https://www.free-decompiler.com/flash/issues/333 -[#336]: https://www.free-decompiler.com/flash/issues/336 -[#338]: https://www.free-decompiler.com/flash/issues/338 -[#315]: https://www.free-decompiler.com/flash/issues/315 -[#123]: https://www.free-decompiler.com/flash/issues/123 -[#243]: https://www.free-decompiler.com/flash/issues/243 -[#326]: https://www.free-decompiler.com/flash/issues/326 -[#287]: https://www.free-decompiler.com/flash/issues/287 -[#290]: https://www.free-decompiler.com/flash/issues/290 -[#291]: https://www.free-decompiler.com/flash/issues/291 -[#294]: https://www.free-decompiler.com/flash/issues/294 -[#298]: https://www.free-decompiler.com/flash/issues/298 -[#296]: https://www.free-decompiler.com/flash/issues/296 -[#314]: https://www.free-decompiler.com/flash/issues/314 -[#316]: https://www.free-decompiler.com/flash/issues/316 -[#318]: https://www.free-decompiler.com/flash/issues/318 -[#319]: https://www.free-decompiler.com/flash/issues/319 -[#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 -[#261]: https://www.free-decompiler.com/flash/issues/261 -[#269]: https://www.free-decompiler.com/flash/issues/269 -[#274]: https://www.free-decompiler.com/flash/issues/274 -[#275]: https://www.free-decompiler.com/flash/issues/275 -[#258]: https://www.free-decompiler.com/flash/issues/258 -[#267]: https://www.free-decompiler.com/flash/issues/267 -[#286]: https://www.free-decompiler.com/flash/issues/286 -[#233]: https://www.free-decompiler.com/flash/issues/233 -[#235]: https://www.free-decompiler.com/flash/issues/235 -[#263]: https://www.free-decompiler.com/flash/issues/263 -[#264]: https://www.free-decompiler.com/flash/issues/264 -[#265]: https://www.free-decompiler.com/flash/issues/265 -[#266]: https://www.free-decompiler.com/flash/issues/266 -[#281]: https://www.free-decompiler.com/flash/issues/281 -[#251]: https://www.free-decompiler.com/flash/issues/251 -[#257]: https://www.free-decompiler.com/flash/issues/257 -[#259]: https://www.free-decompiler.com/flash/issues/259 -[#260]: https://www.free-decompiler.com/flash/issues/260 -[#268]: https://www.free-decompiler.com/flash/issues/268 -[#272]: https://www.free-decompiler.com/flash/issues/272 -[#276]: https://www.free-decompiler.com/flash/issues/276 -[#220]: https://www.free-decompiler.com/flash/issues/220 -[#284]: https://www.free-decompiler.com/flash/issues/284 -[#232]: https://www.free-decompiler.com/flash/issues/232 -[#253]: https://www.free-decompiler.com/flash/issues/253 -[#137]: https://www.free-decompiler.com/flash/issues/137 -[#242]: https://www.free-decompiler.com/flash/issues/242 -[#244]: https://www.free-decompiler.com/flash/issues/244 -[#203]: https://www.free-decompiler.com/flash/issues/203 -[#225]: https://www.free-decompiler.com/flash/issues/225 -[#236]: https://www.free-decompiler.com/flash/issues/236 -[#245]: https://www.free-decompiler.com/flash/issues/245 -[#247]: https://www.free-decompiler.com/flash/issues/247 -[#248]: https://www.free-decompiler.com/flash/issues/248 -[#254]: https://www.free-decompiler.com/flash/issues/254 -[#255]: https://www.free-decompiler.com/flash/issues/255 -[#256]: https://www.free-decompiler.com/flash/issues/256 -[#241]: https://www.free-decompiler.com/flash/issues/241 -[#238]: https://www.free-decompiler.com/flash/issues/238 -[#239]: https://www.free-decompiler.com/flash/issues/239 -[#240]: https://www.free-decompiler.com/flash/issues/240 -[#237]: https://www.free-decompiler.com/flash/issues/237 -[#217]: https://www.free-decompiler.com/flash/issues/217 -[#219]: https://www.free-decompiler.com/flash/issues/219 -[#224]: https://www.free-decompiler.com/flash/issues/224 -[#121]: https://www.free-decompiler.com/flash/issues/121 -[#207]: https://www.free-decompiler.com/flash/issues/207 -[#151]: https://www.free-decompiler.com/flash/issues/151 -[#171]: https://www.free-decompiler.com/flash/issues/171 -[#206]: https://www.free-decompiler.com/flash/issues/206 -[#208]: https://www.free-decompiler.com/flash/issues/208 -[#209]: https://www.free-decompiler.com/flash/issues/209 -[#229]: https://www.free-decompiler.com/flash/issues/229 -[#213]: https://www.free-decompiler.com/flash/issues/213 -[#221]: https://www.free-decompiler.com/flash/issues/221 -[#226]: https://www.free-decompiler.com/flash/issues/226 -[#227]: https://www.free-decompiler.com/flash/issues/227 -[#230]: https://www.free-decompiler.com/flash/issues/230 -[#172]: https://www.free-decompiler.com/flash/issues/172 -[#174]: https://www.free-decompiler.com/flash/issues/174 -[#175]: https://www.free-decompiler.com/flash/issues/175 -[#212]: https://www.free-decompiler.com/flash/issues/212 -[#185]: https://www.free-decompiler.com/flash/issues/185 -[#186]: https://www.free-decompiler.com/flash/issues/186 -[#197]: https://www.free-decompiler.com/flash/issues/197 -[#216]: https://www.free-decompiler.com/flash/issues/216 -[#168]: https://www.free-decompiler.com/flash/issues/168 -[#176]: https://www.free-decompiler.com/flash/issues/176 -[#177]: https://www.free-decompiler.com/flash/issues/177 -[#202]: https://www.free-decompiler.com/flash/issues/202 -[#173]: https://www.free-decompiler.com/flash/issues/173 -[#190]: https://www.free-decompiler.com/flash/issues/190 -[#129]: https://www.free-decompiler.com/flash/issues/129 -[#153]: https://www.free-decompiler.com/flash/issues/153 -[#180]: https://www.free-decompiler.com/flash/issues/180 -[#136]: https://www.free-decompiler.com/flash/issues/136 -[#179]: https://www.free-decompiler.com/flash/issues/179 -[#144]: https://www.free-decompiler.com/flash/issues/144 -[#164]: https://www.free-decompiler.com/flash/issues/164 -[#167]: https://www.free-decompiler.com/flash/issues/167 -[#170]: https://www.free-decompiler.com/flash/issues/170 -[#178]: https://www.free-decompiler.com/flash/issues/178 -[#181]: https://www.free-decompiler.com/flash/issues/181 -[#182]: https://www.free-decompiler.com/flash/issues/182 -[#183]: https://www.free-decompiler.com/flash/issues/183 -[#184]: https://www.free-decompiler.com/flash/issues/184 -[#189]: https://www.free-decompiler.com/flash/issues/189 -[#191]: https://www.free-decompiler.com/flash/issues/191 -[#195]: https://www.free-decompiler.com/flash/issues/195 -[#196]: https://www.free-decompiler.com/flash/issues/196 -[#198]: https://www.free-decompiler.com/flash/issues/198 -[#200]: https://www.free-decompiler.com/flash/issues/200 -[#201]: https://www.free-decompiler.com/flash/issues/201 -[#166]: https://www.free-decompiler.com/flash/issues/166 -[#165]: https://www.free-decompiler.com/flash/issues/165 -[#63]: https://www.free-decompiler.com/flash/issues/63 -[#67]: https://www.free-decompiler.com/flash/issues/67 -[#117]: https://www.free-decompiler.com/flash/issues/117 -[#127]: https://www.free-decompiler.com/flash/issues/127 -[#134]: https://www.free-decompiler.com/flash/issues/134 -[#155]: https://www.free-decompiler.com/flash/issues/155 -[#142]: https://www.free-decompiler.com/flash/issues/142 -[#146]: https://www.free-decompiler.com/flash/issues/146 -[#130]: https://www.free-decompiler.com/flash/issues/130 -[#132]: https://www.free-decompiler.com/flash/issues/132 -[#145]: https://www.free-decompiler.com/flash/issues/145 -[#147]: https://www.free-decompiler.com/flash/issues/147 -[#148]: https://www.free-decompiler.com/flash/issues/148 -[#152]: https://www.free-decompiler.com/flash/issues/152 -[#156]: https://www.free-decompiler.com/flash/issues/156 -[#157]: https://www.free-decompiler.com/flash/issues/157 -[#158]: https://www.free-decompiler.com/flash/issues/158 -[#159]: https://www.free-decompiler.com/flash/issues/159 -[#160]: https://www.free-decompiler.com/flash/issues/160 -[#162]: https://www.free-decompiler.com/flash/issues/162 -[#163]: https://www.free-decompiler.com/flash/issues/163 -[#149]: https://www.free-decompiler.com/flash/issues/149 -[#150]: https://www.free-decompiler.com/flash/issues/150 -[#119]: https://www.free-decompiler.com/flash/issues/119 -[#101]: https://www.free-decompiler.com/flash/issues/101 -[#114]: https://www.free-decompiler.com/flash/issues/114 -[#135]: https://www.free-decompiler.com/flash/issues/135 -[#141]: https://www.free-decompiler.com/flash/issues/141 -[#102]: https://www.free-decompiler.com/flash/issues/102 -[#124]: https://www.free-decompiler.com/flash/issues/124 -[#128]: https://www.free-decompiler.com/flash/issues/128 -[#131]: https://www.free-decompiler.com/flash/issues/131 -[#104]: https://www.free-decompiler.com/flash/issues/104 -[#113]: https://www.free-decompiler.com/flash/issues/113 -[#133]: https://www.free-decompiler.com/flash/issues/133 -[#140]: https://www.free-decompiler.com/flash/issues/140 -[#108]: https://www.free-decompiler.com/flash/issues/108 -[#105]: https://www.free-decompiler.com/flash/issues/105 -[#109]: https://www.free-decompiler.com/flash/issues/109 -[#106]: https://www.free-decompiler.com/flash/issues/106 -[#107]: https://www.free-decompiler.com/flash/issues/107 -[#110]: https://www.free-decompiler.com/flash/issues/110 -[#103]: https://www.free-decompiler.com/flash/issues/103 -[#111]: https://www.free-decompiler.com/flash/issues/111 -[#96]: https://www.free-decompiler.com/flash/issues/96 -[#98]: https://www.free-decompiler.com/flash/issues/98 -[#99]: https://www.free-decompiler.com/flash/issues/99 -[#100]: https://www.free-decompiler.com/flash/issues/100 -[#85]: https://www.free-decompiler.com/flash/issues/85 -[#79]: https://www.free-decompiler.com/flash/issues/79 -[#92]: https://www.free-decompiler.com/flash/issues/92 -[#93]: https://www.free-decompiler.com/flash/issues/93 -[#94]: https://www.free-decompiler.com/flash/issues/94 -[#95]: https://www.free-decompiler.com/flash/issues/95 -[#86]: https://www.free-decompiler.com/flash/issues/86 -[#87]: https://www.free-decompiler.com/flash/issues/87 -[#88]: https://www.free-decompiler.com/flash/issues/88 -[#89]: https://www.free-decompiler.com/flash/issues/89 -[#82]: https://www.free-decompiler.com/flash/issues/82 -[#78]: https://www.free-decompiler.com/flash/issues/78 -[#81]: https://www.free-decompiler.com/flash/issues/81 -[#84]: https://www.free-decompiler.com/flash/issues/84 -[#83]: https://www.free-decompiler.com/flash/issues/83 -[#65]: https://www.free-decompiler.com/flash/issues/65 -[#48]: https://www.free-decompiler.com/flash/issues/48 -[#53]: https://www.free-decompiler.com/flash/issues/53 -[#66]: https://www.free-decompiler.com/flash/issues/66 -[#68]: https://www.free-decompiler.com/flash/issues/68 -[#69]: https://www.free-decompiler.com/flash/issues/69 -[#75]: https://www.free-decompiler.com/flash/issues/75 -[#73]: https://www.free-decompiler.com/flash/issues/73 -[#62]: https://www.free-decompiler.com/flash/issues/62 -[#72]: https://www.free-decompiler.com/flash/issues/72 -[#64]: https://www.free-decompiler.com/flash/issues/64 -[#38]: https://www.free-decompiler.com/flash/issues/38 -[#56]: https://www.free-decompiler.com/flash/issues/56 -[#57]: https://www.free-decompiler.com/flash/issues/57 -[#58]: https://www.free-decompiler.com/flash/issues/58 -[#45]: https://www.free-decompiler.com/flash/issues/45 -[#50]: https://www.free-decompiler.com/flash/issues/50 -[#51]: https://www.free-decompiler.com/flash/issues/51 -[#52]: https://www.free-decompiler.com/flash/issues/52 -[#47]: https://www.free-decompiler.com/flash/issues/47 -[#42]: https://www.free-decompiler.com/flash/issues/42 -[#39]: https://www.free-decompiler.com/flash/issues/39 -[#40]: https://www.free-decompiler.com/flash/issues/40 -[#44]: https://www.free-decompiler.com/flash/issues/44 -[#36]: https://www.free-decompiler.com/flash/issues/36 -[#43]: https://www.free-decompiler.com/flash/issues/43 -[#46]: https://www.free-decompiler.com/flash/issues/46 -[#3]: https://www.free-decompiler.com/flash/issues/3 -[#37]: https://www.free-decompiler.com/flash/issues/37 -[#34]: https://www.free-decompiler.com/flash/issues/34 -[#35]: https://www.free-decompiler.com/flash/issues/35 -[#32]: https://www.free-decompiler.com/flash/issues/32 +# Change Log +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added +- [#1240] AS search using multiple threads when parallel speedup is enabled +- [#1308] Search by all P-code files in AS3 +- [#1333] Exporting sprites as swf files +- [#1365] Allow to configure all types of configuration settings from command line +- [#1369] Allow zoom in sprite (and button) export + +### Fixed +- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter +- [#1343] AS 1/2 direct editation critical bug +- [#1348] Cannot properly export frame with cyrillic symbols to SVG +- [#1354] Various FLA export problem fixes +- [#1367] Raw edit conditional type fix. +- [#1401] SVG export: duplicate pattern IDs fixed +- [#1402] SVG export: certain font characters not exported properly fixed +- [#1430] AS 1/2 deobfuscation fixes + +## [10.0.0] - 2016-12-24 +### Added +- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only +- optional AS3 direct editation with Flex SDK +- AS3 p-code editing - metadata read/write support +- AS3 p-code editing - end of the block command like in RABCDasm +- AS3 p-code editing - popup docs for more than instructions +- Debugger - New columns for variable details - scope, flags, trait +- Debugger - Add watch feature +- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases +- Deobfuscation Tool - Fix colliding trait/classes via toolbar command +- Auto rename identifiers option now fixes colliding trait/classes aswell +- [#1254] FLA export - detecting scripts on AS3 timeline +- [#907] FFDec Library JAR file has version inside it. +- [#1311], [#1313] actionScript source font size +- Display warning when library version and GUI version mismatch +- Changelog file +- [#1308] Search by all P-code files (AS 1/2 only) + +### Changed +- [#1189] AS3 - sort imports to have same order always +- GUI: AS3 P-code header show actual trait type and method type +- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" +- Set advance values button has confirm dialog with information +- [#1274] Linux package no longer requires Oracle Java only +- Library now packaged inside ZIP file + +### Fixed +- P-code docs formatting fix +- Export dialog - handling sprite and SWF frames correctly +- [#1275] debugger - show local variables fixes +- AS3 p-code editing - popup docs correctly displayed when label on line start +- [#1278] replacing DefineBits error +- [#1281] DefineFont 2/3 getting character advance value when replacing fix +- Set advance values button - Do not set advance if the char cannot be displayed in source font +- AS3 Goto declaration for single character names +- Identifier renaming for top level classes +- AS3 direct editation not correctly saving local register names +- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir +- Mac OS X installer fix (.pkg) +- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers +- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix +- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes +- [#1302] Callpropvoid instruction docblock not correct +- [#1309] recent files not getting updates +- [#1312] faster colliding usages finder +- [#1303] garbled text when exporting frame with text +- [#1314] user interface: button order +- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) +- [#1323] Audio playback fails + +## [9.0.0] - 2016-08-12 +### Added +- Instance metadata (AMF3) editing in PlaceObject4 +- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) +- [#1171] Export stroke scale to FLA +- FLA export - check invalid unicode characters +- [#1170] Extract from memory in commandline +- Reload one vs Reload all buttons +- ABC: Float and Float4 support +- AS3 p-code instruction documentation in GUI +- [#1241] Settings to show original bytes in hex view +- Search in dump view +- Jump to resources view from hex view +- Show warning on 32bit JRE + +### Changed +- [#1162] improved opening loaded SWF files +- Flash Viewer - skip frames when not on time +- [#1199] Automatically import alpha channel to JPEG3/4 from PNG + +### Fixed +- [#1151] Filters on texts fixed +- [#1128] Adding characters to font fixed (FontAlignZones not removed) +- [#1163] Clicking open->file makes program buggy +- Refresh tree after raw edit +- [#1172] Text double escape fix +- [#1174] Change language fix +- some AS2 deobfuscation fixes +- [#1183] Index out of bounds fix +- Implicit coersion on binary/unary opfix +- debugger: corect display variable values through getters +- Multiple XLF export fix +- [#1193] FLA export - text tag advance fix, one layer shape fix +- [#1193] FLA export - smoothed image detection, export raw JPEG data +- [#1193] Export space character to TTF correctly +- [#1200] Previous search text selected when quick find +- Flash viewer: aspect ratio on startup fix +- [#1198] Saving trait slot const value +- Zoom parameter commandline fixed +- [#1205] clipping fixed +- [#1194] Wrong sound effects in FLA +- [#1210] Frame Export fix +- Improved/fixed go to declaration in AS3 +- [#1217] PCode window not in same position as AS +- Hide memor search on non windows platform +- [#1244] Incorrect showing of NOP instructions +- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back +- [#1241] File content is different from hex view +- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont +- [#1236] won't open fixed +- [#1251] SWF not same after export XML and import back +- [#1265] Error during export +- [#1268] Font export - Using second glyph when two glyphs for one character found +- [#1268] GFX compacted font - fixed advance values on export + +## [8.0.1] - 2016-02-20 +### Changed +- FFDec debug tab in advanced settings moved to other tabs + +### Fixed +- [#1161] AS1/2 deobfuscation broken +- AS1/2 Simplify expressions fix + +## [8.0.0] - 2016-02-18 +### Added +- Debugger - AS1/2 Show registers +- Debugger - display variables in the tree structure +- Debugger - set value of variable +- Debugger - AS1/2 View constantpool +- Debugger - P-code level debugging for both AS1/2 and AS3 +- Basic SVG import for shapes +- Simplify expression setting +- [#1118] Loading characters through ImportAssets - show as readonly +- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 +- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) +- [#1121] Ability to save binary data by its name +- [#1052] Add object to existing frame +- Allow adding tag to main timeline +- AS1/2: Ctrl+click to declaration of variables, registers +- Allow trait specification in pcode import +- Icons for tag types in Dump view +- Show error message when a text tag is invalid (glyph index problem) +- AS3 direct editation - store local register names in debug info = allow to rename them + +### Changed +- New application icon and splash screen +- [#1145] AS3 better declaration type detection, better convert_x instruction handling +- Binary export - use .swf extension for swf files +- Better tree labels in generic tag editor (Raw edit) +- [#758] Allow zooming more than preview area in internal viewer + +### Fixed +- [#1096] FLA export - pretty print +- [#1104] AS1/2/3 Script Importat not working +- [#1107] Text Offset Incorrect fixed +- [#1106] New Shapes replace function fix +- [#1113] It takes too long to switch between rendered sprite +- [#1075] Lenght of DefineText in some cases +- [#1127] autoRenameIdentifiers is not supported in CLI mode +- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed +- [#1103] Foreach variables fixes +- AS3 Switch fixes +- Default clause position in switch +- [#1133] Incorrect frame order for nested sprite +- [#1135] Handle try "to" in p-code correctly +- Font wideOffsets,wideCodes fixed in DefineFont2/3 +- AS3: super method call +- [#1138] All exported videos are the same file which may be broken +- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages +- [#1137] running flashplayer(debugger) executable in Linux/MacOs +- [#1144] Command line argument renameInvalidIdentifiers +- [#1145] double not (!!) not removed +- [#1147] Sprite is exported incorrectly +- [#1148] handing end of stream exception in abc reader, loc exception +- [#1152] Font info tag modified tag was not set => saved swf was corrupt +- [#1154] Some 32bit JRE problems - program won't start +- [#1145] Correct precedence handling on binary operators +- [#116] not resolving unusual tags in DefineSprite + +## [7.1.2] - 2015-12-03 +### Fixed +- AS3 debugger start halt fix +- AS1/2 debugger fix on nondebug enabled SWFs +- AS1/2 debugger fix for functions +- Debug menu item enabled fix +- AS3 local reg index fix +- Advanced settings calendar +- AVM2 instructions in hex view +- [#1070] Incorrect switch decompilation +- [#1098] Import XML fix + +## [7.1.1] - 2015-11-23 +### Fixed +- Critical debugger fix - widelines + +## [7.1.0] - 2015-11-23 +### Added +- AS1/2 debugger +- Breakpoint/IP marker on line beginning + +### Changed +- Starting debugger on demand +- Installer message about playerglobal is only warning now + +### Fixed +- [#1033], [#1083] AS3 deobfuscation issues +- [#1091] AS 1/2 direct editation saving + +## [7.0.1] - 2015-11-18 +### Fixed +- Debugger: Adding breakpoint if script initializer not displayed + +## [7.0.0] - 2015-11-18 +### Added +- AS3 Debugger - breakpoints, stepping, show variables +- Faster AS3 direct editation + +### Changed +- Better Configuration of flashplayer paths + +### Removed +- Removed old "debugger" buttons +- Removed search from browsers cache - inactual code + +### Fixed +- Many AS3 direct editation related bugs +- [#1076] export fix + +## [6.1.1] - 2015-10-30 +### Fixed +- Deobfuscate AS3 metadata +- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix +- [#1063] AS3 direct edit - script initializer fix, generating method names +- XML export/import fixes +- [#1019] Namespace imports fix +- AVM2 code execution fix +- [#1016] AS3 direct editation fixes +- [#1010] AS2 direct editation - internal and override is not a reserved word +- [#1008] pushshort instruction diassembly +- [#1004] this/super can be AS1/2 variable +- [#933] AS3 allow numbers as object literal keys + +## [6.1.0] - 2015-10-26 +### Added +- Open other loaded SWFs during playback (useful for loaders) +- Export uncompressed data from dump tree +- Print performance statistics from commandline +- [#1062] Editing/displaying script initializers +- Enable debugging on SWF file (commandline) + +### Changed +- Faster syntax highlighting +- Better AS1/2 deobfuscator +- [#418] AS3 deobfuscator improved + +### Fixed +- AS call method fix (first parameter is "this") +- [#1047] open all scripts folders +- [#812] decompile fail +- [#1056] deltaY missing when adding a new StraightEdgeRecord +- [#1057] Editing as in editor results in package name moving +- [#991] GUI export +- [#689] Ignore Case not correctly toggled +- [#1060] reversed and/or detection in some cases +- [#1037] isXML call + +## [6.0.2] - 2015-09-12 +### Added +- AS3: Display and direct edit trait Metadata +- Allow to specify tag type on image or shape import +- Convert image tags from commandline +- [#489] Hex decode very large integers +- Add new tags without show empty folders +- Dependent characters in basic tag info +- [#1007] replace bytearray in raw editing +- Italian translation + +### Changed +- AS2 parser - add string to constant pool if there is not enough space +- [#1044] AS2 - order scripts by physical location, name by offset + +### Removed +- Deprecated commandline parameters removed + +### Fixed +- JNA problems on some JDKs +- [#947] Marklevels errors ignored 17a94b7 +- [#953] Mac application permission fix (maybe) +- [#954] IndexOutOfBounds fix +- [#950] AddTrait setting modified fix +- [#945] AS1/2 directeditation fix - member named as global function +- [#957] AS1/2 IndexOutOfBounds fix +- [#956] Invalid jump offsets warning +- [#968] Sprites export with wrong coloring +- [#978] case sensitivity of filenames +- [#955] AS2 decompilation problem +- Image alpha fixes +- [#966] Go to document class +- [#991] scripts exporting +- [#999] save as fla +- [#1000] image export for malformed JPEG3 tags +- [#1017] store alchemy opcodes with wrong order +- [#1030] stack overflow fix + +## [6.0.1] - 2015-07-06 +### Added +- Special §§ instructions marked as red +- [#949] Replace alpha channel from commandline +- AS3 deobfuscation from commandline +- Option to ignore FlashCC/Alchemy packages + +### Changed +- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements + +### Fixed +- AS1/2 deobfuscation fixed +- [#952] Not loading SWF without extension + +## [6.0.0] - 2015-07-04 +### Added +- New AS3 deobfuscation method +- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... +- Allow reload FFDec when no SWF is opened +- [#858] Allow to set compression type in header +- [#905] Show codec details for sound items +- Better alchemy/DomainMemory instruction handling +- Better obfuscated names handling +- [#920] Export instance name to SVG +- [#921] Export html DefineEditText to SVG +- Open multiple files with drag and drop +- Better "multi packs" handling (Alchemy) +- SWF version 29 to flash player 18 mapping +- ImportAssets2 sha1 field +- [#924] Sprites to image from commandline +- AS1/2 direct editation big numbers fix +- Allow to add FILTERs and SHAPERECORDs in generic tag editor +- Enable close all menu when no swf is selected +- Restore modified state even when something goes wrong +- Some old tags added + +### Changed +- AS decompilation highly improved +- Better &&, || handling +- DoABCDefine renamed to DoABC2 +- Separated Sprite export settings + +### Deprecated +- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) + +### Fixed +- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. +- Few menu issues +- [#895] Correct handling CMYK JPEG +- [#884] AS direct edit assignment +- [#899] Show script after AS3 direct editation +- Some AS1/2 parser problems +- [#903] FLA export - fix for missing fontname, lastframe +- [#855] AS3 direct edit - for..in variable declaration fix +- [#850] Constant initialization for same multinames +- [#832] AS3 direct edit - other ABCs resolving fix +- [#904] Cannot export images +- [#910] Missing instructions +- Opening not existent files on restoring last session +- [#922] Edit text leading +- Put image before shape on shape replace +- [#916] Replacing Shape corrupts SWF +- JRE setup parameters fixed +- [#938] Parallel speedup limit fix + +## [5.3.0] - 2015-05-25 +### Added +- Generic tag editor: improved table editing (import/export assets tags, etc.) + +### Changed +- Classic (nonribbon) UI improved - has same items as Ribbon UI +- Icons improvements +- Disabling menu items when work in progress + +### Fixed +- [#897] Classic UI fix + +## [5.2.0] - 2015-05-22 +### Added +- UI8 editbox for swf version in header panel +- Basic tag information panel + +### Changed +- AS1/2: Shown only the constant pool(s) in pcode editor +- Do not allow to chage tag tree selection, when current tag is under editing +- Faster bitmap export +- Using less memory when playing sounds +- Error message changed when the opened file is not swf + +### Fixed +- [#470] panels size after resizing from/to full screen +- [#877] A small glitch after search in AS +- [#878] small glitch after saving P-code or swf file +- [#470] glitch +- [#845] If frame consist 2 DoAction then it imports only first one +- pdf export (when no frame exists) +- text rendering (alpha channel was ignored), +- bmp export (paddings when width%2==1) +- [#883] -dumpSWF option does not work anymore +- [#882] Canvas export border size +- [#760] Internal viewer line linear gradient fill is not working +- [#887] error on export a special swf's P-CODE +- Extensions of exported images fixed + +## [5.1.0] - 2015-05-04 +### Added +- Allow to copy/move multiple tags, and dependencies +- [#842] For reconstruction if debug line info present +- [#841] Loop control for sound preview +- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button +- Scrollbar added to fontpanel +- SWF header editor +- Configure what object types to export in exportdialog + +### Changed +- Better gif exporter +- [#772]: closing loading dialog now cancels the loading of the swf +- [#762] export pcode with different extension + +### Fixed +- CRITICAL: Update System Bug causing updates not working +- [#862] AS3 asm: do not read beyond return/throw instructions +- [#865], [#613]: ribbon prefered width fix +- [#868] export path fix, allow to export buttons +- [#865] TagTree font size problem on high resolution screens +- [#713],[#807] Installer for 4.0+ fails to access Adobe Website +- [#728] Large fonts, [#857] add scroll on DefineFont3 + +## [5.0.2] - 2015-04-18 +### Added +- Reopen last session + +### Fixed +- ffdec.sh file line endings fixed + +## [5.0.1] - 2015-04-18 +### Fixed +- [#860]: Opening bundle (zip, swc, any binary file) files fixed + +## [5.0.0] - 2015-04-18 +### Added +- Color skins +- [#824] Mac OS X package +- [#809] Move left,right buttons for DefineTexts using translatex parameter +- [#805] Editor mode for DefineTexts +- [#825] Hotkeys for next/previous DefineText +- Export/Import symbol classes/export asset tags +- Frame export progress +- [#737] Single file script export +- Displaying changed AS3 scripts in GUI as bold +- Additional character info tags placed under character node +- New icons for other tags (metadata,fileattributes,setbackground,place/remove) +- Metadata tag editor + +### Changed +- Default color skin altered +- [#350] Allow only one running instance (Windows only, can be turned off) +- SWFs in zip based bundles (SWC for example) can be modified & saved +- Performace improvements +- More compact SWF-XML format +- Marking changed parentnodes as bold too + +### Fixed +- [#814] Exporting with scale problem +- [#816] P-code not shown after class initializer trait selection +- [#835] Static initializer improvements +- AS3 direct editing - local register decrement fix +- AS3 direct editing - maintain register order/names +- [#836] AS1/2/3 Correct expression precedence handling +- AS3 preincrement +- [#848] Correct toggling text switches +- [#817] AS1/2 for..in variable declaration +- [#849] Attribute member +- [#852] Ignore case for russian characters +- [#837] AS3 try..finally without catch + +## [4.1.1] - 2015-02-21 +### Added +- Export/Import XML added to ribbon menu +- Few GUI enhancements +- Undo tag changes context menu + +### Changed +- Java 8 now required + +### Removed +- Removed support for Java below 8 + +### Fixed +- [#811] export ActionScript + +## [4.1.0] - 2015-02-18 +### Added +- XML export/import +- confirmation dialogs added +- Add support for non-standard ABC-compressed SWF file +- [#745] Copy tag to another SWF +- [#803] Align text in DefineText + +### Changed +- performance improvements +- [#758] Zoom to fit is dynamic + +### Fixed +- [#738] Frame export +- [#742] Can't edit frames +- [#747] Move tag to adds extra frame +- [#749] Internal viewer Sprite fill color +- [#752] Sound is not stopped +- [#753] Reload swf +- [#759] Decompilation § symbol +- [#766] Can't extract all resources +- [#768] Super calls not being correctly recognized +- [#773] Scripts associated with ClipActions are not shown +- [#776] Stop working after setting "number of threads" to 0 +- [#783] No OK box when edited script or text was saved +- [#785] Text search. Remember last choise, Unicode case insensitive search +- [#787] Search in AS bug (when navigating to searched results) +- [#788] Add DefineCompactedFont Tag to gfx file +- [#790] Impossible to change letters under a font +- [#794] Font extraction fails sometimes +- [#798] Close file streams after export, exporting progress +- [#800] Unexpected deleted carrier return in DefineEditText +- Build fix on Linux +- Fis Startup Script for OpenJDK +- Other minor fixes + +## [4.0.5] - 2014-12-01 +### Added +- Escape control characters in strings, identifier names +- [#676] import text error messages / logging enhancement +- [#734] \xAB escapes, \uABCD escapes +- [#687] AS3 - allowing p-code comments on separate line +- [#709] Text Export to Single File with custom filename + +### Fixed +- [#732] Random freezing - JavactiveX library updated. +- [#730] Not working without ActiveX fix on Windows +- [#735] Automatic deobfuscation not correctly switched (required restart) + +## [4.0.4] - 2014-11-23 +### Changed +- better file cache, removing unneccessary temp files + +### Fixed +- obfuscated identifiers + +## [4.0.3] - 2014-11-23 +### Added +- [#722] Go to next/previous frame +- BMP file format export (images,frames,shapes) and import(images) + +### Fixed +- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type +- [#715] namespace resolving fix +- [#635],[#726] placing cursor inside Unicode characters + +## [4.0.2] - 2014-11-22 +### Added +- show frame number during play +- flashplayer - show controls for DefineSprite +- goto frame +- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design + +### Changed +- [#720]: edited shape tag is not marked as modified after replacing +- reorganized about dialog + +### Fixed +- [#719] null swf name in Proxy after cancelling rename dialog +- flashplayer - font display +- [#723]: saving swf with invalid referenced characters +- DefineCompactedFont paging +- [#288] Less memory usage during FLA export +- Corrected syntax hilighting for AS3 P-code + +## [4.0.1] - 2014-11-12 +### Fixed +- [#713] Installer can continue when no file can be downloaded +- Fixed shapes +- Checking for updates moved to separate thread + +## [4.0.0] - 2014-11-11 +### Added +- [#677] Zoom level in export settings +- internal viewer: linear/srgb gradients +- zooming buttons for flashplayer/internal viewer +- stroke scaling modes for canvas export +- create snapshot button +- [#389] Selecting font face on import +- [#701] Importing font from TTF file +- Reorganized font panel +- [#707] Debugger for logging messages +- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets +- [#685] Getting local register names from debug info can be disabled +- Adding new tags +- [#698] Allowing unicode letters in identifiers +- [#710] Information about deobfuscation in error comments +- One EXE for 32/64 bit, uses percentage memory. +- EXE SplashScreen +- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc +- Config setting to load inner SWFs automatically +- Replace shape with image + +### Changed +- better FlashPlayer integration using JavactiveX library +- Faster building tag tree +- Faster timeline construction +- [#711] Improved folder view - faster and with correct context menu + +### Fixed +- AS2 deobfuscation fixes +- AS2 loops fix +- [#681] Linux script fixes +- AS2 constructor name fix +- [#688] AS3 direct edit fixes +- [#691] AS3 p-code reading/saving fix +- AS3 direct edit -submethod name resolve fix +- frames to html canvas fix +- [#524] Mask layer not applied when nonempty script layer +- [#663] AS3 imports fixes +- Font export of dot character +- Font panel Yes button fixed +- [#702] GFX font reading fix +- Better obfuscated names handling +- [#539] for(each) in declaration fixes + +## [3.0.0] - 2014-09-20 +### Added +- Separated GUI (GPL) and library (now LGPL) +- Editing obfuscated identifiers via new paragraph(§) syntax +- Timeline View with preview and object hilighting +- Show GFX data in dump view +- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline +- Dump view - selecting node +- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption + +### Removed +- Removed deprecated commandline export formats (see --help) + +### Fixed +- FileAttributes tag reading fix +- [#649] GFX reading fixed +- [#656] Search in memory - 64 bit processes fix +- [#661] scripts not showing +- [#664] expanding fillStyles in raw edit +- [#668] add missing character fix, text tags fix +- [#674] texts hilighting initialization fix +- [#675] AS1/2 and/or operator compilation +- [#632] Locking file after opening (cannot save, etc.) +- [#651] Unnecessary removing expression killed in unreachable part +- [#678] Windows batch file paths fixed +- [#672] Disabling transparency slider on RGB only selection +- [#684] Sound streams inside DefineSprites, soundstream handling + +## [2.1.4] - 2014-08-23 +### Added +- AS1/2: New method for deobfuscation (can be switched off in settings) +- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters + +### Fixed +- [#647] Skipping FileAttributesTag with Parallel speedup on +- [#648] Export from embedded SWF + +## [2.1.3] - 2014-08-18 +### Added +- Show "save" and "saveas" in application menu +- Saving data range in dump view +- Show actions, abcdata in dumpview (context menu on the tree node) +- [#612] show color in hex format + +### Changed +- Faster dump info collecting (less memory) +- Allow selecting multiple files in open file dialog + +### Fixed +- [#623] ffdec.sh UNIX file endings, executable +- [#624] search in embedded swf files +- [#632] AS1/2 Unnecessary GetVariable before NewObject +- [#627] filter swf not working +- LZMA saving +- Export pcode&hex from commandline +- [#640] text import fixed, ignore BOM + +## [2.1.2] - 2014-07-20 +### Added +- Dump view +- Context menu: Jump to character, raw edit all tags +- Catalan translation +- SWF header display + +### Fixed +- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes +- [#592] AS3 Multiname resolving in P-code causing different bytecode +- [#585] AS3 moving popped values to output +- [#578] Always on top fixed on search results +- [#501] GotoFrame2 fix +- [#616] Frames to PNG export +- Export context menu +- [#559] Bitmap export opacity +- [#401] Placeobject 3/4 fix +- [#593] Return object newline +- [#594] Setting for curly brace + +## [2.1.1] - 2014-06-05 +### Added +- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers +- AS1/2 direct edit - global functions improvements +- AS1/2 negate operator, unary minus operator +- Opening SWFs in BinaryData tags +- AS1: Old string operators support, and/or, <> operator (editation) +- Statusbar loading animation improved +- [#579] AS3 direct editation - removing old class/methods from ABC +- remove character without the dependencies (remove only the place/remove tags) +- Running on system with no home directory +- [#428] PDF export (as images only) +- Commandline FlashPaper to PDF export +- Select frames / Characters commandline options + +### Changed +- [#337] quickfind visibility improved +- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) + +### Fixed +- [#576] AS1/2 direct editation: DefineFunction2 fix +- AS1/2 property fix +- AS1/2 typeof operator fix +- [#250] line spacing fix +- PlaceObject 3-4 className +- [#579] AS3 direct editation bugfixes - property resolving, integer values +- Morphshape canvas export fix +- Canvas export fix - closing path +- [#580] Rename invalid identifiers commandline fix +- [#510] JSyntaxPane find and replace dialog wrap around fix +- No more frame caching during export => memory saving (like [#583]) +- [#586] DropShadow filter fix +- Canvas export colortransform fix + +## [2.1.0 update 2] - 2014-05-08 +### Added +- AS3 decompilation/editation: Vector initializers +- AS3 direct editation: more classes in one file + +### Fixed +- [#574] DefineSprite editing fix +- Various AS3 direct editation fixes + +## [2.1.0 update 1] - 2014-05-05 +### Added +- Portugese-brasilian translation + +### Changed +- HTML Canvas export improvements + +### Fixed +- Various AS3 direct editation bugs, like [#570] + +## [2.1.0] - 2014-05-01 +### Added +- AS3 direct editation (Experimental!) +- Frames SVG Export +- Shape/MorphShape/Frames HTML 5 Canvas Export +- [#559] morphshapes as animated SVG +- [#563] Single file text export/import +- Font WOFF export +- Advanced settings dialog with tabs, config names, descriptions + +### Fixed +- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments +- Internal viewer: Filters fix + +## [2.0.1 update 2] - 2014-04-05 +### Fixed +- [#557] AS3 null namespace fix - p-code not working + +## [2.0.1 update 1] - 2014-04-04 +### Fixed +- [#556] Goto main class on startup fix +- [#557] Nullpointer fix (private namespaces) + +## [2.0.1] - 2014-04-03 +### Added +- Thumbnail view +- Font TTF export +- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) +- Expand all context menu +- Internal viewer: Button mouse move and click handling +- Playing sounds without flash player +- Internal viewer: Sounds on stage +- All sounds to WAV export +- Internal viewer: Showing texts, dynamic text border/fill +- [#504]: Unicode characters in JSyntaxPane +- Internal viewer: showing object under cursor +- Folder icons +- Sound/Image format on command line. +- Removing placeobject tags +- Removing frames +- AS: "elseif" statements +- Code formatting: space before parenthesis + +### Changed +- Single frames animated. + +### Fixed +- [#529] limit the number of displayed binaryData bytes +- [#538] Interface are sometimes dynamic +- [#537] super is sometime preceded by a dot +- [#540] Saving SWF changes very large static uint values +- [#387] Frames preview bugged +- AS:loop mismatch fix on parallel speedup +- [#552] Some timeout exceptions +- [#494] Fixed nightly builds updates + +## [2.0.0] - 2014-03-02 +### Added +- Generic tag tree editor +- Timeline view (stub only) +- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) +- [#513]: command line option to extract swf from binary file +- Configurable code formatting (Indentation + brace position) +- [#262] Export FLA: Font character ranges export +- Configurable checking for updates + +### Changed +- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes +- Improved commandline usage +- Automatic deobfuscation default value set to False (See News on webpages) +- Check for updates can be configured to inform about Nightly builds aswell + +### Deprecated +- Some commandline options are now deprecated, see --help + +### Fixed +- [#499] Cannot save via Proxy fixed +- [#504] font name reading fixed +- [#508] Support for OS without GUI +- [#305] Export FLA: empty sound layers +- [#312] Export FLA: Improved Shape/MorphShape fix +- [#503] Export FLA: Smoothing invalid shapes +- [#401] Invalid GFX tags in non GFX files +- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues +- [#361] FFDec icon is not visible on application start +- [#392] Video stream data fix +- [#516] AS3 P-code editor - Null name namespace handling + +## [1.8.1 update 1] - 2014-02-02 +### Fixed +- [#495] font embedding fix +- [#496] date format in new version dialog +- cosmetic changes + +## [1.8.1] - 2014-01-30 +### Added +- [#299] replace DefineBits images +- [#303] open folder with exported FLA +- [#324],[#346] SWC/zip/other binary file support +- [#371] detailed logging +- [#426] command line switch to rename identifiers +- [#457] clear recent opened files list +- [#458] save selected system font for swf fonts +- [#460] text editor: do not scroll to the end automatically +- [#462] font embedding dialog: show more sample characters +- [#463] global search in texts +- [#465] make font properties editable +- [#466] font preview + +### Changed +- [#369] new SVG and preview image rendering +- [#390] refresh font list without reloading the application +- [#453] update texts aftert adding new character to a font tag +- [#459] remember text panel splitter position +- [#461] font panel gui redesigned + +### Fixed +- [#451] dialog windows are not on the center of the screen +- [#454] Text syntax highlighting +- [#455],[#465] classic interface issues +- [#474] changeing language only available one time +- [#477] log window localization +- [#481] SVG export fix +- [#484] Oversized advance value after editing DefineText with DefineFont2 font +- [#493] missing search results + +## [1.8.0 update 1] - 2013-12-27 +### Added +- [#453] refresh (edit+save action) all texts button + +### Fixed +- Flash panel and font panel fixed + +## [1.8.0] - 2013-12-27 +### Added +- [#350] Allow to open multiple SWFs +- [#365] Filter fake SWFs during memory search +- [#366] Allow to sort the result list in memory search window +- [#429] Auto rename invalid identifiers setting +- [#447] Non-ribbon interface + +### Fixed +- [#354] Infinite decompilation fixed +- [#438] Case sensitive Command line arguments fixed +- [#436] Saving actionscript fixed +- [#446] Precedence issue fixed +- [#451] Dialogue window positions on a multi-monitor configuration fixed + +## [1.7.4 update 1] - 2013-12-05 +### Added +- [#426] Command line parameter for renaming invalid identifiers + +### Fixed +- [#427] Exception on linux fixed +- [#405], [#420], [#421] Some decompilation issues fixed +- [#430] Configuration default value problem fixed +- [#397], [#431] Deobfuscation stucked sometimes problem fixed + +## [1.7.4] - 2013-11-10 +### Added +- [#169] hexedit method body bytes +- [#335] last opened files +- [#404] Exporting P-code and Hex + console parameters +- [#407] register name is configurable +- Advanced settings +- Cancellable decompiling, exporting and searching + +### Fixed +- [#399], [#400] performance optimizations + +## [1.7.3 update 2] - 2013-09-29 +### Fixed +- [#398] AS3 p-code values with index 0 (null) + +## [1.7.3 update 1] - 2013-09-28 +### Added +- [#382] AS3: Adding new method + +## [1.7.3] - 2013-09-27 +### Added +- AS3: Multiname and namespace editing. +- [#382],[#396] AS3: Adding new trait (method/slot/const) +- AS3: Highlighting pair parenthesis/bracket +- AS3: Editing various new P-code parameters +- AS3: Highligting of trait names/types/parameters +- AS3: Global rename identifier for traits +- [#357] Playback controls for DefineSound +- [#391] AS3: Native methods mark +- [#395] Support for GFx ScaleForm SWFs (with fonts editing) +- Displaying fonts in internal viewer +- [#334], [#395] New Embed font dialog - selecting character ranges with preview +- Replacing characters in font (Yes/No to all dialog) + +### Changed +- AS3: New p-code syntax inspired by RABCDasm +- AS3: Editing whole trait in one textarea +- AS3: Removed messages about adding new constants +- AS3: Modified colors in editor +- [#301] Clearing error log causes icon to reset + +## [1.7.2 update 2] - 2013-09-13 +### Changed +- Updated translations + +### Fixed +- [#383] Firefox browser cache handling +- [#386] SWF resizing + +## [1.7.2 update 1] - 2013-09-11 +### Changed +- updated translations + +### Fixed +- [#383] Fixed cache loading when Firefox not used + +## [1.7.2] - 2013-09-11 +### Added +- [#357] Sounds Preview (Windows only) +- Movies preview (Windows only) +- Whole SWF display +- Preview controls (Play,Pause,Stop) +- Search SWFs in browsers cache (Firefox, Chrome) +- [#367] Memory search: Save selected files to disk +- Portugese translation + +### Changed +- [#380] Faster displaying DefineBitsLossless(2) images + +### Fixed +- [#292] Background color for Fonts preview fixed +- [#375] Replacing DefineBitsLossless image tag +- [#378] Refreshing language of JSyntaxPane +- MORPHGRADIENT reading fix + +## [1.7.1] - 2013-08-25 +### Added +- Loading SWFs from other processes memory (Windows only, sorry) +- [#325] Spanish translation +- [#210] Ukrainian and Dutch translation +- [#355] Chinese translation +- [#292] Change background color in SWF preview +- [#301] Clear errors log button +- [#313] Command line parameter for ignore all errors +- [#330] Protection agains adding same characters +- [#332] AS1/2 Showing elapsed times during commandline export +- [#344] Reload opened SWF +- Decompilation timeouts + +### Fixed +- [#295] Export FLA: wrong font +- [#297] Too bright titlebar button colors +- [#307] Export FLA: fixed empty textfields +- [#309] Export FLA: static text letter spacing detection +- [#310] Export FLA: Strokes +- [#311] Export FLA: BitmapFill +- [#327] AS1/2 Disassembly error stop application +- [#328] Fixed replacing images in DefineBitsJPEGX +- [#333] AS1/2 action reading +- [#336] Graph window is too small +- [#337] Quick search panel barely visible in same cases +- [#338] Expand/collapse icon in errorlog + +## [1.7.0 update 1] - 2013-08-11 +### Added +- [#315] German translation (partial) + +### Fixed +- [#123] Better context menu integration +- [#243],[#326] Better deobfuscation +- [#287] Typo in parallelSpeedUp parameter +- [#290],[#291] improved select language dialog +- [#294] minor GUI fixes +- [#298] Progressbar positition issues +- [#296] better export directory remembering +- [#314] Better deobfuscating filenames +- [#316] Readonly editor panes accepted Ctrl+Z/Y +- [#318] Export FLA: Shapes export fix +- [#319] AS3: Improved try..catch..finally decompilation +- [#323] AS3: Fixed default switch part + +## [1.7.0] - 2013-08-03 +### Added +- Listing contributors on about page +- [#223] AS2: Detecting uninitialized class fields +- [#250] Export FLA: Detecting static fields margin and spacing +- [#261] Export FLA: AS1/2 Frame scripts on first layer +- [#269] Commandline parameters for switching configuration +- [#274] AS3 Displaying elapsed time during commandline export +- [#275] AS3 Removing returnvoid as last statement + +### Changed +- New GUI based on Substance look and feel +- Menu changed to ribbon panel +- New round icon +- [#258] AS1/2: Improved chained assignments +- [#267] Starting program without choosing a file +- [#286] Saving to temp file first + +### Fixed +- [#123] Improved context menu integration on Windows +- [#233] Globally rename identifier deselects item in the tree +- [#235] Export FLA: Dynamic text fields coordinates +- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation +- [#251] Export FLA: Fixed filter strength rounding +- [#257] Export FLA: Text field color and size issues +- [#259] Fixed images alpha +- [#260] Export FLA: Labels position +- [#268] AS1/2 Function parameter shown as register instead loc +- [#272] AS3 Class initializer editation fix +- [#276] Fixed anonymous/inline functions handling +- [#220] Improved editing fonts / texts +- [#284],... other small fixes + +## [1.6.7] - 2013-07-20 +### Added +- [#220] Selection of font to import characters from +- [#232] Automatically add .swf extension in saveas dialog +- [#253] Abort/Retry/Ignore dialog on errors with file saving + +### Changed +- Improved translations + +### Fixed +- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation +- [#203] AS1/2 improved direct editing +- [#220] Adding characters to font fix +- [#225] AS1/2 object literal without name quotes +- [#236] AS1/2 Rename invalid identifiers issues +- [#245] AS3 Double space around "as" keyword +- [#247] AS3 Scrolling to main class at startup +- [#248] Memory issues (slowdown) +- [#254] Expressions as commands +- [#255] Windows 7 loading issues +- [#256] AS3 Object literal in return clause +- SWF text parsing (new lines) +- Labels size by locales + +## [1.6.6 update 2] - 2013-07-16 +### Fixed +- [#241] Program could not be started + +## [1.6.6 update 1] - 2013-07-16 +### Changed +- Better localization support + +### Fixed +- [#238],[#239],[#240] Fixed deobfuscation related problems +- [#237] Parentheses in AS1/2 add,subtract + +## [1.6.6] - 2013-07-16 +### Added +- [#217] Russian translation (focus) +- [#219] Hungarian translation (honfika) +- [#224] Swedish translation (Capasha) +- [#220] Adding characters to Fonts, displaying font info +- [#121] Search progress indication +- Error log + +### Changed +- [#203] Improved direct editing of AS1/2 +- [#207] Update SWF preview after switching external/internal flash player + +### Fixed +- [#151] Memory caching +- [#171] Skipping invalid AS3 code - newobject, newarray +- [#206] AS3 switch problem +- [#208] Renaming anonymous functions +- [#209],[#229] FLA export texts positions +- [#213],[#221] other decompilation issues +- [#225] AS object literal broken with ternar operator +- [#226] onClip indentation in FLA export +- [#227] gotoAndStop wrong frame index +- [#230] FLA export missing strokes +- Shapes viewer - missing strokes + +## [1.6.5 update 1] - 2013-07-09 +### Fixed +- [#151] Fixed caching in memory +- [#172] AS1/2 constant detection fix +- [#174] Renaming SymbolClass fix +- [#175],[#212] Fixed create directory issues on export +- [#185],[#186] on-clip actions indentation +- [#197] AS1/2 Missing storeregister before switch +- [#216] AS2 Fixed field order +- [#213] AS2 Fixed var fields quotes, switch nullpointer + +## [1.6.5] - 2013-07-08 +### Added +- Multilanguage support (currently English and Czech) +- [#151] Option for caching in memory instead of files +- [#168] Export selection in tree context menu +- [#176] option to show main class on startup +- [#177] saving window maximized state +- [#202] Removing tags other than DefineSprite + +### Changed +- [#173],[#190] Better renaming +- [#129], [#153] Better deobfuscation +- [#180] better error handling +- [#185],[#186] better displaying and exporting onclip actions + +### Fixed +- [#123] Better context menu integration +- [#136] FLA export - text sizes +- [#137],[#179] foreach issues (hasNext) +- [#144] Plain text export - empty line fix +- [#144] Not displaying texts +- [#164] DefineMorphShape issues +- [#167] Sprite tag appearing twice in export filename +- [#170] AS3 Try in loop +- [#172] loop detection fix +- [#175] use empty namespace +- [#178] AS subtract with negate +- [#181] AS3 missing quotes in object field +- [#182] missing namespace imports +- [#183] wrong stage size +- [#184] wrong video link +- [#189] Fixed three dots in tree +- [#191] Focalgradient fill fix +- [#195] AS2 issues +- [#196],[#197] switch issues +- [#198] DefineFont2 empty check +- [#200] DefineBitsLossLess fix +- [#201] Nonworking main window in Linux/MacOS (due toAssociation) + +## [1.6.4 update 1] - 2013-06-30 +### Fixed +- [#166] For loops detection +- [#165] AS3:direct lookupswitch support + +## [1.6.4] - 2013-06-30 +### Added +- [#63] Globally rename identifier +- [#67] Deobfuscation - rename identifiers according to type +- [#117] Drag & Drop SWF file to main window opens it +- [#123] Context menu integration on Windows +- [#127] Drag & Drop items from tree outside of application +- [#134] AS3: Find document class +- [#144] New lines in plain text export +- [#155] Remembering window size + splitbar positions between runs + +### Changed +- [#142] Using exportassets tag for tag names +- [#146] Display AS2 classes as tree of packages +- Better loop detection + +### Fixed +- [#129] AS1/2: not refreshing decompiled after rename +- [#130] Renaming SymbolClass identifiers too +- [#132] Renaming identifiers renamed strings +- [#136] Invalid text positions in FLA export +- [#145] Unicode support +- [#147] Escape filenames during obfuscated AS3 export +- [#148] Better package vs classname handling +- [#152] Empty if branches not inverted +- [#156] Better search handling (not freezing) +- [#157] AS3: Try statements in loops +- [#158] Graph repaint problem +- [#159] AS3: Improper rest parameter handling +- [#160] Commandline binaryData export +- [#162] DefineBitsJPEG2 image replacing +- [#163] Closing SWF file after loading +- other minor fixes + +## [1.6.3 update 2] - 2013-06-21 +### Changed +- [#149] Ifs with empty onTrue branches now inverted + +### Fixed +- [#150] Long line restriction removed + +## [1.6.3 update 1] - 2013-06-21 +### Fixed +- Memory limit decreased - FFDec was not working on 32 bit JVM. + +## [1.6.3] - 2013-06-20 +### Changed +- Parallel SpeedUp can be disabled in menu +- Better loop detection + +### Fixed +- [#119] Replacements file not found issue +- [#101] AS1/2 postincrement fix +- [#114],[#116],[#135],[#141] Fixed loop detection +- [#102] Fixed loop highlighting in export +- [#124] Flash player file path detection +- [#128] Improved imports +- [#135] CommentItem fix +- [#129],[#131] Better deobfuscation +- [#104] AS3 inc/dec local deobfuscation fix +- [#113],[#133],[#140] Memory limit increased + +## [1.6.2] - 2013-06-09 +### Added +- New loop detection algorithm + +### Changed +- [#108] - Faster loading and decompiling (Parallelism) +- Improved Internal flash viewer - shapes and morphshapes + +### Fixed +- Ternar operator fix +- [#102] Fixed Shapes to FLA export +- AS1/2 class detection fix +- [#105],[#104],[#101] fixed via new loop detection + +## [1.6.1] - 2013-06-03 +### Added +- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) +- [#109], [#106], [#107] some code improvements + +### Changed +- Application needs Java 1.7 to run + +### Removed +- Support for Java before 1.7 + +### Fixed +- [#102], [#110] AS3: Class highlight fix +- [#103] AS3:Fixed setslot handling +- [#104] AS3:Inc/Declocal nullpointer fix +- [#104] Multiple conditions in loop fix +- [#111] AS3:Object literal truncates line +- [#105] Better do while..break handling +- loop fixes + +## [1.6.0 update 1] - 2013-05-25 +### Added +- better FLA export + +### Fixed +- Many FLA export related bugs (like [#96]) +- [#98] Empty initializers do not cause empty lines now +- [#99] small logging issues +- [#100] large obfuscated code support + +## [1.6.0] - 2013-05-20 +### Added +- Export to FLA (Experimental BETA!) +- [#85] Search text in all ActionScripts +- SWF 11 support + +### Fixed +- [#79] ActionStartDrag constraint fix +- [#92] Inversed GreaterThan/LessThan +- [#93] AS1/2 fixed switch detection +- [#94] AS1/2 ActionTry - register cast fix +- [#95] Better script end handling + +## [1.5.2] - 2013-05-05 +### Added +- Improved automatic update system (changes log). +- Handling script traits as separate objects. +- [#86] open/save file dialog now accepts absolute paths in quotes + +### Fixed +- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 +- [#88] Fixed graph building +- [#89] AS3: bracket in property name lead to missing dot +- [#82] printgraph issue + +## [1.5.1 update 1] - 2013-05-04 +### Added +- Exporting texts via commandline +- Exporting all via commandline + +### Fixed +- DefineText2 color parameter +- AS3 GetSlot,SetSlot +- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... +- [#83] Fixed images transparency (zlib fix) +- Fixed graphparts with only jump in it (obfuscators) +- MORPHGRADIENT FIX +- Trasparency in DefineBitsJPEG3 and 4 +- Displaying shapes,morphshapes and sprites with bitmaps + +## [1.5.1] - 2013-05-01 +### Added +- Support for larger switches (10+cases) +- Editing text tags +- [#65] Exporting text tags +- Removing sprites +- Replacing images + +### Fixed +- DefineMorphShape2 fix +- [#79] - AS1/2 class detection fix, wrong printgraph fix +- [#78] - script trait slots fix + +## [1.5.0 update 1] - 2013-04-21 +### Fixed +- Automatic deobfuscation config defaulted to Off for AS1/2. + +## [1.5.0] - 2013-04-20 +### Added +- Direct editing of ActionScript 1/2 code (Beta) +- AS1/2: ifFrameLoaded support +- Automatic deobfuscation can be disabled in the menu +- [#48] - Decompile only specified class (commandline option) +- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices +- [#66] - Decompressing LZMA via commandline +- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) +- [#69] - DoABC vs DoABCDefine tags decompilation +- [#75] - Comma separator in while/do..while conditions, better if..return handling +- AS1/2: parsing NaN,Infinity value (Fix for [#73]) + +### Changed +- New icons (edit/save/cancel and main menu) + +### Fixed +- [#62] - Errors on not defined character tags (import tag) +- [#72] - First ternary operator expression was always true +- Fixed many deobfuscation related bugs + +## [1.4.3 update 2] - 2013-04-10 +### Fixed +- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) +- Try to fix lib/FlashPlayer.exe issue + +## [1.4.3 update 1] - 2013-04-06 +### Fixed +- [#38] - Indentation in const/var initializers, missing semicolon +- [#56] - Test output left in last release +- [#57] - Unknown instructions now do not log an exception (obfuscators do this) +- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. +- AS3 loops fix +- While true fix + +## [1.4.3] - 2013-04-04 +### Added +- AS1/2 Better deobfuscation + +### Fixed +- [#45] - Unicode characters fix +- [#50] - AS1/2 Function body deobfuscation fix +- [#51] - Displaying java class names instead of expressions +- [#52] - AS1/2 Better constantpool detection (deobfuscation) +- [#38] - AS3 indentation in initialized const/var value for newobject +- Fixed ImportAssets2 tag id + +## [1.4.2 update 1] - 2013-03-25 +### Fixed +- [#47] - wrong AS3 deobfuscation +- AS3 deobfuscation issues +- AS3 switch + +## [1.4.2] - 2013-03-24 +### Added +- [#42] - Displaying code as hex +- AS1/2: Renaming identifiers (deobfuscation) +- AS1/2,AS3: Better deobfuscation +- Storing configuration to user home +- Installer for Windows systems + +### Changed +- Graph button changed to icon. + +### Fixed +- [#39] - AS1/2 NewMethod..Pop fix +- [#40] - No logging + For..in..return decompilation +- [#44] - DefineFont2 fix +- [#36] - Multiname with invalid index +- [#43] - Ternary operator and more +- [#46] - Ifs with empty branches got ignored +- [#3] - Ignoring unknown opcodes +- Logging exceptions during export + +## [1.4.1] - 2013-03-10 +### Added +- Exporting sounds +- Better AS1/2 deobfuscation (disassembly & decompilation) + +### Fixed +- Exporting only first 1000 frames of the movie +- Decompiled code was not refreshed on AS1/2 changes +- Application no longer creates empty directories on export + +## [1.4.0 update 1] - 2013-03-04 +### Fixed +- [#37] - AS3: Reversed loop conditions + +## [1.4.0] - 2013-03-03 +### Added +- AS3: ignoring return void at the end of methods +- New icons - Silk icons +- AS3: Traits list sort button +- Better Graph display +- Frames view +- Exporting of movies (No audio) +- Some AS3 related Tests +- Homepage & Donate link in the menu + +### Changed +- Tree view instead of tabs +- AS1/2 and AS3 now share same decompiling method. + +### Fixed +- [#34] - Reversed loop conditions +- [#35] - Fixed unicode strings (Japanese) + +## [1.3.1] - 2013-02-23 +### Changed +- Flash player no longer uses SWT library + +### Fixed +- [#32] - AS2: Action255 bug +- [#31] - Erorrneous tags are now ignored +- DefineBitsLossLess 1&2 on 8bit colormapped images + +## [1.3.0] - 2013-02-17 +### Added +- Decompilation is more resistant to obfuscation +- Shapes SVG export +- AS2: Decompiling classes & interfaces +- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) +- AS3: Deobfuscation menu +- Graph button for displaying code flow Graph + +### Changed +- Complete new decompiling method in both AS1/2 and AS3 +- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". +- To edit source, Edit button must be pressed first (Due to click&go feature) + +### Fixed +- AS3: Method info editor fixed +- Edittext & Button displaying + +## [1.2.0] - 2013-01-19 +### Added +- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). +- Images display and export +- AS2: Exporting selection +- Progressbar during loading + +### Changed +- One merged window for AS1/2 and 3. +- Updated icons + +### Fixed +- AS3: xml attrib, switch in anonymous function (in AS2 too) + +## [1.1.0] - 2013-01-02 +### Added +- Checking for updates +- AS2: Exporting +- AS3: Decompiling whole scripts instead of just classes +- AS3: Exporting selected scripts +- AS3: Script search bar +- AS3: List of DoABCTags now has default "- all -" item +- AS3: Better imports, use namespaces +- AS3: XML related instructions +- AS3: Anonymous functions with names +- AS3: Better initialization of const values +- Logging exceptions to log.txt file + +### Fixed +- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops + +## [1.0.1] - 2012-12-26 +### Added +- AS3: Runtime namespace resolving +- AS3: Arguments variable +- AS3: Better recognizing Pre/Post Increments/Decrements +- AS3: Better declarations + +### Fixed +- AS3: Fixed static variables + +## [1.0.0] - 2012-12-24 +### Added +- Support for LZMA compressed files +- AS3: Detecting local register types for declaration. +- AS3: Displaying inline functions +- AS3: Last save/open dir is remembered +- AS3: Better usage detection for multinames +- AS3: Commandline arguments for exporting +- AS3: Better chained assignments +- AS2: FSCommand2 instruction support +- Proxy: Mimetype application/octet-stream added +- Added executable for Windows users. + +### Changed +- AS3: GUI - Constants tab moved to the top +- AS3: Deobfuscation is now optional, can be accessed via menu + +### Fixed +- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) +- Other minor fixes + +## [beta 1] - 2011-07-30 +### Added +- AS3: Automatic computing method body parameters (EXPERIMENTAL) +- AS3: Editing return type of methods +- AS3: Editing type and default value for variables/constants (Slot/Const traits) +- AS1/2: Few enhancements +- About dialog + +### Changed +- Gui: Updated Icons + +### Fixed +- AS 1/2: Fixed large bug causing Ifs to not decompile properly +- Proxy: Some minor fixes + +## [alpha 10] - 2011-07-13 +### Added +- AS3:Highlighting actual line +- AS3:Completing instruction names via Ctrl+Space +- AS3:Editing method parameters, method body parameters via tab panel +- AS3:ByteCode minor_version 17 supported - decimal datatypes +- AS3:Local variables and method parameters take name from debug information if present +- AS3:Automatic renaming of classes/methods when obfuscated names +- AS3:Better error messages (When cannot decompile obfuscated code) + +### Fixed +- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) +- AS3:Hilighting fixes +- AS3:Fixed decrement/increment statements decompilation +- AS3:Decompiler now adds variable declarations on the beginning of decompiled method +- AS3:Try/catch statements fixed when debug information present +- AS3:Fixed for each statements +- AS3:Other minor fixes + +## [alpha 9] - 2011-07-02 +### Added +- AS3: Added disassembling of some new types of instructions +- AS3: Exporting source as PCode + +### Fixed +- AS3: Many other bugfixes... + +## [alpha 8] - 2010-09-19 +### Added +- AS3: Editing exceptions +- AS3: Finding usage of multinames from constant table + +### Changed +- AS1/2: Better GUI +- AS1/2: Better decompiling of Ifs, For..in + +## [alpha 7] - 2010-09-04 +### Added +- Initial public release + +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 +[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 +[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 +[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 +[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 +[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 +[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 +[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 +[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 +[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 +[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 +[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 +[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 +[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 +[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 +[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 +[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 +[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 +[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 +[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 +[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 +[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 +[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 +[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 +[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 +[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 +[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 +[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 +[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 +[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 +[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 +[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 +[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 +[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 +[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 +[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 +[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 +[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 +[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 +[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 +[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 +[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 +[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 +[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 +[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 +[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 +[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 +[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 +[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 +[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 +[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 +[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 +[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 +[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 +[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 +[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 +[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 +[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 +[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 +[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 +[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 +[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 +[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 +[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 +[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 +[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 +[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 +[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 +[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 +[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 +[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 +[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 +[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 +[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 +[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 +[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 +[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 +[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 +[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 +[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 +[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 +[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 +[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 +[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 +[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 +[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 +[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 +[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 +[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 +[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 +[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 +[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 +[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1156]: https://www.free-decompiler.com/flash/issues/1156 +[#1171]: https://www.free-decompiler.com/flash/issues/1171 +[#1170]: https://www.free-decompiler.com/flash/issues/1170 +[#1241]: https://www.free-decompiler.com/flash/issues/1241 +[#1162]: https://www.free-decompiler.com/flash/issues/1162 +[#1199]: https://www.free-decompiler.com/flash/issues/1199 +[#1151]: https://www.free-decompiler.com/flash/issues/1151 +[#1128]: https://www.free-decompiler.com/flash/issues/1128 +[#1163]: https://www.free-decompiler.com/flash/issues/1163 +[#1172]: https://www.free-decompiler.com/flash/issues/1172 +[#1174]: https://www.free-decompiler.com/flash/issues/1174 +[#1183]: https://www.free-decompiler.com/flash/issues/1183 +[#1193]: https://www.free-decompiler.com/flash/issues/1193 +[#1200]: https://www.free-decompiler.com/flash/issues/1200 +[#1198]: https://www.free-decompiler.com/flash/issues/1198 +[#1205]: https://www.free-decompiler.com/flash/issues/1205 +[#1194]: https://www.free-decompiler.com/flash/issues/1194 +[#1210]: https://www.free-decompiler.com/flash/issues/1210 +[#1217]: https://www.free-decompiler.com/flash/issues/1217 +[#1244]: https://www.free-decompiler.com/flash/issues/1244 +[#1247]: https://www.free-decompiler.com/flash/issues/1247 +[#1236]: https://www.free-decompiler.com/flash/issues/1236 +[#1251]: https://www.free-decompiler.com/flash/issues/1251 +[#1265]: https://www.free-decompiler.com/flash/issues/1265 +[#1268]: https://www.free-decompiler.com/flash/issues/1268 +[#1161]: https://www.free-decompiler.com/flash/issues/1161 +[#1118]: https://www.free-decompiler.com/flash/issues/1118 +[#409]: https://www.free-decompiler.com/flash/issues/409 +[#1132]: https://www.free-decompiler.com/flash/issues/1132 +[#1134]: https://www.free-decompiler.com/flash/issues/1134 +[#1121]: https://www.free-decompiler.com/flash/issues/1121 +[#1052]: https://www.free-decompiler.com/flash/issues/1052 +[#1145]: https://www.free-decompiler.com/flash/issues/1145 +[#758]: https://www.free-decompiler.com/flash/issues/758 +[#1096]: https://www.free-decompiler.com/flash/issues/1096 +[#1104]: https://www.free-decompiler.com/flash/issues/1104 +[#1107]: https://www.free-decompiler.com/flash/issues/1107 +[#1106]: https://www.free-decompiler.com/flash/issues/1106 +[#1113]: https://www.free-decompiler.com/flash/issues/1113 +[#1075]: https://www.free-decompiler.com/flash/issues/1075 +[#1127]: https://www.free-decompiler.com/flash/issues/1127 +[#1103]: https://www.free-decompiler.com/flash/issues/1103 +[#1133]: https://www.free-decompiler.com/flash/issues/1133 +[#1135]: https://www.free-decompiler.com/flash/issues/1135 +[#1138]: https://www.free-decompiler.com/flash/issues/1138 +[#1139]: https://www.free-decompiler.com/flash/issues/1139 +[#930]: https://www.free-decompiler.com/flash/issues/930 +[#1137]: https://www.free-decompiler.com/flash/issues/1137 +[#1144]: https://www.free-decompiler.com/flash/issues/1144 +[#1147]: https://www.free-decompiler.com/flash/issues/1147 +[#1148]: https://www.free-decompiler.com/flash/issues/1148 +[#1152]: https://www.free-decompiler.com/flash/issues/1152 +[#1154]: https://www.free-decompiler.com/flash/issues/1154 +[#116]: https://www.free-decompiler.com/flash/issues/116 +[#1070]: https://www.free-decompiler.com/flash/issues/1070 +[#1098]: https://www.free-decompiler.com/flash/issues/1098 +[#1033]: https://www.free-decompiler.com/flash/issues/1033 +[#1083]: https://www.free-decompiler.com/flash/issues/1083 +[#1091]: https://www.free-decompiler.com/flash/issues/1091 +[#1076]: https://www.free-decompiler.com/flash/issues/1076 +[#1068]: https://www.free-decompiler.com/flash/issues/1068 +[#1063]: https://www.free-decompiler.com/flash/issues/1063 +[#1019]: https://www.free-decompiler.com/flash/issues/1019 +[#1016]: https://www.free-decompiler.com/flash/issues/1016 +[#1010]: https://www.free-decompiler.com/flash/issues/1010 +[#1008]: https://www.free-decompiler.com/flash/issues/1008 +[#1004]: https://www.free-decompiler.com/flash/issues/1004 +[#933]: https://www.free-decompiler.com/flash/issues/933 +[#1062]: https://www.free-decompiler.com/flash/issues/1062 +[#418]: https://www.free-decompiler.com/flash/issues/418 +[#1047]: https://www.free-decompiler.com/flash/issues/1047 +[#812]: https://www.free-decompiler.com/flash/issues/812 +[#1056]: https://www.free-decompiler.com/flash/issues/1056 +[#1057]: https://www.free-decompiler.com/flash/issues/1057 +[#991]: https://www.free-decompiler.com/flash/issues/991 +[#689]: https://www.free-decompiler.com/flash/issues/689 +[#1060]: https://www.free-decompiler.com/flash/issues/1060 +[#1037]: https://www.free-decompiler.com/flash/issues/1037 +[#489]: https://www.free-decompiler.com/flash/issues/489 +[#1007]: https://www.free-decompiler.com/flash/issues/1007 +[#1044]: https://www.free-decompiler.com/flash/issues/1044 +[#947]: https://www.free-decompiler.com/flash/issues/947 +[#953]: https://www.free-decompiler.com/flash/issues/953 +[#954]: https://www.free-decompiler.com/flash/issues/954 +[#950]: https://www.free-decompiler.com/flash/issues/950 +[#945]: https://www.free-decompiler.com/flash/issues/945 +[#957]: https://www.free-decompiler.com/flash/issues/957 +[#956]: https://www.free-decompiler.com/flash/issues/956 +[#968]: https://www.free-decompiler.com/flash/issues/968 +[#978]: https://www.free-decompiler.com/flash/issues/978 +[#955]: https://www.free-decompiler.com/flash/issues/955 +[#966]: https://www.free-decompiler.com/flash/issues/966 +[#999]: https://www.free-decompiler.com/flash/issues/999 +[#1000]: https://www.free-decompiler.com/flash/issues/1000 +[#1017]: https://www.free-decompiler.com/flash/issues/1017 +[#1030]: https://www.free-decompiler.com/flash/issues/1030 +[#949]: https://www.free-decompiler.com/flash/issues/949 +[#944]: https://www.free-decompiler.com/flash/issues/944 +[#939]: https://www.free-decompiler.com/flash/issues/939 +[#942]: https://www.free-decompiler.com/flash/issues/942 +[#952]: https://www.free-decompiler.com/flash/issues/952 +[#858]: https://www.free-decompiler.com/flash/issues/858 +[#905]: https://www.free-decompiler.com/flash/issues/905 +[#920]: https://www.free-decompiler.com/flash/issues/920 +[#921]: https://www.free-decompiler.com/flash/issues/921 +[#924]: https://www.free-decompiler.com/flash/issues/924 +[#895]: https://www.free-decompiler.com/flash/issues/895 +[#884]: https://www.free-decompiler.com/flash/issues/884 +[#899]: https://www.free-decompiler.com/flash/issues/899 +[#903]: https://www.free-decompiler.com/flash/issues/903 +[#855]: https://www.free-decompiler.com/flash/issues/855 +[#850]: https://www.free-decompiler.com/flash/issues/850 +[#832]: https://www.free-decompiler.com/flash/issues/832 +[#904]: https://www.free-decompiler.com/flash/issues/904 +[#910]: https://www.free-decompiler.com/flash/issues/910 +[#922]: https://www.free-decompiler.com/flash/issues/922 +[#916]: https://www.free-decompiler.com/flash/issues/916 +[#938]: https://www.free-decompiler.com/flash/issues/938 +[#897]: https://www.free-decompiler.com/flash/issues/897 +[#470]: https://www.free-decompiler.com/flash/issues/470 +[#877]: https://www.free-decompiler.com/flash/issues/877 +[#878]: https://www.free-decompiler.com/flash/issues/878 +[#845]: https://www.free-decompiler.com/flash/issues/845 +[#883]: https://www.free-decompiler.com/flash/issues/883 +[#882]: https://www.free-decompiler.com/flash/issues/882 +[#760]: https://www.free-decompiler.com/flash/issues/760 +[#887]: https://www.free-decompiler.com/flash/issues/887 +[#842]: https://www.free-decompiler.com/flash/issues/842 +[#841]: https://www.free-decompiler.com/flash/issues/841 +[#772]: https://www.free-decompiler.com/flash/issues/772 +[#762]: https://www.free-decompiler.com/flash/issues/762 +[#862]: https://www.free-decompiler.com/flash/issues/862 +[#865]: https://www.free-decompiler.com/flash/issues/865 +[#613]: https://www.free-decompiler.com/flash/issues/613 +[#868]: https://www.free-decompiler.com/flash/issues/868 +[#713]: https://www.free-decompiler.com/flash/issues/713 +[#807]: https://www.free-decompiler.com/flash/issues/807 +[#728]: https://www.free-decompiler.com/flash/issues/728 +[#857]: https://www.free-decompiler.com/flash/issues/857 +[#860]: https://www.free-decompiler.com/flash/issues/860 +[#824]: https://www.free-decompiler.com/flash/issues/824 +[#809]: https://www.free-decompiler.com/flash/issues/809 +[#805]: https://www.free-decompiler.com/flash/issues/805 +[#825]: https://www.free-decompiler.com/flash/issues/825 +[#737]: https://www.free-decompiler.com/flash/issues/737 +[#350]: https://www.free-decompiler.com/flash/issues/350 +[#814]: https://www.free-decompiler.com/flash/issues/814 +[#816]: https://www.free-decompiler.com/flash/issues/816 +[#835]: https://www.free-decompiler.com/flash/issues/835 +[#836]: https://www.free-decompiler.com/flash/issues/836 +[#848]: https://www.free-decompiler.com/flash/issues/848 +[#817]: https://www.free-decompiler.com/flash/issues/817 +[#849]: https://www.free-decompiler.com/flash/issues/849 +[#852]: https://www.free-decompiler.com/flash/issues/852 +[#837]: https://www.free-decompiler.com/flash/issues/837 +[#811]: https://www.free-decompiler.com/flash/issues/811 +[#745]: https://www.free-decompiler.com/flash/issues/745 +[#803]: https://www.free-decompiler.com/flash/issues/803 +[#738]: https://www.free-decompiler.com/flash/issues/738 +[#742]: https://www.free-decompiler.com/flash/issues/742 +[#747]: https://www.free-decompiler.com/flash/issues/747 +[#749]: https://www.free-decompiler.com/flash/issues/749 +[#752]: https://www.free-decompiler.com/flash/issues/752 +[#753]: https://www.free-decompiler.com/flash/issues/753 +[#759]: https://www.free-decompiler.com/flash/issues/759 +[#766]: https://www.free-decompiler.com/flash/issues/766 +[#768]: https://www.free-decompiler.com/flash/issues/768 +[#773]: https://www.free-decompiler.com/flash/issues/773 +[#776]: https://www.free-decompiler.com/flash/issues/776 +[#783]: https://www.free-decompiler.com/flash/issues/783 +[#785]: https://www.free-decompiler.com/flash/issues/785 +[#787]: https://www.free-decompiler.com/flash/issues/787 +[#788]: https://www.free-decompiler.com/flash/issues/788 +[#790]: https://www.free-decompiler.com/flash/issues/790 +[#794]: https://www.free-decompiler.com/flash/issues/794 +[#798]: https://www.free-decompiler.com/flash/issues/798 +[#800]: https://www.free-decompiler.com/flash/issues/800 +[#676]: https://www.free-decompiler.com/flash/issues/676 +[#734]: https://www.free-decompiler.com/flash/issues/734 +[#687]: https://www.free-decompiler.com/flash/issues/687 +[#709]: https://www.free-decompiler.com/flash/issues/709 +[#732]: https://www.free-decompiler.com/flash/issues/732 +[#730]: https://www.free-decompiler.com/flash/issues/730 +[#735]: https://www.free-decompiler.com/flash/issues/735 +[#722]: https://www.free-decompiler.com/flash/issues/722 +[#725]: https://www.free-decompiler.com/flash/issues/725 +[#715]: https://www.free-decompiler.com/flash/issues/715 +[#635]: https://www.free-decompiler.com/flash/issues/635 +[#726]: https://www.free-decompiler.com/flash/issues/726 +[#716]: https://www.free-decompiler.com/flash/issues/716 +[#717]: https://www.free-decompiler.com/flash/issues/717 +[#718]: https://www.free-decompiler.com/flash/issues/718 +[#720]: https://www.free-decompiler.com/flash/issues/720 +[#719]: https://www.free-decompiler.com/flash/issues/719 +[#723]: https://www.free-decompiler.com/flash/issues/723 +[#288]: https://www.free-decompiler.com/flash/issues/288 +[#677]: https://www.free-decompiler.com/flash/issues/677 +[#389]: https://www.free-decompiler.com/flash/issues/389 +[#701]: https://www.free-decompiler.com/flash/issues/701 +[#707]: https://www.free-decompiler.com/flash/issues/707 +[#302]: https://www.free-decompiler.com/flash/issues/302 +[#685]: https://www.free-decompiler.com/flash/issues/685 +[#698]: https://www.free-decompiler.com/flash/issues/698 +[#710]: https://www.free-decompiler.com/flash/issues/710 +[#711]: https://www.free-decompiler.com/flash/issues/711 +[#681]: https://www.free-decompiler.com/flash/issues/681 +[#688]: https://www.free-decompiler.com/flash/issues/688 +[#691]: https://www.free-decompiler.com/flash/issues/691 +[#524]: https://www.free-decompiler.com/flash/issues/524 +[#663]: https://www.free-decompiler.com/flash/issues/663 +[#702]: https://www.free-decompiler.com/flash/issues/702 +[#539]: https://www.free-decompiler.com/flash/issues/539 +[#650]: https://www.free-decompiler.com/flash/issues/650 +[#680]: https://www.free-decompiler.com/flash/issues/680 +[#649]: https://www.free-decompiler.com/flash/issues/649 +[#656]: https://www.free-decompiler.com/flash/issues/656 +[#661]: https://www.free-decompiler.com/flash/issues/661 +[#664]: https://www.free-decompiler.com/flash/issues/664 +[#668]: https://www.free-decompiler.com/flash/issues/668 +[#674]: https://www.free-decompiler.com/flash/issues/674 +[#675]: https://www.free-decompiler.com/flash/issues/675 +[#632]: https://www.free-decompiler.com/flash/issues/632 +[#651]: https://www.free-decompiler.com/flash/issues/651 +[#678]: https://www.free-decompiler.com/flash/issues/678 +[#672]: https://www.free-decompiler.com/flash/issues/672 +[#684]: https://www.free-decompiler.com/flash/issues/684 +[#647]: https://www.free-decompiler.com/flash/issues/647 +[#648]: https://www.free-decompiler.com/flash/issues/648 +[#612]: https://www.free-decompiler.com/flash/issues/612 +[#623]: https://www.free-decompiler.com/flash/issues/623 +[#624]: https://www.free-decompiler.com/flash/issues/624 +[#627]: https://www.free-decompiler.com/flash/issues/627 +[#640]: https://www.free-decompiler.com/flash/issues/640 +[#595]: https://www.free-decompiler.com/flash/issues/595 +[#592]: https://www.free-decompiler.com/flash/issues/592 +[#585]: https://www.free-decompiler.com/flash/issues/585 +[#578]: https://www.free-decompiler.com/flash/issues/578 +[#501]: https://www.free-decompiler.com/flash/issues/501 +[#616]: https://www.free-decompiler.com/flash/issues/616 +[#559]: https://www.free-decompiler.com/flash/issues/559 +[#401]: https://www.free-decompiler.com/flash/issues/401 +[#593]: https://www.free-decompiler.com/flash/issues/593 +[#594]: https://www.free-decompiler.com/flash/issues/594 +[#579]: https://www.free-decompiler.com/flash/issues/579 +[#428]: https://www.free-decompiler.com/flash/issues/428 +[#337]: https://www.free-decompiler.com/flash/issues/337 +[#584]: https://www.free-decompiler.com/flash/issues/584 +[#576]: https://www.free-decompiler.com/flash/issues/576 +[#250]: https://www.free-decompiler.com/flash/issues/250 +[#580]: https://www.free-decompiler.com/flash/issues/580 +[#510]: https://www.free-decompiler.com/flash/issues/510 +[#583]: https://www.free-decompiler.com/flash/issues/583 +[#586]: https://www.free-decompiler.com/flash/issues/586 +[#574]: https://www.free-decompiler.com/flash/issues/574 +[#570]: https://www.free-decompiler.com/flash/issues/570 +[#563]: https://www.free-decompiler.com/flash/issues/563 +[#561]: https://www.free-decompiler.com/flash/issues/561 +[#509]: https://www.free-decompiler.com/flash/issues/509 +[#433]: https://www.free-decompiler.com/flash/issues/433 +[#557]: https://www.free-decompiler.com/flash/issues/557 +[#556]: https://www.free-decompiler.com/flash/issues/556 +[#504]: https://www.free-decompiler.com/flash/issues/504 +[#529]: https://www.free-decompiler.com/flash/issues/529 +[#538]: https://www.free-decompiler.com/flash/issues/538 +[#537]: https://www.free-decompiler.com/flash/issues/537 +[#540]: https://www.free-decompiler.com/flash/issues/540 +[#387]: https://www.free-decompiler.com/flash/issues/387 +[#552]: https://www.free-decompiler.com/flash/issues/552 +[#494]: https://www.free-decompiler.com/flash/issues/494 +[#513]: https://www.free-decompiler.com/flash/issues/513 +[#262]: https://www.free-decompiler.com/flash/issues/262 +[#499]: https://www.free-decompiler.com/flash/issues/499 +[#508]: https://www.free-decompiler.com/flash/issues/508 +[#305]: https://www.free-decompiler.com/flash/issues/305 +[#312]: https://www.free-decompiler.com/flash/issues/312 +[#503]: https://www.free-decompiler.com/flash/issues/503 +[#304]: https://www.free-decompiler.com/flash/issues/304 +[#306]: https://www.free-decompiler.com/flash/issues/306 +[#507]: https://www.free-decompiler.com/flash/issues/507 +[#424]: https://www.free-decompiler.com/flash/issues/424 +[#425]: https://www.free-decompiler.com/flash/issues/425 +[#478]: https://www.free-decompiler.com/flash/issues/478 +[#485]: https://www.free-decompiler.com/flash/issues/485 +[#517]: https://www.free-decompiler.com/flash/issues/517 +[#518]: https://www.free-decompiler.com/flash/issues/518 +[#361]: https://www.free-decompiler.com/flash/issues/361 +[#392]: https://www.free-decompiler.com/flash/issues/392 +[#516]: https://www.free-decompiler.com/flash/issues/516 +[#495]: https://www.free-decompiler.com/flash/issues/495 +[#496]: https://www.free-decompiler.com/flash/issues/496 +[#299]: https://www.free-decompiler.com/flash/issues/299 +[#303]: https://www.free-decompiler.com/flash/issues/303 +[#324]: https://www.free-decompiler.com/flash/issues/324 +[#346]: https://www.free-decompiler.com/flash/issues/346 +[#371]: https://www.free-decompiler.com/flash/issues/371 +[#426]: https://www.free-decompiler.com/flash/issues/426 +[#457]: https://www.free-decompiler.com/flash/issues/457 +[#458]: https://www.free-decompiler.com/flash/issues/458 +[#460]: https://www.free-decompiler.com/flash/issues/460 +[#462]: https://www.free-decompiler.com/flash/issues/462 +[#463]: https://www.free-decompiler.com/flash/issues/463 +[#465]: https://www.free-decompiler.com/flash/issues/465 +[#466]: https://www.free-decompiler.com/flash/issues/466 +[#369]: https://www.free-decompiler.com/flash/issues/369 +[#390]: https://www.free-decompiler.com/flash/issues/390 +[#453]: https://www.free-decompiler.com/flash/issues/453 +[#459]: https://www.free-decompiler.com/flash/issues/459 +[#461]: https://www.free-decompiler.com/flash/issues/461 +[#451]: https://www.free-decompiler.com/flash/issues/451 +[#454]: https://www.free-decompiler.com/flash/issues/454 +[#455]: https://www.free-decompiler.com/flash/issues/455 +[#474]: https://www.free-decompiler.com/flash/issues/474 +[#477]: https://www.free-decompiler.com/flash/issues/477 +[#481]: https://www.free-decompiler.com/flash/issues/481 +[#484]: https://www.free-decompiler.com/flash/issues/484 +[#493]: https://www.free-decompiler.com/flash/issues/493 +[#365]: https://www.free-decompiler.com/flash/issues/365 +[#366]: https://www.free-decompiler.com/flash/issues/366 +[#429]: https://www.free-decompiler.com/flash/issues/429 +[#447]: https://www.free-decompiler.com/flash/issues/447 +[#354]: https://www.free-decompiler.com/flash/issues/354 +[#438]: https://www.free-decompiler.com/flash/issues/438 +[#436]: https://www.free-decompiler.com/flash/issues/436 +[#446]: https://www.free-decompiler.com/flash/issues/446 +[#427]: https://www.free-decompiler.com/flash/issues/427 +[#405]: https://www.free-decompiler.com/flash/issues/405 +[#420]: https://www.free-decompiler.com/flash/issues/420 +[#421]: https://www.free-decompiler.com/flash/issues/421 +[#430]: https://www.free-decompiler.com/flash/issues/430 +[#397]: https://www.free-decompiler.com/flash/issues/397 +[#431]: https://www.free-decompiler.com/flash/issues/431 +[#169]: https://www.free-decompiler.com/flash/issues/169 +[#335]: https://www.free-decompiler.com/flash/issues/335 +[#404]: https://www.free-decompiler.com/flash/issues/404 +[#407]: https://www.free-decompiler.com/flash/issues/407 +[#399]: https://www.free-decompiler.com/flash/issues/399 +[#400]: https://www.free-decompiler.com/flash/issues/400 +[#398]: https://www.free-decompiler.com/flash/issues/398 +[#382]: https://www.free-decompiler.com/flash/issues/382 +[#396]: https://www.free-decompiler.com/flash/issues/396 +[#357]: https://www.free-decompiler.com/flash/issues/357 +[#391]: https://www.free-decompiler.com/flash/issues/391 +[#395]: https://www.free-decompiler.com/flash/issues/395 +[#334]: https://www.free-decompiler.com/flash/issues/334 +[#301]: https://www.free-decompiler.com/flash/issues/301 +[#383]: https://www.free-decompiler.com/flash/issues/383 +[#386]: https://www.free-decompiler.com/flash/issues/386 +[#367]: https://www.free-decompiler.com/flash/issues/367 +[#380]: https://www.free-decompiler.com/flash/issues/380 +[#292]: https://www.free-decompiler.com/flash/issues/292 +[#375]: https://www.free-decompiler.com/flash/issues/375 +[#378]: https://www.free-decompiler.com/flash/issues/378 +[#325]: https://www.free-decompiler.com/flash/issues/325 +[#210]: https://www.free-decompiler.com/flash/issues/210 +[#355]: https://www.free-decompiler.com/flash/issues/355 +[#313]: https://www.free-decompiler.com/flash/issues/313 +[#330]: https://www.free-decompiler.com/flash/issues/330 +[#332]: https://www.free-decompiler.com/flash/issues/332 +[#344]: https://www.free-decompiler.com/flash/issues/344 +[#295]: https://www.free-decompiler.com/flash/issues/295 +[#297]: https://www.free-decompiler.com/flash/issues/297 +[#307]: https://www.free-decompiler.com/flash/issues/307 +[#309]: https://www.free-decompiler.com/flash/issues/309 +[#310]: https://www.free-decompiler.com/flash/issues/310 +[#311]: https://www.free-decompiler.com/flash/issues/311 +[#327]: https://www.free-decompiler.com/flash/issues/327 +[#328]: https://www.free-decompiler.com/flash/issues/328 +[#333]: https://www.free-decompiler.com/flash/issues/333 +[#336]: https://www.free-decompiler.com/flash/issues/336 +[#338]: https://www.free-decompiler.com/flash/issues/338 +[#315]: https://www.free-decompiler.com/flash/issues/315 +[#123]: https://www.free-decompiler.com/flash/issues/123 +[#243]: https://www.free-decompiler.com/flash/issues/243 +[#326]: https://www.free-decompiler.com/flash/issues/326 +[#287]: https://www.free-decompiler.com/flash/issues/287 +[#290]: https://www.free-decompiler.com/flash/issues/290 +[#291]: https://www.free-decompiler.com/flash/issues/291 +[#294]: https://www.free-decompiler.com/flash/issues/294 +[#298]: https://www.free-decompiler.com/flash/issues/298 +[#296]: https://www.free-decompiler.com/flash/issues/296 +[#314]: https://www.free-decompiler.com/flash/issues/314 +[#316]: https://www.free-decompiler.com/flash/issues/316 +[#318]: https://www.free-decompiler.com/flash/issues/318 +[#319]: https://www.free-decompiler.com/flash/issues/319 +[#323]: https://www.free-decompiler.com/flash/issues/323 +[#223]: https://www.free-decompiler.com/flash/issues/223 +[#261]: https://www.free-decompiler.com/flash/issues/261 +[#269]: https://www.free-decompiler.com/flash/issues/269 +[#274]: https://www.free-decompiler.com/flash/issues/274 +[#275]: https://www.free-decompiler.com/flash/issues/275 +[#258]: https://www.free-decompiler.com/flash/issues/258 +[#267]: https://www.free-decompiler.com/flash/issues/267 +[#286]: https://www.free-decompiler.com/flash/issues/286 +[#233]: https://www.free-decompiler.com/flash/issues/233 +[#235]: https://www.free-decompiler.com/flash/issues/235 +[#263]: https://www.free-decompiler.com/flash/issues/263 +[#264]: https://www.free-decompiler.com/flash/issues/264 +[#265]: https://www.free-decompiler.com/flash/issues/265 +[#266]: https://www.free-decompiler.com/flash/issues/266 +[#281]: https://www.free-decompiler.com/flash/issues/281 +[#251]: https://www.free-decompiler.com/flash/issues/251 +[#257]: https://www.free-decompiler.com/flash/issues/257 +[#259]: https://www.free-decompiler.com/flash/issues/259 +[#260]: https://www.free-decompiler.com/flash/issues/260 +[#268]: https://www.free-decompiler.com/flash/issues/268 +[#272]: https://www.free-decompiler.com/flash/issues/272 +[#276]: https://www.free-decompiler.com/flash/issues/276 +[#220]: https://www.free-decompiler.com/flash/issues/220 +[#284]: https://www.free-decompiler.com/flash/issues/284 +[#232]: https://www.free-decompiler.com/flash/issues/232 +[#253]: https://www.free-decompiler.com/flash/issues/253 +[#137]: https://www.free-decompiler.com/flash/issues/137 +[#242]: https://www.free-decompiler.com/flash/issues/242 +[#244]: https://www.free-decompiler.com/flash/issues/244 +[#203]: https://www.free-decompiler.com/flash/issues/203 +[#225]: https://www.free-decompiler.com/flash/issues/225 +[#236]: https://www.free-decompiler.com/flash/issues/236 +[#245]: https://www.free-decompiler.com/flash/issues/245 +[#247]: https://www.free-decompiler.com/flash/issues/247 +[#248]: https://www.free-decompiler.com/flash/issues/248 +[#254]: https://www.free-decompiler.com/flash/issues/254 +[#255]: https://www.free-decompiler.com/flash/issues/255 +[#256]: https://www.free-decompiler.com/flash/issues/256 +[#241]: https://www.free-decompiler.com/flash/issues/241 +[#238]: https://www.free-decompiler.com/flash/issues/238 +[#239]: https://www.free-decompiler.com/flash/issues/239 +[#240]: https://www.free-decompiler.com/flash/issues/240 +[#237]: https://www.free-decompiler.com/flash/issues/237 +[#217]: https://www.free-decompiler.com/flash/issues/217 +[#219]: https://www.free-decompiler.com/flash/issues/219 +[#224]: https://www.free-decompiler.com/flash/issues/224 +[#121]: https://www.free-decompiler.com/flash/issues/121 +[#207]: https://www.free-decompiler.com/flash/issues/207 +[#151]: https://www.free-decompiler.com/flash/issues/151 +[#171]: https://www.free-decompiler.com/flash/issues/171 +[#206]: https://www.free-decompiler.com/flash/issues/206 +[#208]: https://www.free-decompiler.com/flash/issues/208 +[#209]: https://www.free-decompiler.com/flash/issues/209 +[#229]: https://www.free-decompiler.com/flash/issues/229 +[#213]: https://www.free-decompiler.com/flash/issues/213 +[#221]: https://www.free-decompiler.com/flash/issues/221 +[#226]: https://www.free-decompiler.com/flash/issues/226 +[#227]: https://www.free-decompiler.com/flash/issues/227 +[#230]: https://www.free-decompiler.com/flash/issues/230 +[#172]: https://www.free-decompiler.com/flash/issues/172 +[#174]: https://www.free-decompiler.com/flash/issues/174 +[#175]: https://www.free-decompiler.com/flash/issues/175 +[#212]: https://www.free-decompiler.com/flash/issues/212 +[#185]: https://www.free-decompiler.com/flash/issues/185 +[#186]: https://www.free-decompiler.com/flash/issues/186 +[#197]: https://www.free-decompiler.com/flash/issues/197 +[#216]: https://www.free-decompiler.com/flash/issues/216 +[#168]: https://www.free-decompiler.com/flash/issues/168 +[#176]: https://www.free-decompiler.com/flash/issues/176 +[#177]: https://www.free-decompiler.com/flash/issues/177 +[#202]: https://www.free-decompiler.com/flash/issues/202 +[#173]: https://www.free-decompiler.com/flash/issues/173 +[#190]: https://www.free-decompiler.com/flash/issues/190 +[#129]: https://www.free-decompiler.com/flash/issues/129 +[#153]: https://www.free-decompiler.com/flash/issues/153 +[#180]: https://www.free-decompiler.com/flash/issues/180 +[#136]: https://www.free-decompiler.com/flash/issues/136 +[#179]: https://www.free-decompiler.com/flash/issues/179 +[#144]: https://www.free-decompiler.com/flash/issues/144 +[#164]: https://www.free-decompiler.com/flash/issues/164 +[#167]: https://www.free-decompiler.com/flash/issues/167 +[#170]: https://www.free-decompiler.com/flash/issues/170 +[#178]: https://www.free-decompiler.com/flash/issues/178 +[#181]: https://www.free-decompiler.com/flash/issues/181 +[#182]: https://www.free-decompiler.com/flash/issues/182 +[#183]: https://www.free-decompiler.com/flash/issues/183 +[#184]: https://www.free-decompiler.com/flash/issues/184 +[#189]: https://www.free-decompiler.com/flash/issues/189 +[#191]: https://www.free-decompiler.com/flash/issues/191 +[#195]: https://www.free-decompiler.com/flash/issues/195 +[#196]: https://www.free-decompiler.com/flash/issues/196 +[#198]: https://www.free-decompiler.com/flash/issues/198 +[#200]: https://www.free-decompiler.com/flash/issues/200 +[#201]: https://www.free-decompiler.com/flash/issues/201 +[#166]: https://www.free-decompiler.com/flash/issues/166 +[#165]: https://www.free-decompiler.com/flash/issues/165 +[#63]: https://www.free-decompiler.com/flash/issues/63 +[#67]: https://www.free-decompiler.com/flash/issues/67 +[#117]: https://www.free-decompiler.com/flash/issues/117 +[#127]: https://www.free-decompiler.com/flash/issues/127 +[#134]: https://www.free-decompiler.com/flash/issues/134 +[#155]: https://www.free-decompiler.com/flash/issues/155 +[#142]: https://www.free-decompiler.com/flash/issues/142 +[#146]: https://www.free-decompiler.com/flash/issues/146 +[#130]: https://www.free-decompiler.com/flash/issues/130 +[#132]: https://www.free-decompiler.com/flash/issues/132 +[#145]: https://www.free-decompiler.com/flash/issues/145 +[#147]: https://www.free-decompiler.com/flash/issues/147 +[#148]: https://www.free-decompiler.com/flash/issues/148 +[#152]: https://www.free-decompiler.com/flash/issues/152 +[#156]: https://www.free-decompiler.com/flash/issues/156 +[#157]: https://www.free-decompiler.com/flash/issues/157 +[#158]: https://www.free-decompiler.com/flash/issues/158 +[#159]: https://www.free-decompiler.com/flash/issues/159 +[#160]: https://www.free-decompiler.com/flash/issues/160 +[#162]: https://www.free-decompiler.com/flash/issues/162 +[#163]: https://www.free-decompiler.com/flash/issues/163 +[#149]: https://www.free-decompiler.com/flash/issues/149 +[#150]: https://www.free-decompiler.com/flash/issues/150 +[#119]: https://www.free-decompiler.com/flash/issues/119 +[#101]: https://www.free-decompiler.com/flash/issues/101 +[#114]: https://www.free-decompiler.com/flash/issues/114 +[#135]: https://www.free-decompiler.com/flash/issues/135 +[#141]: https://www.free-decompiler.com/flash/issues/141 +[#102]: https://www.free-decompiler.com/flash/issues/102 +[#124]: https://www.free-decompiler.com/flash/issues/124 +[#128]: https://www.free-decompiler.com/flash/issues/128 +[#131]: https://www.free-decompiler.com/flash/issues/131 +[#104]: https://www.free-decompiler.com/flash/issues/104 +[#113]: https://www.free-decompiler.com/flash/issues/113 +[#133]: https://www.free-decompiler.com/flash/issues/133 +[#140]: https://www.free-decompiler.com/flash/issues/140 +[#108]: https://www.free-decompiler.com/flash/issues/108 +[#105]: https://www.free-decompiler.com/flash/issues/105 +[#109]: https://www.free-decompiler.com/flash/issues/109 +[#106]: https://www.free-decompiler.com/flash/issues/106 +[#107]: https://www.free-decompiler.com/flash/issues/107 +[#110]: https://www.free-decompiler.com/flash/issues/110 +[#103]: https://www.free-decompiler.com/flash/issues/103 +[#111]: https://www.free-decompiler.com/flash/issues/111 +[#96]: https://www.free-decompiler.com/flash/issues/96 +[#98]: https://www.free-decompiler.com/flash/issues/98 +[#99]: https://www.free-decompiler.com/flash/issues/99 +[#100]: https://www.free-decompiler.com/flash/issues/100 +[#85]: https://www.free-decompiler.com/flash/issues/85 +[#79]: https://www.free-decompiler.com/flash/issues/79 +[#92]: https://www.free-decompiler.com/flash/issues/92 +[#93]: https://www.free-decompiler.com/flash/issues/93 +[#94]: https://www.free-decompiler.com/flash/issues/94 +[#95]: https://www.free-decompiler.com/flash/issues/95 +[#86]: https://www.free-decompiler.com/flash/issues/86 +[#87]: https://www.free-decompiler.com/flash/issues/87 +[#88]: https://www.free-decompiler.com/flash/issues/88 +[#89]: https://www.free-decompiler.com/flash/issues/89 +[#82]: https://www.free-decompiler.com/flash/issues/82 +[#78]: https://www.free-decompiler.com/flash/issues/78 +[#81]: https://www.free-decompiler.com/flash/issues/81 +[#84]: https://www.free-decompiler.com/flash/issues/84 +[#83]: https://www.free-decompiler.com/flash/issues/83 +[#65]: https://www.free-decompiler.com/flash/issues/65 +[#48]: https://www.free-decompiler.com/flash/issues/48 +[#53]: https://www.free-decompiler.com/flash/issues/53 +[#66]: https://www.free-decompiler.com/flash/issues/66 +[#68]: https://www.free-decompiler.com/flash/issues/68 +[#69]: https://www.free-decompiler.com/flash/issues/69 +[#75]: https://www.free-decompiler.com/flash/issues/75 +[#73]: https://www.free-decompiler.com/flash/issues/73 +[#62]: https://www.free-decompiler.com/flash/issues/62 +[#72]: https://www.free-decompiler.com/flash/issues/72 +[#64]: https://www.free-decompiler.com/flash/issues/64 +[#38]: https://www.free-decompiler.com/flash/issues/38 +[#56]: https://www.free-decompiler.com/flash/issues/56 +[#57]: https://www.free-decompiler.com/flash/issues/57 +[#58]: https://www.free-decompiler.com/flash/issues/58 +[#45]: https://www.free-decompiler.com/flash/issues/45 +[#50]: https://www.free-decompiler.com/flash/issues/50 +[#51]: https://www.free-decompiler.com/flash/issues/51 +[#52]: https://www.free-decompiler.com/flash/issues/52 +[#47]: https://www.free-decompiler.com/flash/issues/47 +[#42]: https://www.free-decompiler.com/flash/issues/42 +[#39]: https://www.free-decompiler.com/flash/issues/39 +[#40]: https://www.free-decompiler.com/flash/issues/40 +[#44]: https://www.free-decompiler.com/flash/issues/44 +[#36]: https://www.free-decompiler.com/flash/issues/36 +[#43]: https://www.free-decompiler.com/flash/issues/43 +[#46]: https://www.free-decompiler.com/flash/issues/46 +[#3]: https://www.free-decompiler.com/flash/issues/3 +[#37]: https://www.free-decompiler.com/flash/issues/37 +[#34]: https://www.free-decompiler.com/flash/issues/34 +[#35]: https://www.free-decompiler.com/flash/issues/35 +[#32]: https://www.free-decompiler.com/flash/issues/32 [#31]: https://www.free-decompiler.com/flash/issues/31 \ No newline at end of file From 69847bb79fe2946506ddcebfe016ed9b56ad7f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 20:50:18 +0100 Subject: [PATCH 053/114] open loaded SWF files during run - fixed bug - not opening file in event dispatch thread --- CHANGELOG.md | 1 + src/com/jpexs/decompiler/flash/gui/Main.java | 4832 +++++++++--------- 2 files changed, 2419 insertions(+), 2414 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 375c18360..9fe22c46d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ All notable changes to this project will be documented in this file. - [#1401] SVG export: duplicate pattern IDs fixed - [#1402] SVG export: certain font characters not exported properly fixed - [#1430] AS 1/2 deobfuscation fixes +- Opening loaded SWF files during run fixed ## [10.0.0] - 2016-12-24 ### Added diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 85db3d614..fc81cf0ee 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -1,2414 +1,2418 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.debugger.flash.Debugger; -import com.jpexs.debugger.flash.DebuggerCommands; -import com.jpexs.debugger.flash.Variable; -import com.jpexs.debugger.flash.VariableType; -import com.jpexs.debugger.flash.messages.in.InCallFunction; -import com.jpexs.decompiler.flash.ApplicationInfo; -import com.jpexs.decompiler.flash.EventListener; -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFBundle; -import com.jpexs.decompiler.flash.SWFSourceInfo; -import com.jpexs.decompiler.flash.SearchMode; -import com.jpexs.decompiler.flash.SwfOpenException; -import com.jpexs.decompiler.flash.UrlResolver; -import com.jpexs.decompiler.flash.Version; -import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; -import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; -import com.jpexs.decompiler.flash.console.CommandLineArgumentParser; -import com.jpexs.decompiler.flash.console.ContextMenuTools; -import com.jpexs.decompiler.flash.exporters.modes.ExeExportMode; -import com.jpexs.decompiler.flash.gui.debugger.DebugListener; -import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; -import com.jpexs.decompiler.flash.gui.pipes.FirstInstance; -import com.jpexs.decompiler.flash.gui.proxy.ProxyFrame; -import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; -import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.tags.base.FontTag; -import com.jpexs.decompiler.flash.tags.base.ImportTag; -import com.jpexs.decompiler.flash.treeitems.SWFList; -import com.jpexs.helpers.Cache; -import com.jpexs.helpers.CancellableWorker; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.Path; -import com.jpexs.helpers.ProgressListener; -import com.jpexs.helpers.Stopwatch; -import com.jpexs.helpers.streams.SeekableInputStream; -import com.sun.jna.Platform; -import com.sun.jna.platform.win32.Advapi32Util; -import com.sun.jna.platform.win32.Kernel32; -import com.sun.jna.platform.win32.WinReg; -import java.awt.AWTException; -import java.awt.Frame; -import java.awt.GraphicsEnvironment; -import java.awt.MenuItem; -import java.awt.PopupMenu; -import java.awt.SystemTray; -import java.awt.TrayIcon; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.lang.reflect.Field; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.URL; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.logging.ConsoleHandler; -import java.util.logging.FileHandler; -import java.util.logging.Formatter; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.SwingWorker; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.filechooser.FileFilter; -import org.pushingpixels.substance.api.SubstanceLookAndFeel; - -/** - * Main executable class - * - * @author JPEXS - */ -public class Main { - - protected static ProxyFrame proxyFrame; - - private static List sourceInfos = new ArrayList<>(); - - public static LoadingDialog loadingDialog; - - private static boolean working = false; - - private static TrayIcon trayIcon; - - private static MenuItem stopMenuItem; - - private static volatile MainFrame mainFrame; - - public static final int UPDATE_SYSTEM_MAJOR = 1; - - public static final int UPDATE_SYSTEM_MINOR = 3; - - private static LoadFromMemoryFrame loadFromMemoryFrame; - - private static LoadFromCacheFrame loadFromCacheFrame; - - private static final Logger logger = Logger.getLogger(Main.class.getName()); - - public static DebugLogDialog debugDialog; - - public static boolean shouldCloseWhenClosingLoadingDialog; - - private static Debugger flashDebugger; - - private static DebuggerHandler debugHandler = null; - - //private static int ip = 0; - //private static String ipClass = null; - private static Process runProcess; - - private static boolean runProcessDebug; - - private static boolean runProcessDebugPCode; - - private static boolean inited = false; - - private static File runTempFile; - - private static List runTempFiles = new ArrayList<>(); - - public static void freeRun() { - synchronized (Main.class) { - if (runTempFile != null) { - runTempFile.delete(); - runTempFile = null; - } - for (File f : runTempFiles) { - f.delete(); - } - runTempFiles.clear(); - - runProcess = null; - } - if (mainFrame != null && mainFrame.getPanel() != null) { - mainFrame.getPanel().clearDebuggerColors(); - } - if (runProcessDebug) { - Main.getDebugHandler().disconnect(); - } - } - - public static synchronized boolean isDebugPaused() { - return runProcess != null && runProcessDebug && getDebugHandler().isPaused(); - } - - public static synchronized boolean isDebugRunning() { - return runProcess != null && runProcessDebug; - } - - public static synchronized boolean isDebugPCode() { - return runProcessDebugPCode; - } - - public static synchronized boolean isDebugConnected() { - return getDebugHandler().isConnected(); - } - - public static synchronized boolean isRunning() { - return runProcess != null && !runProcessDebug; - } - - /** - * FIXME! - * - * @param v - */ - public static synchronized void dumpBytes(Variable v) { - InCallFunction icf; - try { - long objectId = 0l; - if ((v.vType == VariableType.OBJECT || v.vType == VariableType.MOVIECLIP)) { - objectId = (Long) v.value; - } - Object oldPos = getDebugHandler().getVariable(objectId, "position", true).parent.value; - getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, 0); - icf = getDebugHandler().callFunction(false, "readUTF", v, new ArrayList<>()); - System.out.println("Result=" + icf.variables.get(0).value); - getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, oldPos); - } catch (DebuggerHandler.ActionScriptException ex) { - Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); - } - - } - - public static synchronized boolean addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { - DebuggerCommands.Watch w = getDebugHandler().addWatch(v, v_id, watchRead, watchWrite); - return w != null; - } - - public static void runPlayer(String title, final String exePath, String file, String flashVars) { - if (!new File(file).exists()) { - return; - } - if (flashVars != null && !flashVars.isEmpty()) { - file += "?" + flashVars; - } - final String ffile = file; - - CancellableWorker runWorker = new CancellableWorker() { - @Override - protected Object doInBackground() throws Exception { - Process proc; - try { - proc = Runtime.getRuntime().exec(new String[]{exePath, ffile}); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - return null; - } - boolean isDebug; - - synchronized (Main.class) { - runProcess = proc; - isDebug = runProcessDebug; - } - if (isDebug) { - mainFrame.getMenu().hilightPath("/debugging"); - } - mainFrame.getMenu().updateComponents(); - try { - if (proc != null) { - proc.waitFor(); - } - } catch (InterruptedException ex) { - if (proc != null) { - try { - proc.destroy(); - } catch (Exception ex2) { - //ignore - } - } - } - freeRun(); - stopDebugger(); - mainFrame.getMenu().updateComponents(); - return null; - } - - @Override - protected void done() { - Main.stopWork(); - } - - @Override - public void workerCancelled() { - Main.stopWork(); - synchronized (Main.class) { - if (runProcess != null) { - try { - runProcess.destroy(); - } catch (Exception ex) { - - } - } - } - freeRun(); - mainFrame.getMenu().updateComponents(); - } - }; - - mainFrame.getMenu().updateComponents(); - Main.startWork(title + "...", runWorker); - runWorker.execute(); - } - - public static void stopRun() { - - synchronized (Main.class) { - if (runProcess != null) { - runProcess.destroy(); - } - } - freeRun(); - stopDebugger(); - mainFrame.getMenu().updateComponents(); - } - - private static interface SwfPreparation { - - public SWF prepare(SWF swf); - } - - private static class SwfRunPrepare implements SwfPreparation { - - @Override - public SWF prepare(SWF swf) { - if (Configuration.autoOpenLoadedSWFs.get()) { - if (!DebuggerTools.hasDebugger(swf)) { - DebuggerTools.switchDebugger(swf); - } - DebuggerTools.injectDebugLoader(swf); - } - return swf; - } - } - - private static class SwfDebugPrepare extends SwfRunPrepare { - - private boolean doPCode; - - public SwfDebugPrepare(boolean doPCode) { - this.doPCode = doPCode; - } - - @Override - public SWF prepare(SWF instrSWF) { - instrSWF = super.prepare(instrSWF); - try { - File fTempFile = new File(instrSWF.getFile()); - instrSWF.enableDebugging(true, new File("."), true, doPCode); - FileOutputStream fos = new FileOutputStream(fTempFile); - instrSWF.saveTo(fos); - fos.close(); - if (!instrSWF.isAS3()) { - //Read again, because line file offsets changed with adding debug tags - //TODO: handle somehow without rereading? - instrSWF = null; - try (FileInputStream fis = new FileInputStream(fTempFile)) { - instrSWF = new SWF(fis, false, false); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } - if (instrSWF != null) { - String swfFileName = fTempFile.getAbsolutePath(); - if (swfFileName.toLowerCase().endsWith(".swf")) { - swfFileName = swfFileName.substring(0, swfFileName.length() - 4) + ".swd"; - } else { - swfFileName = swfFileName + ".swd"; - } - File swdFile = new File(swfFileName); - if (doPCode) { - instrSWF.generatePCodeSwdFile(swdFile, getPackBreakPoints(true)); - } else { - instrSWF.generateSwdFile(swdFile, getPackBreakPoints(true)); - } - } - } - } catch (IOException ex) { - //ignore, return instrSWF - } - return instrSWF; - } - } - - private static void prepareSwf(SwfPreparation prep, File toPrepareFile, File origFile, List tempFiles) throws IOException { - SWF instrSWF = null; - try (FileInputStream fis = new FileInputStream(toPrepareFile)) { - instrSWF = new SWF(fis, toPrepareFile.getAbsolutePath(), origFile.getName(), false); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } - if (instrSWF != null) { - for (Tag t : instrSWF.getLocalTags()) { - if (t instanceof ImportTag) { - ImportTag it = (ImportTag) t; - String url = it.getUrl(); - File importedFile = new File(origFile.getParentFile(), url); - if (importedFile.exists()) { - File newTempFile = File.createTempFile("ffdec_run_import_", ".swf"); - it.setUrl("./" + newTempFile.getName()); - byte[] impData = Helper.readFile(importedFile.getAbsolutePath()); - Helper.writeFile(newTempFile.getAbsolutePath(), impData); - tempFiles.add(newTempFile); - prepareSwf(prep, newTempFile, importedFile, tempFiles); - } - } - } - if (prep != null) { - instrSWF = prep.prepare(instrSWF); - } - try (FileOutputStream fos = new FileOutputStream(toPrepareFile)) { - instrSWF.saveTo(fos); - } - } - } - - public static void run(SWF swf) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - advancedSettings("paths"); - return; - } - if (swf == null) { - return; - } - File tempFile; - List tempFiles = new ArrayList<>(); - try { - tempFile = File.createTempFile("ffdec_run_", ".swf"); - - try (FileOutputStream fos = new FileOutputStream(tempFile)) { - swf.saveTo(fos); - } - - prepareSwf(new SwfRunPrepare(), tempFile, new File(swf.getFile()), tempFiles); - - } catch (IOException ex) { - return; - - } - if (tempFile != null) { - synchronized (Main.class) { - runTempFile = tempFile; - runTempFiles = tempFiles; - runProcessDebug = false; - } - runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); - } - } - - public static void runDebug(SWF swf, final boolean doPCode) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerDebugLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - Main.advancedSettings("paths"); - return; - } - if (swf == null) { - return; - } - File tempFile = null; - - try { - tempFile = File.createTempFile("ffdec_debug_", ".swf"); - } catch (Exception ex) { - - } - - if (tempFile != null) { - final File fTempFile = tempFile; - final List tempFiles = new ArrayList<>(); - CancellableWorker instrumentWorker = new CancellableWorker() { - @Override - protected Object doInBackground() throws Exception { - - try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { - swf.saveTo(fos); - } - prepareSwf(new SwfDebugPrepare(doPCode), fTempFile, new File(swf.getFile()), tempFiles); - return null; - } - - @Override - public void workerCancelled() { - Main.stopWork(); - } - - @Override - protected void done() { - synchronized (Main.class) { - runTempFile = fTempFile; - runProcessDebug = true; - runProcessDebugPCode = doPCode; - runTempFiles = tempFiles; - } - Main.stopWork(); - Main.startDebugger(); - runPlayer(AppStrings.translate("work.debugging.wait"), playerLocation, fTempFile.getAbsolutePath(), flashVars); - } - }; - - Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); - instrumentWorker.execute(); - } - } - - /* public static void debuggerNotSuspended() { - - }*/ - public static boolean isDebugging() { - return isDebugRunning(); - } - - public synchronized static int getIp(Object pack) { - return getDebugHandler().getBreakIp(); - } - - public synchronized static String getIpClass() { - return getDebugHandler().getBreakScriptName(); - } - - public static synchronized boolean isBreakPointValid(String scriptName, int line) { - return !getDebugHandler().isBreakpointInvalid(scriptName, line); - } - - public synchronized static void addBreakPoint(String scriptName, int line) { - getDebugHandler().addBreakPoint(scriptName, line); - } - - public synchronized static void removeBreakPoint(String scriptName, int line) { - getDebugHandler().removeBreakPoint(scriptName, line); - } - - public synchronized static boolean toggleBreakPoint(String scriptName, int line) { - if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line) || getDebugHandler().isBreakpointInvalid(scriptName, line)) { - getDebugHandler().removeBreakPoint(scriptName, line); - return false; - } else { - getDebugHandler().addBreakPoint(scriptName, line); - return true; - } - } - - public synchronized static Map> getPackBreakPoints(boolean validOnly) { - return getDebugHandler().getAllBreakPoints(validOnly); - } - - public synchronized static Set getScriptBreakPoints(String pack, boolean onlyValid) { - return getDebugHandler().getBreakPoints(pack, onlyValid); - } - - public static DebuggerHandler getDebugHandler() { - return debugHandler; - } - - public static void ensureMainFrame() { - if (mainFrame == null) { - synchronized (Main.class) { - if (mainFrame == null) { - MainFrame frame; - if (Configuration.useRibbonInterface.get()) { - frame = new MainFrameRibbon(); - } else { - frame = new MainFrameClassic(); - } - frame.getPanel().setErrorState(ErrorLogFrame.getInstance().getErrorState()); - mainFrame = frame; - } - } - } - } - - public static MainFrame getMainFrame() { - return mainFrame; - } - - public static void loadFromCache() { - if (loadFromCacheFrame == null) { - loadFromCacheFrame = new LoadFromCacheFrame(); - } - loadFromCacheFrame.setVisible(true); - } - - public static void loadFromMemory() { - if (loadFromMemoryFrame == null) { - loadFromMemoryFrame = new LoadFromMemoryFrame(mainFrame); - } - loadFromMemoryFrame.setVisible(true); - } - - public static void setVariable(long parentId, String varName, int valueType, Object value) { - getDebugHandler().setVariable(parentId, varName, valueType, value); - } - - public static void setSubLimiter(boolean value) { - if (value) { - AVM2Code.toSourceLimit = Configuration.sublimiter.get(); - } else { - AVM2Code.toSourceLimit = -1; - } - } - - public synchronized static boolean isInited() { - return inited; - } - - public synchronized static void setSessionLoaded(boolean v) { - inited = v; - } - - public static boolean isWorking() { - return working; - } - - public static void startProxy(int port) { - if (proxyFrame == null) { - proxyFrame = new ProxyFrame(mainFrame); - } - - proxyFrame.setPort(port); - addTrayIcon(); - switchProxy(); - } - - public static void showProxy() { - if (proxyFrame == null) { - proxyFrame = new ProxyFrame(mainFrame); - } - proxyFrame.setVisible(true); - proxyFrame.setState(Frame.NORMAL); - } - - public static void startWork(String name, CancellableWorker worker) { - startWork(name, -1, worker); - } - - public static void startWork(final String name, final int percent, final CancellableWorker worker) { - working = true; - View.execInEventDispatchLater(() -> { - if (mainFrame != null) { - mainFrame.getPanel().setWorkStatus(name, worker); - if (percent == -1) { - mainFrame.getPanel().hidePercent(); - } else { - mainFrame.getPanel().setPercent(percent); - } - } - if (loadingDialog != null) { - loadingDialog.setDetail(name); - loadingDialog.setPercent(percent); - } - if (CommandLineArgumentParser.isCommandLineMode()) { - System.out.println(name); - } - }); - } - - public static void stopWork() { - working = false; - View.execInEventDispatchLater(() -> { - if (mainFrame != null) { - mainFrame.getPanel().setWorkStatus("", null); - } - if (loadingDialog != null) { - loadingDialog.setDetail(""); - } - }); - } - - public static SWFList parseSWF(SWFSourceInfo sourceInfo) throws Exception { - SWFList result = new SWFList(); - - InputStream inputStream = sourceInfo.getInputStream(); - SWFBundle bundle = null; - FileInputStream fis = null; - if (inputStream == null) { - inputStream = new BufferedInputStream(fis = new FileInputStream(sourceInfo.getFile())); - bundle = sourceInfo.getBundle(false, SearchMode.ALL); - logger.log(Level.INFO, "Load file: {0}", sourceInfo.getFile()); - } else if (inputStream instanceof SeekableInputStream - || inputStream instanceof BufferedInputStream) { - try { - inputStream.reset(); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - } - logger.log(Level.INFO, "Load stream: {0}", sourceInfo.getFileTitle()); - } - - Stopwatch sw = Stopwatch.startNew(); - if (bundle != null) { - result.bundle = bundle; - result.name = new File(sourceInfo.getFileTitleOrName()).getName(); - for (Entry streamEntry : bundle.getAll().entrySet()) { - InputStream stream = streamEntry.getValue(); - stream.reset(); - CancellableWorker worker = new CancellableWorker() { - @Override - public SWF doInBackground() throws Exception { - final CancellableWorker worker = this; - SWF swf = new SWF(stream, null, streamEntry.getKey(), new ProgressListener() { - @Override - public void progress(int p) { - startWork(AppStrings.translate("work.reading.swf"), p, worker); - } - }, Configuration.parallelSpeedUp.get()); - return swf; - } - }; - loadingDialog.setWroker(worker); - worker.execute(); - - try { - result.add(worker.get()); - } catch (CancellationException ex) { - logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", streamEntry.getKey()); - } - } - } else { - InputStream fInputStream = inputStream; - - final String[] yesno = new String[]{AppStrings.translate("button.yes"), AppStrings.translate("button.no"), AppStrings.translate("button.yes.all"), AppStrings.translate("button.no.all")}; - - CancellableWorker worker = new CancellableWorker() { - private boolean yestoall = false; - - private boolean notoall = false; - - private SWF open(InputStream is, String file, String fileTitle) throws IOException, InterruptedException { - final CancellableWorker worker = this; - - SWF swf = new SWF(is, file, fileTitle, new ProgressListener() { - @Override - public void progress(int p) { - startWork(AppStrings.translate("work.reading.swf"), p, worker); - } - }, Configuration.parallelSpeedUp.get(), false, true, new UrlResolver() { - @Override - public SWF resolveUrl(final String url) { - int opt = -1; - if (!(yestoall || notoall)) { - opt = View.showOptionDialog(null, AppStrings.translate("message.imported.swf").replace("%url%", url), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, yesno, AppStrings.translate("button.yes")); - if (opt == 2) { - yestoall = true; - } - if (opt == 3) { - notoall = true; - } - } - - if (yestoall) { - opt = 0; // yes - } else if (notoall) { - opt = 1; // no - } - - if (opt == 1) //no - { - return null; - } - - if (url.startsWith("http://") || url.startsWith("https://")) { - try { - URL u = new URL(url); - return open(u.openStream(), null, url); //? - } catch (Exception ex) { - //ignore - } - } else { - File f = new File(new File(file).getParentFile(), url); - if (f.exists()) { - try { - return open(new FileInputStream(f), f.getAbsolutePath(), f.getName()); - } catch (Exception ex) { - //ignore - } - } - } - Reference ret = new Reference<>(null); - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - - while (JOptionPane.YES_OPTION == View.showConfirmDialog(null, AppStrings.translate("message.imported.swf.manually").replace("%url%", url), AppStrings.translate("error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)) { - - JFileChooser fc = new JFileChooser(); - fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); - FileFilter allSupportedFilter = new FileFilter() { - private final String[] supportedExtensions = new String[]{".swf", ".gfx"}; - - @Override - public boolean accept(File f) { - String name = f.getName().toLowerCase(); - for (String ext : supportedExtensions) { - if (name.endsWith(ext)) { - return true; - } - } - return f.isDirectory(); - } - - @Override - public String getDescription() { - String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); - return AppStrings.translate("filter.supported") + " (" + exts + ")"; - } - }; - fc.setFileFilter(allSupportedFilter); - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - fc.addChoosableFileFilter(swfFilter); - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - fc.addChoosableFileFilter(gfxFilter); - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - int returnVal = fc.showOpenDialog(f); - if (returnVal == JFileChooser.APPROVE_OPTION) { - Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); - File selFile = Helper.fixDialogFile(fc.getSelectedFile()); - try { - ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); - break; - } catch (Exception ex) { - //ignore; - } - } else { - break; - } - } - } - }); - return ret.getVal(); - } - }); - return swf; - } - - @Override - public SWF doInBackground() throws Exception { - return open(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle()); - } - }; - if (loadingDialog != null) { - loadingDialog.setWroker(worker); - } - worker.execute(); - - try { - result.add(worker.get()); - } catch (CancellationException ex) { - logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", sourceInfo.getFileTitleOrName()); - } - } - - if (fis != null) { - logger.log(Level.INFO, "File loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); - fis.close(); - } else { - logger.log(Level.INFO, "Stream loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); - } - - result.sourceInfo = sourceInfo; - for (SWF swf : result) { - logger.log(Level.INFO, ""); - logger.log(Level.INFO, "== File information =="); - logger.log(Level.INFO, "Size: {0}", Helper.formatFileSize(swf.fileSize)); - logger.log(Level.INFO, "Flash version: {0}", swf.version); - int width = (int) ((swf.displayRect.Xmax - swf.displayRect.Xmin) / SWF.unitDivisor); - int height = (int) ((swf.displayRect.Ymax - swf.displayRect.Ymin) / SWF.unitDivisor); - logger.log(Level.INFO, "Width: {0}", width); - logger.log(Level.INFO, "Height: {0}", height); - - swf.swfList = result; - swf.addEventListener(new EventListener() { - @Override - public void handleExportingEvent(String type, int index, int count, Object data) { - String text = AppStrings.translate("work.exporting"); - if (type != null && type.length() > 0) { - text += " " + type; - } - - startWork(text + " " + index + "/" + count + " " + data, null); - } - - @Override - public void handleExportedEvent(String type, int index, int count, Object data) { - String text = AppStrings.translate("work.exported"); - if (type != null && type.length() > 0) { - text += " " + type; - } - - startWork(text + " " + index + "/" + count + " " + data, null); - } - - @Override - public void handleEvent(String event, Object data) { - if (event.equals("exporting") || event.equals("exported")) { - throw new Error("Event is not supported by this handler."); - } - if (event.equals("getVariables")) { - startWork(AppStrings.translate("work.gettingvariables") + "..." + (String) data, null); - } - if (event.equals("deobfuscate")) { - startWork(AppStrings.translate("work.deobfuscating") + "..." + (String) data, null); - } - if (event.equals("rename")) { - startWork(AppStrings.translate("work.renaming") + "..." + (String) data, null); - } - } - }); - } - - return result; - } - - public static void saveFile(SWF swf, String outfile) throws IOException { - saveFile(swf, outfile, SaveFileMode.SAVE, null); - } - - public static void saveFile(SWF swf, String outfile, SaveFileMode mode, ExeExportMode exeExportMode) throws IOException { - if (mode == SaveFileMode.SAVEAS && !swf.swfList.isBundle()) { - swf.setFile(outfile); - swf.swfList.sourceInfo.setFile(outfile); - } - File outfileF = new File(outfile); - File tmpFile = new File(outfile + ".tmp"); - try (FileOutputStream fos = new FileOutputStream(tmpFile); - BufferedOutputStream bos = new BufferedOutputStream(fos)) { - if (mode == SaveFileMode.EXE) { - switch (exeExportMode) { - case WRAPPER: - InputStream exeStream = View.class.getClassLoader().getResourceAsStream("com/jpexs/helpers/resource/Swf2Exe.bin"); - Helper.copyStream(exeStream, bos); - int width = swf.displayRect.Xmax - swf.displayRect.Xmin; - int height = swf.displayRect.Ymax - swf.displayRect.Ymin; - bos.write(width & 0xff); - bos.write((width >> 8) & 0xff); - bos.write((width >> 16) & 0xff); - bos.write((width >> 24) & 0xff); - bos.write(height & 0xff); - bos.write((height >> 8) & 0xff); - bos.write((height >> 16) & 0xff); - bos.write((height >> 24) & 0xff); - bos.write(Configuration.saveAsExeScaleMode.get()); - break; - case PROJECTOR_WIN: - case PROJECTOR_MAC: - case PROJECTOR_LINUX: - File projectorFile = Configuration.getProjectorFile(exeExportMode); - if (projectorFile == null) { - String message = "Projector not found, please place it to " + Configuration.getProjectorPath(); - logger.log(Level.SEVERE, message); - throw new IOException(message); - } - Helper.copyStream(new FileInputStream(projectorFile), bos); - bos.flush(); - break; - } - } - - long pos = fos.getChannel().position(); - swf.saveTo(bos); - - if (mode == SaveFileMode.EXE) { - switch (exeExportMode) { - case PROJECTOR_WIN: - case PROJECTOR_MAC: - case PROJECTOR_LINUX: - bos.flush(); - int swfSize = (int) (fos.getChannel().position() - pos); - - // write magic number - bos.write(0x56); - bos.write(0x34); - bos.write(0x12); - bos.write(0xfa); - - bos.write(swfSize & 0xff); - bos.write((swfSize >> 8) & 0xff); - bos.write((swfSize >> 16) & 0xff); - bos.write((swfSize >> 24) & 0xff); - } - } - } - if (tmpFile.exists()) { - if (tmpFile.length() > 0) { - outfileF.delete(); - if (!tmpFile.renameTo(outfileF)) { - tmpFile.delete(); - throw new IOException("Cannot access " + outfile); - } - } else { - throw new IOException("Output is empty"); - } - } else { - throw new IOException("Output not found"); - } - } - - private static class OpenFileWorker extends SwingWorker { - - private final SWFSourceInfo[] sourceInfos; - - private final Runnable executeAfterOpen; - - private final int[] reloadIndices; - - public OpenFileWorker(SWFSourceInfo sourceInfo) { - this(sourceInfo, -1); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, int reloadIndex) { - this(sourceInfo, null, reloadIndex); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { - this(sourceInfo, executeAfterOpen, -1); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { - this.sourceInfos = new SWFSourceInfo[]{sourceInfo}; - this.executeAfterOpen = executeAfterOpen; - this.reloadIndices = new int[]{reloadIndex}; - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos) { - this(sourceInfos, null, null); - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen) { - this(sourceInfos, executeAfterOpen, null); - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { - this.sourceInfos = sourceInfos; - this.executeAfterOpen = executeAfterOpen; - int[] indices = new int[sourceInfos.length]; - for (int i = 0; i < indices.length; i++) { - indices[i] = -1; - } - this.reloadIndices = reloadIndices == null ? indices : reloadIndices; - } - - @Override - protected Object doInBackground() throws Exception { - boolean first = true; - SWF firstSWF = null; - for (int index = 0; index < sourceInfos.length; index++) { - SWFSourceInfo sourceInfo = sourceInfos[index]; - SWFList swfs = null; - try { - Main.startWork(AppStrings.translate("work.reading.swf") + "...", null); - try { - swfs = parseSWF(sourceInfo); - } catch (ExecutionException ex) { - Throwable cause = ex.getCause(); - if (cause instanceof SwfOpenException) { - throw (SwfOpenException) cause; - } - - throw ex; - } - } catch (OutOfMemoryError ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, "Cannot load SWF file. Out of memory."); - continue; - } catch (SwfOpenException ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, ex.getMessage()); - continue; - } catch (Exception ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, "Cannot load SWF file."); - continue; - } - - final SWFList swfs1 = swfs; - final boolean first1 = first; - first = false; - if (firstSWF == null && swfs1.size() > 0) { - firstSWF = swfs1.get(0); - } - - final int findex = index; - try { - View.execInEventDispatch(() -> { - Main.startWork(AppStrings.translate("work.creatingwindow") + "...", null); - ensureMainFrame(); - if (reloadIndices[findex] > -1) { - mainFrame.getPanel().loadSwfAtPos(swfs1, reloadIndices[findex]); - } else { - mainFrame.getPanel().load(swfs1, first1); - } - }); - } catch (Exception ex) { - logger.log(Level.SEVERE, null, ex); - } - } - - loadingDialog.setVisible(false); - shouldCloseWhenClosingLoadingDialog = false; - - final SWF fswf = firstSWF; - View.execInEventDispatch(() -> { - if (mainFrame != null) { - mainFrame.setVisible(true); - } - - Main.stopWork(); - - if (mainFrame != null && Configuration.gotoMainClassOnStartup.get()) { - mainFrame.getPanel().gotoDocumentClass(fswf); - } - - if (mainFrame != null && fswf != null) { - SwfSpecificConfiguration swfConf = Configuration.getSwfSpecificConfiguration(fswf.getShortFileName()); - if (swfConf != null) { - String pathStr = swfConf.lastSelectedPath; - mainFrame.getPanel().tagTree.setSelectionPathString(pathStr); - } - } - - if (executeAfterOpen != null) { - executeAfterOpen.run(); - } - }); - - return true; - } - } - - public static boolean reloadSWFs() { - CancellableWorker.cancelBackgroundThreads(); - if (Main.sourceInfos.isEmpty()) { - Helper.freeMem(); - showModeFrame(); - return true; - } else { - SWFSourceInfo[] sourceInfosCopy = new SWFSourceInfo[sourceInfos.size()]; - sourceInfos.toArray(sourceInfosCopy); - sourceInfos.clear(); - openFile(sourceInfosCopy); - return true; - } - } - - public static void reloadApp() { - if (debugDialog != null) { - debugDialog.setVisible(false); - debugDialog.dispose(); - debugDialog = null; - } - if (loadingDialog != null) { - synchronized (Main.class) { - if (loadingDialog != null) { - loadingDialog.setVisible(false); - loadingDialog.dispose(); - loadingDialog = null; - } - } - } - if (proxyFrame != null) { - proxyFrame.setVisible(false); - proxyFrame.dispose(); - proxyFrame = null; - } - if (loadFromMemoryFrame != null) { - loadFromMemoryFrame.setVisible(false); - loadFromMemoryFrame.dispose(); - loadFromMemoryFrame = null; - } - if (loadFromCacheFrame != null) { - loadFromCacheFrame.setVisible(false); - loadFromCacheFrame.dispose(); - loadFromCacheFrame = null; - } - if (mainFrame != null) { - mainFrame.setVisible(false); - mainFrame.getPanel().closeAll(false); - mainFrame.dispose(); - mainFrame = null; - } - FontTag.reload(); - Cache.clearAll(); - initGui(); - reloadSWFs(); - } - - public static OpenFileResult openFile(String swfFile, String fileTitle) { - View.checkAccess(); - - return openFile(swfFile, fileTitle, null); - } - - public static OpenFileResult openFile(String swfFile, String fileTitle, Runnable executeAfterOpen) { - View.checkAccess(); - - try { - File file = new File(swfFile); - if (!file.exists()) { - View.showMessageDialog(null, AppStrings.translate("open.error.fileNotFound"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); - return OpenFileResult.NOT_FOUND; - } - swfFile = file.getCanonicalPath(); - SWFSourceInfo sourceInfo = new SWFSourceInfo(null, swfFile, fileTitle); - OpenFileResult openResult = openFile(sourceInfo); - return openResult; - } catch (IOException ex) { - View.showMessageDialog(null, AppStrings.translate("open.error.cannotOpen"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); - return OpenFileResult.ERROR; - } - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}); - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen); - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen, new int[]{reloadIndex}); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos) { - View.checkAccess(); - - return openFile(newSourceInfos, null); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen) { - View.checkAccess(); - - return openFile(newSourceInfos, executeAfterOpen, null); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { - View.checkAccess(); - - if (mainFrame != null && !Configuration.openMultipleFiles.get()) { - sourceInfos.clear(); - mainFrame.getPanel().closeAll(false); - mainFrame.setVisible(false); - Helper.freeMem(); - reloadIndices = null; - } - - loadingDialog.setVisible(true); - - for (int i = 0; i < newSourceInfos.length; i++) { - SWFSourceInfo si = newSourceInfos[i]; - String fileName = si.getFile(); - if (fileName != null) { - Configuration.addRecentFile(fileName); - } - } - - OpenFileWorker wrk = new OpenFileWorker(newSourceInfos, executeAfterOpen, reloadIndices); - wrk.execute(); - if (reloadIndices == null) { - sourceInfos.addAll(Arrays.asList(newSourceInfos)); - } else { - for (int i = 0; i < reloadIndices.length; i++) { - sourceInfos.set(reloadIndices[i], newSourceInfos[i]); - } - } - return OpenFileResult.OK; - } - - public static void closeFile(SWFList swf) { - View.checkAccess(); - - sourceInfos.remove(swf.sourceInfo); - mainFrame.getPanel().close(swf); - } - - public static void reloadFile(SWFList swf) { - View.checkAccess(); - - openFile(swf.sourceInfo, null, sourceInfos.indexOf(swf.sourceInfo)); - } - - public static boolean closeAll() { - View.checkAccess(); - - boolean closeResult = mainFrame.getPanel().closeAll(true); - if (closeResult) { - sourceInfos.clear(); - } - - return closeResult; - } - - public static boolean saveFileDialog(SWF swf, final SaveFileMode mode) { - JFileChooser fc = new JFileChooser(); - fc.setCurrentDirectory(new File(Configuration.lastSaveDir.get())); - String ext = ".swf"; - switch (mode) { - case SAVE: - case SAVEAS: - if (swf.getFile() != null) { - ext = Path.getExtension(swf.getFile()); - } - break; - case EXE: - ext = ".exe"; - break; - } - - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - - ExeExportMode exeExportMode = null; - if (mode == SaveFileMode.EXE) { - exeExportMode = Configuration.exeExportMode.get(); - if (exeExportMode == null) { - exeExportMode = ExeExportMode.WRAPPER; - } - String filterDescription = null; - switch (exeExportMode) { - case WRAPPER: - case PROJECTOR_WIN: - ext = ".exe"; - filterDescription = "filter.exe"; - break; - case PROJECTOR_MAC: - ext = ".dmg"; - filterDescription = "filter.dmg"; - break; - case PROJECTOR_LINUX: - // linux projector is compressed with tar.gz - // todo: decompress - ext = ""; - filterDescription = "filter.linuxExe"; - break; - } - - String fext = ext; - String ffilterDescription = filterDescription; - FileFilter exeFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(fext)) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate(ffilterDescription); - } - }; - fc.setFileFilter(exeFilter); - } else if (swf.gfx) { - fc.addChoosableFileFilter(swfFilter); - fc.setFileFilter(gfxFilter); - } else { - fc.setFileFilter(swfFilter); - fc.addChoosableFileFilter(gfxFilter); - } - final String extension = ext; - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) { - File file = Helper.fixDialogFile(fc.getSelectedFile()); - FileFilter selFilter = fc.getFileFilter(); - try { - String fileName = file.getAbsolutePath(); - if (selFilter == swfFilter) { - if (!fileName.toLowerCase().endsWith(extension)) { - fileName += extension; - } - swf.gfx = false; - } - if (selFilter == gfxFilter) { - if (!fileName.toLowerCase().endsWith(".gfx")) { - fileName += ".gfx"; - } - swf.gfx = true; - } - Main.saveFile(swf, fileName, mode, exeExportMode); - Configuration.lastSaveDir.set(file.getParentFile().getAbsolutePath()); - return true; - } catch (IOException ex) { - View.showMessageDialog(null, AppStrings.translate("error.file.write")); - } - } - return false; - } - - public static boolean openFileDialog() { - View.checkAccess(); - - JFileChooser fc = new JFileChooser(); - if (Configuration.openMultipleFiles.get()) { - fc.setMultiSelectionEnabled(true); - } - fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); - FileFilter allSupportedFilter = new FileFilter() { - private final String[] supportedExtensions = new String[]{".swf", ".gfx", ".swc", ".zip", ".iggy"}; - - @Override - public boolean accept(File f) { - String name = f.getName().toLowerCase(); - for (String ext : supportedExtensions) { - if (name.endsWith(ext)) { - return true; - } - } - return f.isDirectory(); - } - - @Override - public String getDescription() { - String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); - return AppStrings.translate("filter.supported") + " (" + exts + ")"; - } - }; - fc.setFileFilter(allSupportedFilter); - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - fc.addChoosableFileFilter(swfFilter); - - FileFilter swcFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swc")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swc"); - } - }; - fc.addChoosableFileFilter(swcFilter); - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - fc.addChoosableFileFilter(gfxFilter); - - FileFilter iggyFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".iggy")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.iggy"); - } - }; - fc.addChoosableFileFilter(iggyFilter); - - FileFilter zipFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".zip")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.zip"); - } - }; - fc.addChoosableFileFilter(zipFilter); - - FileFilter binaryFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return true; - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.binary"); - } - }; - fc.addChoosableFileFilter(binaryFilter); - - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - int returnVal = fc.showOpenDialog(f); - if (returnVal == JFileChooser.APPROVE_OPTION) { - Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); - File[] selFiles = fc.getSelectedFiles(); - for (File file : selFiles) { - File selfile = Helper.fixDialogFile(file); - Main.openFile(selfile.getAbsolutePath(), null); - } - return true; - } else { - return false; - } - } - - public static void displayErrorFrame() { - ErrorLogFrame.getInstance().setVisible(true); - } - - private static String md5(byte data[]) { - try { - java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); - byte[] array = md.digest(data); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < array.length; ++i) { - sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); - } - return sb.toString(); - } catch (java.security.NoSuchAlgorithmException e) { - } - return null; - } - - private static void initGui() { - if (GraphicsEnvironment.isHeadless()) { - System.err.println("Error: Your system does not support Graphic User Interface"); - exit(); - } - - System.setProperty("sun.java2d.d3d", "false"); - System.setProperty("sun.java2d.noddraw", "true"); - - if (Configuration.hwAcceleratedGraphics.get()) { - System.setProperty("sun.java2d.opengl", Configuration._debugMode.get() ? "True" : "true"); - } else { - System.setProperty("sun.java2d.opengl", "false"); - } - - initUiLang(); - - if (Configuration.useRibbonInterface.get()) { - View.setLookAndFeel(); - } else { - try { - UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, null); - UIManager.put("Tree.expandedIcon", null); - UIManager.put("Tree.collapsedIcon", null); - UIManager.put("ColorChooserUI", null); - UIManager.put("ColorChooser.swatchesRecentSwatchSize", null); - UIManager.put("ColorChooser.swatchesSwatchSize", null); - UIManager.put("RibbonApplicationMenuPopupPanelUI", null); - UIManager.put("RibbonApplicationMenuButtonUI", null); - UIManager.put("ProgressBarUI", null); - UIManager.put("TextField.background", null); - UIManager.put("FormattedTextField.background", null); - UIManager.put("CommandButtonUI", null); - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { - logger.log(Level.SEVERE, null, ex); - } - } - - View.execInEventDispatch(() -> { - ErrorLogFrame.createNewInstance(); - - autoCheckForUpdates(); - offerAssociation(); - loadingDialog = new LoadingDialog(); - - DebuggerTools.initDebugger().addMessageListener(new DebugListener() { - @Override - public void onMessage(String clientId, String msg) { - } - - @Override - public void onLoaderURL(String clientId, String url) { - } - - @Override - public void onLoaderBytes(String clientId, byte[] data) { - String hash = md5(data); - for (SWFList sl : Main.getMainFrame().getPanel().getSwfs()) { - for (int s = 0; s < sl.size(); s++) { - String t = sl.get(s).getFileTitle(); - if (t == null) { - t = ""; - } - if (t.endsWith(":" + hash)) { //this one is already opened - return; - } - } - } - SWF swf = Main.getMainFrame().getPanel().getCurrentSwf(); - - String title = swf == null ? "?" : swf.getFileTitle(); - title = title + ":" + hash; - String tfile; - try { - tfile = tempFile(title); - Helper.writeFile(tfile, data); - openFile(new SWFSourceInfo(null, tfile, title)); - } catch (IOException ex) { - logger.log(Level.SEVERE, "Cannot create tempfile"); - } - } - - @Override - public void onFinish(String clientId) { - } - }); - - try { - flashDebugger = new Debugger(); - debugHandler = new DebuggerHandler(); - debugHandler.addBreakListener(new DebuggerHandler.BreakListener() { - @Override - public void doContinue() { - mainFrame.getPanel().clearDebuggerColors(); - } - - @Override - public void breakAt(String scriptName, int line, final int classIndex, final int traitIndex, final int methodIndex) { - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - mainFrame.getPanel().gotoScriptLine(getMainFrame().getPanel().getCurrentSwf(), scriptName, line, classIndex, traitIndex, methodIndex); - } - }); - } - }); - debugHandler.addConnectionListener(new DebuggerHandler.ConnectionListener() { - @Override - public void connected() { - Main.mainFrame.getMenu().updateComponents(); - } - - @Override - public void disconnected() { - if (Main.mainFrame != null && Main.mainFrame.getPanel() != null) { - Main.mainFrame.getPanel().refreshBreakPoints(); - } - } - }); - flashDebugger.addConnectionListener(debugHandler); - } catch (IOException ex) { - logger.log(Level.SEVERE, "eeex", ex); - } - }); - } - - public static void startDebugger() { - flashDebugger.startDebugger(); - } - - public static void stopDebugger() { - flashDebugger.stopDebugger(); - } - - public static void showModeFrame() { - ensureMainFrame(); - mainFrame.setVisible(true); - } - - private static void offerAssociation() { - boolean offered = Configuration.offeredAssociation.get(); - if (!offered) { - if (Platform.isWindows()) { - if ((!ContextMenuTools.isAddedToContextMenu()) && View.showConfirmDialog(null, "Do you want to add FFDec to context menu of SWF files?\n(Can be changed later from main menu)", "Context menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { - ContextMenuTools.addToContextMenu(true, false); - } - } - - Configuration.offeredAssociation.set(true); - } - } - - public static void initUiLang() { - if (GraphicsEnvironment.isHeadless()) { //No GUI in OS - return; - } - try { - Class cl = Class.forName("org.pushingpixels.substance.api.SubstanceLookAndFeel"); - Field field = cl.getDeclaredField("LABEL_BUNDLE"); - field.setAccessible(true); - field.set(null, null); - } catch (Throwable ex) { - logger.log(Level.SEVERE, null, ex); - } - - UIManager.put("OptionPane.okButtonText", AppStrings.translate("button.ok")); - UIManager.put("OptionPane.yesButtonText", AppStrings.translate("button.yes")); - UIManager.put("OptionPane.noButtonText", AppStrings.translate("button.no")); - UIManager.put("OptionPane.cancelButtonText", AppStrings.translate("button.cancel")); - UIManager.put("OptionPane.messageDialogTitle", AppStrings.translate("dialog.message.title")); - UIManager.put("OptionPane.titleText", AppStrings.translate("dialog.select.title")); - - UIManager.put("FileChooser.acceptAllFileFilterText", AppStrings.translate("FileChooser.acceptAllFileFilterText")); - UIManager.put("FileChooser.lookInLabelText", AppStrings.translate("FileChooser.lookInLabelText")); - UIManager.put("FileChooser.cancelButtonText", AppStrings.translate("button.cancel")); - UIManager.put("FileChooser.cancelButtonToolTipText", AppStrings.translate("button.cancel")); - UIManager.put("FileChooser.openButtonText", AppStrings.translate("FileChooser.openButtonText")); - UIManager.put("FileChooser.openButtonToolTipText", AppStrings.translate("FileChooser.openButtonToolTipText")); - UIManager.put("FileChooser.filesOfTypeLabelText", AppStrings.translate("FileChooser.filesOfTypeLabelText")); - UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); - UIManager.put("FileChooser.listViewButtonToolTipText", AppStrings.translate("FileChooser.listViewButtonToolTipText")); - UIManager.put("FileChooser.listViewButtonAccessibleName", AppStrings.translate("FileChooser.listViewButtonAccessibleName")); - UIManager.put("FileChooser.detailsViewButtonToolTipText", AppStrings.translate("FileChooser.detailsViewButtonToolTipText")); - UIManager.put("FileChooser.detailsViewButtonAccessibleName", AppStrings.translate("FileChooser.detailsViewButtonAccessibleName")); - UIManager.put("FileChooser.upFolderToolTipText", AppStrings.translate("FileChooser.upFolderToolTipText")); - UIManager.put("FileChooser.upFolderAccessibleName", AppStrings.translate("FileChooser.upFolderAccessibleName")); - UIManager.put("FileChooser.homeFolderToolTipText", AppStrings.translate("FileChooser.homeFolderToolTipText")); - UIManager.put("FileChooser.homeFolderAccessibleName", AppStrings.translate("FileChooser.homeFolderAccessibleName")); - UIManager.put("FileChooser.fileNameHeaderText", AppStrings.translate("FileChooser.fileNameHeaderText")); - UIManager.put("FileChooser.fileSizeHeaderText", AppStrings.translate("FileChooser.fileSizeHeaderText")); - UIManager.put("FileChooser.fileTypeHeaderText", AppStrings.translate("FileChooser.fileTypeHeaderText")); - UIManager.put("FileChooser.fileDateHeaderText", AppStrings.translate("FileChooser.fileDateHeaderText")); - UIManager.put("FileChooser.fileAttrHeaderText", AppStrings.translate("FileChooser.fileAttrHeaderText")); - UIManager.put("FileChooser.openDialogTitleText", AppStrings.translate("FileChooser.openDialogTitleText")); - UIManager.put("FileChooser.directoryDescriptionText", AppStrings.translate("FileChooser.directoryDescriptionText")); - UIManager.put("FileChooser.directoryOpenButtonText", AppStrings.translate("FileChooser.directoryOpenButtonText")); - UIManager.put("FileChooser.directoryOpenButtonToolTipText", AppStrings.translate("FileChooser.directoryOpenButtonToolTipText")); - UIManager.put("FileChooser.fileDescriptionText", AppStrings.translate("FileChooser.fileDescriptionText")); - UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); - UIManager.put("FileChooser.helpButtonText", AppStrings.translate("FileChooser.helpButtonText")); - UIManager.put("FileChooser.helpButtonToolTipText", AppStrings.translate("FileChooser.helpButtonToolTipText")); - UIManager.put("FileChooser.newFolderAccessibleName", AppStrings.translate("FileChooser.newFolderAccessibleName")); - UIManager.put("FileChooser.newFolderErrorText", AppStrings.translate("FileChooser.newFolderErrorText")); - UIManager.put("FileChooser.newFolderToolTipText", AppStrings.translate("FileChooser.newFolderToolTipText")); - UIManager.put("FileChooser.other.newFolder", AppStrings.translate("FileChooser.other.newFolder")); - UIManager.put("FileChooser.other.newFolder.subsequent", AppStrings.translate("FileChooser.other.newFolder.subsequent")); - UIManager.put("FileChooser.win32.newFolder", AppStrings.translate("FileChooser.win32.newFolder")); - UIManager.put("FileChooser.win32.newFolder.subsequent", AppStrings.translate("FileChooser.win32.newFolder.subsequent")); - UIManager.put("FileChooser.saveButtonText", AppStrings.translate("FileChooser.saveButtonText")); - UIManager.put("FileChooser.saveButtonToolTipText", AppStrings.translate("FileChooser.saveButtonToolTipText")); - UIManager.put("FileChooser.saveDialogTitleText", AppStrings.translate("FileChooser.saveDialogTitleText")); - UIManager.put("FileChooser.saveInLabelText", AppStrings.translate("FileChooser.saveInLabelText")); - UIManager.put("FileChooser.updateButtonText", AppStrings.translate("FileChooser.updateButtonText")); - UIManager.put("FileChooser.updateButtonToolTipText", AppStrings.translate("FileChooser.updateButtonToolTipText")); - - UIManager.put("FileChooser.detailsViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.detailsViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewButtonToolTip.textAndMnemonic")); - UIManager.put("FileChooser.fileAttrHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileAttrHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileDateHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileDateHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileNameHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileNameHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.fileNameLabel.textAndMnemonic")); - UIManager.put("FileChooser.fileSizeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileSizeHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileTypeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileTypeHeader.textAndMnemonic")); - UIManager.put("FileChooser.filesOfTypeLabel.textAndMnemonic", AppStrings.translate("FileChooser.filesOfTypeLabel.textAndMnemonic")); - UIManager.put("FileChooser.folderNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.folderNameLabel.textAndMnemonic")); - UIManager.put("FileChooser.homeFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.homeFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.listViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.listViewActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.listViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.listViewButtonToolTip.textAndMnemonic")); - UIManager.put("FileChooser.lookInLabel.textAndMnemonic", AppStrings.translate("FileChooser.lookInLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.newFolderActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.newFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.refreshActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.refreshActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.saveInLabel.textAndMnemonic", AppStrings.translate("FileChooser.saveInLabel.textAndMnemonic")); - UIManager.put("FileChooser.upFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.upFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.viewMenuButtonAccessibleName", AppStrings.translate("FileChooser.viewMenuButtonAccessibleName")); - UIManager.put("FileChooser.viewMenuButtonToolTipText", AppStrings.translate("FileChooser.viewMenuButtonToolTipText")); - UIManager.put("FileChooser.viewMenuLabel.textAndMnemonic", AppStrings.translate("FileChooser.viewMenuLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderActionLabelText", AppStrings.translate("FileChooser.newFolderActionLabelText")); - UIManager.put("FileChooser.listViewActionLabelText", AppStrings.translate("FileChooser.listViewActionLabelText")); - UIManager.put("FileChooser.detailsViewActionLabelText", AppStrings.translate("FileChooser.detailsViewActionLabelText")); - UIManager.put("FileChooser.refreshActionLabelText", AppStrings.translate("FileChooser.refreshActionLabelText")); - UIManager.put("FileChooser.sortMenuLabelText", AppStrings.translate("FileChooser.sortMenuLabelText")); - UIManager.put("FileChooser.viewMenuLabelText", AppStrings.translate("FileChooser.viewMenuLabelText")); - UIManager.put("FileChooser.fileSizeKiloBytes", AppStrings.translate("FileChooser.fileSizeKiloBytes")); - UIManager.put("FileChooser.fileSizeMegaBytes", AppStrings.translate("FileChooser.fileSizeMegaBytes")); - UIManager.put("FileChooser.fileSizeGigaBytes", AppStrings.translate("FileChooser.fileSizeGigaBytes")); - UIManager.put("FileChooser.folderNameLabelText", AppStrings.translate("FileChooser.folderNameLabelText")); - - UIManager.put("ColorChooser.okText", AppStrings.translate("ColorChooser.okText")); - UIManager.put("ColorChooser.cancelText", AppStrings.translate("ColorChooser.cancelText")); - UIManager.put("ColorChooser.resetText", AppStrings.translate("ColorChooser.resetText")); - UIManager.put("ColorChooser.previewText", AppStrings.translate("ColorChooser.previewText")); - UIManager.put("ColorChooser.swatchesNameText", AppStrings.translate("ColorChooser.swatchesNameText")); - UIManager.put("ColorChooser.swatchesRecentText", AppStrings.translate("ColorChooser.swatchesRecentText")); - UIManager.put("ColorChooser.sampleText", AppStrings.translate("ColorChooser.sampleText")); - - } - - public static void initLang() { - if (!Configuration.locale.hasValue()) { - if (Platform.isWindows()) { - //Load from Installer - String uninstKey = "{E618D276-6596-41F4-8A98-447D442A77DB}_is1"; - uninstKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstKey; - try { - if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey)) { - if (Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language")) { - String installedLoc = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language"); - int lcid = Integer.parseInt(installedLoc); - char[] buf = new char[9]; - int cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO639LANGNAME, buf, 9); - String langCode = new String(buf, 0, cnt).trim().toLowerCase(); - - cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO3166CTRYNAME, buf, 9); - String countryCode = new String(buf, 0, cnt).trim().toLowerCase(); - - List langs = Arrays.asList(SelectLanguageDialog.getAvailableLanguages()); - for (int i = 0; i < langs.size(); i++) { - langs.set(i, langs.get(i).toLowerCase()); - } - - String selectedLang = null; - - if (langs.contains(langCode + "-" + countryCode)) { - selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode + "-" + countryCode)]; - } else if (langs.contains(langCode)) { - selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode)]; - } - if (selectedLang != null) { - Configuration.locale.set(selectedLang); - } - } - } - } catch (Exception ex) { - //ignore - } - } - } - Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); - AppStrings.updateLanguage(); - - Helper.decompilationErrorAdd = AppStrings.translate(Configuration.autoDeobfuscate.get() ? "deobfuscation.comment.failed" : "deobfuscation.comment.tryenable"); - } - - /** - * Clear old FFDec/JavactiveX temp files - */ - private static void clearTemp() { - String tempDirPath = System.getProperty("java.io.tmpdir"); - if (tempDirPath == null) { - return; - } - File tempDir = new File(tempDirPath); - if (!tempDir.exists()) { - return; - } - File[] delFiles = tempDir.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.matches("ffdec_cache.*\\.tmp") || name.matches("javactivex_.*\\.exe") || name.matches("temp[0-9]+\\.swf") || name.matches("ffdec_view_.*\\.swf"); - } - }); - - if (delFiles != null) { - for (File f : delFiles) { - try { - f.delete(); - } catch (Exception ex) { - //ignore - } - } - } - } - - /** - * @param args the command line arguments - * @throws IOException On error - */ - public static void main(String[] args) throws IOException { - setSessionLoaded(false); - - clearTemp(); - - try { - SWFDecompilerPlugin.loadPlugins(); - } catch (Throwable ex) { - logger.log(Level.SEVERE, "Failed to load plugins", ex); - } - - AppStrings.setResourceClass(MainFrame.class); - initLogging(Configuration._debugMode.get()); - - initLang(); - - if (Configuration.cacheOnDisk.get()) { - Cache.setStorageType(Cache.STORAGE_FILES); - } else { - Cache.setStorageType(Cache.STORAGE_MEMORY); - } - - if (args.length == 0) { - initGui(); - checkLibraryVersion(); - View.execInEventDispatch(() -> { - if (Configuration.allowOnlyOneInstance.get() && FirstInstance.focus()) { //Try to focus first instance - Main.exit(); - } else { - showModeFrame(); - reloadLastSession(); - } - }); - } else { - checkLibraryVersion(); - setSessionLoaded(true); - String[] filesToOpen = CommandLineArgumentParser.parseArguments(args); - if (filesToOpen != null && filesToOpen.length > 0) { - View.execInEventDispatch(() -> { - initGui(); - shouldCloseWhenClosingLoadingDialog = true; - if (Configuration.allowOnlyOneInstance.get() && FirstInstance.openFiles(Arrays.asList(filesToOpen))) { //Try to open in first instance - Main.exit(); - } else { - for (String fileToOpen : filesToOpen) { - openFile(fileToOpen, null); - } - } - }); - } - } - } - - private static void checkLibraryVersion() { - if (!ApplicationInfo.version.equals("unknown") && !ApplicationInfo.libraryVersion.equals("unknown") - && !Objects.equals(ApplicationInfo.version, ApplicationInfo.libraryVersion)) { - logger.log(Level.WARNING, "Application version is different from library version. FFDec may not work properly."); - } - } - - private static void reloadLastSession() { - boolean openingFiles = false; - if (Configuration.saveSessionOnExit.get()) { - String lastSession = Configuration.lastSessionFiles.get(); - if (lastSession != null && lastSession.length() > 0) { - String[] filesToOpen = lastSession.split(File.pathSeparator, -1); - List exfiles = new ArrayList<>(); - List extitles = new ArrayList<>(); - String lastSessionTitles = Configuration.lastSessionFileTitles.get(); - String[] fileTitles = new String[0]; - if (lastSessionTitles != null && !lastSessionTitles.isEmpty()) { - fileTitles = lastSessionTitles.split(File.pathSeparator, -1); - } - for (int i = 0; i < filesToOpen.length; i++) { - if (new File(filesToOpen[i]).exists()) { - exfiles.add(filesToOpen[i]); - if (fileTitles.length > i) { - extitles.add(fileTitles[i]); - } else { - extitles.add(null); - } - } - } - SWFSourceInfo[] sourceInfos = new SWFSourceInfo[exfiles.size()]; - for (int i = 0; i < exfiles.size(); i++) { - String extitle = extitles.get(i); - sourceInfos[i] = new SWFSourceInfo(null, exfiles.get(i), extitle == null || extitle.isEmpty() ? null : extitle); - } - if (sourceInfos.length > 0) { - openingFiles = true; - openFile(sourceInfos, () -> { - mainFrame.getPanel().tagTree.setSelectionPathString(Configuration.lastSessionSelection.get()); - setSessionLoaded(true); - }); - } - } - } - - if (!openingFiles) { - setSessionLoaded(true); - } - } - - public static String tempFile(String url) throws IOException { - File f = new File(Configuration.getFFDecHome() + "saved" + File.separator); - Path.createDirectorySafe(f); - return Configuration.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp"; - } - - public static void removeTrayIcon() { - if (SystemTray.isSupported()) { - SystemTray tray = SystemTray.getSystemTray(); - if (trayIcon != null) { - tray.remove(trayIcon); - trayIcon = null; - } - } - } - - public static void switchProxy() { - proxyFrame.switchState(); - if (stopMenuItem != null) { - if (proxyFrame.isRunning()) { - stopMenuItem.setLabel(AppStrings.translate("proxy.stop")); - } else { - stopMenuItem.setLabel(AppStrings.translate("proxy.start")); - } - } - } - - public static void addTrayIcon() { - if (trayIcon != null) { - return; - } - if (SystemTray.isSupported()) { - SystemTray tray = SystemTray.getSystemTray(); - trayIcon = new TrayIcon(View.loadImage("proxy16"), ApplicationInfo.VENDOR + " " + ApplicationInfo.SHORT_APPLICATION_NAME + " " + AppStrings.translate("proxy")); - trayIcon.setImageAutoSize(true); - PopupMenu trayPopup = new PopupMenu(); - - ActionListener trayListener = new ActionListener() { - /** - * Invoked when an action occurs. - */ - @Override - public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("EXIT")) { - Main.exit(); - } - if (e.getActionCommand().equals("SHOW")) { - Main.showProxy(); - } - if (e.getActionCommand().equals("SWITCH")) { - Main.switchProxy(); - } - } - }; - - MenuItem showMenuItem = new MenuItem(AppStrings.translate("proxy.show")); - showMenuItem.setActionCommand("SHOW"); - showMenuItem.addActionListener(trayListener); - trayPopup.add(showMenuItem); - stopMenuItem = new MenuItem(AppStrings.translate("proxy.start")); - stopMenuItem.setActionCommand("SWITCH"); - stopMenuItem.addActionListener(trayListener); - trayPopup.add(stopMenuItem); - trayPopup.addSeparator(); - MenuItem exitMenuItem = new MenuItem(AppStrings.translate("exit")); - exitMenuItem.setActionCommand("EXIT"); - exitMenuItem.addActionListener(trayListener); - trayPopup.add(exitMenuItem); - - trayIcon.setPopupMenu(trayPopup); - trayIcon.addMouseListener(new MouseAdapter() { - /** - * {@inheritDoc} - */ - @Override - public void mouseClicked(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1) { - Main.showProxy(); - } - } - }); - try { - tray.add(trayIcon); - } catch (AWTException ex) { - } - } - } - - public static void exit() { - Configuration.saveConfig(); - if (mainFrame != null && mainFrame.getPanel() != null) { - mainFrame.getPanel().unloadFlashPlayer(); - mainFrame.dispose(); - } - if (fileTxt != null) { - try { - fileTxt.flush(); - fileTxt.close(); - } catch (Exception ex) { - //ignore - } - } - System.exit(0); - } - - public static void about() { - (new AboutDialog()).setVisible(true); - } - - public static void advancedSettings() { - advancedSettings(null); - } - - public static void advancedSettings(String category) { - (new AdvancedSettingsDialog(category)).setVisible(true); - } - - public static void autoCheckForUpdates() { - if (Configuration.checkForUpdatesAuto.get()) { - Calendar lastUpdatesCheckDate = Configuration.lastUpdatesCheckDate.get(); - if ((lastUpdatesCheckDate == null) || (lastUpdatesCheckDate.getTime().getTime() < Calendar.getInstance().getTime().getTime() - Configuration.checkForUpdatesDelay.get())) { - new SwingWorker() { - @Override - protected Object doInBackground() throws Exception { - checkForUpdates(); - return null; - } - }.execute(); - } - } - } - - public static boolean checkForUpdates() { - String currentVersion = ApplicationInfo.version; - if (currentVersion.equals("unknown")) { - // sometimes during development the version information is not available - return false; - } - - List accepted = new ArrayList<>(); - if (Configuration.checkForUpdatesStable.get()) { - accepted.add("stable"); - } - if (Configuration.checkForUpdatesNightly.get()) { - accepted.add("nightly"); - } - - if (accepted.isEmpty()) { - return false; - } - - String acceptVersions = String.join(",", accepted); - try { - String proxyAddress = Configuration.updateProxyAddress.get(); - URL url = new URL(ApplicationInfo.updateCheckUrl); - - URLConnection uc; - if (proxyAddress != null && !proxyAddress.isEmpty()) { - int port = 8080; - if (proxyAddress.contains(":")) { - String[] parts = proxyAddress.split(":"); - port = Integer.parseInt(parts[1]); - proxyAddress = parts[0]; - } - - uc = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress, port))); - } else { - uc = url.openConnection(); - } - uc.setRequestProperty("X-Accept-Versions", acceptVersions); - uc.setRequestProperty("X-Update-Major", "" + UPDATE_SYSTEM_MAJOR); - uc.setRequestProperty("X-Update-Minor", "" + UPDATE_SYSTEM_MINOR); - uc.setRequestProperty("User-Agent", ApplicationInfo.shortApplicationVerName); - String currentLoc = Configuration.locale.get("en"); - uc.setRequestProperty("Accept-Language", currentLoc + ("en".equals(currentLoc) ? "" : ", en;q=0.8")); - - uc.connect(); - - BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); - String s; - final java.util.List versions = new ArrayList<>(); - String header = ""; - Pattern headerPat = Pattern.compile("\\[([a-zA-Z0-9]+)\\]"); - int updateMajor; - int updateMinor; - Version ver = null; - while ((s = br.readLine()) != null) { - - Matcher m = headerPat.matcher(s); - if (m.matches()) { - header = m.group(1); - if (header.equals("version")) { - ver = new Version(); - versions.add(ver); - } - if (header.equals("noversion")) { - break; - } - } else if (s.contains("=")) { - String key = s.substring(0, s.indexOf('=')); - String val = s.substring(s.indexOf('=') + 1); - if ("updateSystem".equals(header)) { - if (key.equals("majorVersion")) { - updateMajor = Integer.parseInt(val); - if (updateMajor > UPDATE_SYSTEM_MAJOR) { - break; - } - } - if (key.equals("minorVersion")) { - updateMinor = Integer.parseInt(val); - } - } - if ("version".equals(header) && (ver != null)) { - if (key.equals("versionId")) { - ver.versionId = Integer.parseInt(val); - } - if (key.equals("versionName")) { - ver.versionName = val; - } - if (key.equals("nightly")) { - ver.nightly = val.equals("true"); - } - if (key.equals("revision")) { - ver.revision = val; - } - if (key.equals("build")) { - ver.build = Integer.parseInt(val); - } - if (key.equals("major")) { - ver.major = Integer.parseInt(val); - } - if (key.equals("minor")) { - ver.minor = Integer.parseInt(val); - } - if (key.equals("release")) { - ver.release = Integer.parseInt(val); - } - if (key.equals("longVersionName")) { - ver.longVersionName = val; - } - if (key.equals("releaseDate")) { - ver.releaseDate = val; - } - if (key.equals("appName")) { - ver.appName = val; - } - if (key.equals("appFullName")) { - ver.appFullName = val; - } - if (key.equals("updateLink")) { - ver.updateLink = val; - } - if (key.equals("change[]")) { - String changeType = val.substring(0, val.indexOf('|')); - String change = val.substring(val.indexOf('|') + 1); - if (!ver.changes.containsKey(changeType)) { - ver.changes.put(changeType, new ArrayList<>()); - } - List chlist = ver.changes.get(changeType); - chlist.add(change); - } - } - } - } - - if (!versions.isEmpty()) { - View.execInEventDispatch(() -> { - NewVersionDialog newVersionDialog = new NewVersionDialog(versions); - newVersionDialog.setVisible(true); - Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); - }); - - return true; - } - } catch (IOException | NumberFormatException ex) { - return false; - } - Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); - return false; - } - - private static FileHandler fileTxt; - - public static void clearLogFile() { - Logger logger = Logger.getLogger(""); - - FileHandler oldFileTxt = fileTxt; - fileTxt = null; - if (oldFileTxt != null) { - logger.removeHandler(fileTxt); - oldFileTxt.flush(); - oldFileTxt.close(); - } - - String fileName = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); - - try { - fileName = Configuration.getFFDecHome() + "logs" + File.separator; - if (Configuration.useDetailedLogging.get()) { - fileName += "log-" + sdf.format(new Date()) + ".txt"; - } else { - fileName += "log.txt"; - } - File f = new File(fileName).getParentFile(); - if (!f.exists()) { - f.mkdir(); - } - fileTxt = new FileHandler(fileName); - } catch (IOException | SecurityException ex) { - //cannot get lock error - if (ex.getMessage().contains("lock for")) { - //remove all old log files and their .lck - for (int i = 0; i <= 100; i++) { - File flog = new File(fileName + (i == 0 ? "" : "." + i)); - File flog_lock = new File(fileName + (i == 0 ? "" : "." + i) + ".lck"); - flog.delete(); - flog_lock.delete(); - } - try { - fileTxt = new FileHandler(fileName); - } catch (IOException | SecurityException ex1) { - logger.log(Level.SEVERE, "Cannot initialize logging", ex); - } - } else { - logger.log(Level.SEVERE, "Cannot initialize logging", ex); - } - } - - Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread t, Throwable e) { - logger.log(Level.SEVERE, "Uncaught exception in thread: " + t.getName(), e); - if (e instanceof OutOfMemoryError && !Helper.is64BitJre() && Helper.is64BitOs()) { - View.showMessageDialog(null, AppStrings.translate("message.warning.outOfMemory32BitJre"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE); - } - } - }); - - Formatter formatterTxt = new LogFormatter(); - if (fileTxt != null) { - fileTxt.setFormatter(formatterTxt); - logger.addHandler(fileTxt); - } - - if (!GraphicsEnvironment.isHeadless() && ErrorLogFrame.hasInstance()) { - ErrorLogFrame.getInstance().clearErrorState(); - } - - sdf = new SimpleDateFormat("yyyy-MM-dd"); - logger.log(Level.INFO, "Date: {0}", sdf.format(new Date())); - logger.log(Level.INFO, ApplicationInfo.applicationVerName); - logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ - System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")}); - logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ - System.getProperty("java.version"), System.getProperty("java.vendor"), System.getProperty("os.arch")}); - } - - public static void initLogging(boolean debug) { - try { - Logger logger = Logger.getLogger(""); - logger.setLevel(Configuration.logLevel); - - Handler[] handlers = logger.getHandlers(); - for (int i = handlers.length - 1; i >= 0; i--) { - logger.removeHandler(handlers[i]); - } - - ConsoleHandler conHan = new ConsoleHandler(); - conHan.setLevel(debug ? Level.CONFIG : Level.WARNING); - SimpleFormatter formatterTxt = new SimpleFormatter(); - conHan.setFormatter(formatterTxt); - logger.addHandler(conHan); - clearLogFile(); - - } catch (Exception ex) { - throw new RuntimeException("Problems with creating the log files"); - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.debugger.flash.Debugger; +import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.debugger.flash.Variable; +import com.jpexs.debugger.flash.VariableType; +import com.jpexs.debugger.flash.messages.in.InCallFunction; +import com.jpexs.decompiler.flash.ApplicationInfo; +import com.jpexs.decompiler.flash.EventListener; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFBundle; +import com.jpexs.decompiler.flash.SWFSourceInfo; +import com.jpexs.decompiler.flash.SearchMode; +import com.jpexs.decompiler.flash.SwfOpenException; +import com.jpexs.decompiler.flash.UrlResolver; +import com.jpexs.decompiler.flash.Version; +import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; +import com.jpexs.decompiler.flash.console.CommandLineArgumentParser; +import com.jpexs.decompiler.flash.console.ContextMenuTools; +import com.jpexs.decompiler.flash.exporters.modes.ExeExportMode; +import com.jpexs.decompiler.flash.gui.debugger.DebugListener; +import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; +import com.jpexs.decompiler.flash.gui.pipes.FirstInstance; +import com.jpexs.decompiler.flash.gui.proxy.ProxyFrame; +import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.tags.base.FontTag; +import com.jpexs.decompiler.flash.tags.base.ImportTag; +import com.jpexs.decompiler.flash.treeitems.SWFList; +import com.jpexs.helpers.Cache; +import com.jpexs.helpers.CancellableWorker; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.Path; +import com.jpexs.helpers.ProgressListener; +import com.jpexs.helpers.Stopwatch; +import com.jpexs.helpers.streams.SeekableInputStream; +import com.sun.jna.Platform; +import com.sun.jna.platform.win32.Advapi32Util; +import com.sun.jna.platform.win32.Kernel32; +import com.sun.jna.platform.win32.WinReg; +import java.awt.AWTException; +import java.awt.Frame; +import java.awt.GraphicsEnvironment; +import java.awt.MenuItem; +import java.awt.PopupMenu; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.URL; +import java.net.URLConnection; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Formatter; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.SwingWorker; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.filechooser.FileFilter; +import org.pushingpixels.substance.api.SubstanceLookAndFeel; + +/** + * Main executable class + * + * @author JPEXS + */ +public class Main { + + protected static ProxyFrame proxyFrame; + + private static List sourceInfos = new ArrayList<>(); + + public static LoadingDialog loadingDialog; + + private static boolean working = false; + + private static TrayIcon trayIcon; + + private static MenuItem stopMenuItem; + + private static volatile MainFrame mainFrame; + + public static final int UPDATE_SYSTEM_MAJOR = 1; + + public static final int UPDATE_SYSTEM_MINOR = 3; + + private static LoadFromMemoryFrame loadFromMemoryFrame; + + private static LoadFromCacheFrame loadFromCacheFrame; + + private static final Logger logger = Logger.getLogger(Main.class.getName()); + + public static DebugLogDialog debugDialog; + + public static boolean shouldCloseWhenClosingLoadingDialog; + + private static Debugger flashDebugger; + + private static DebuggerHandler debugHandler = null; + + //private static int ip = 0; + //private static String ipClass = null; + private static Process runProcess; + + private static boolean runProcessDebug; + + private static boolean runProcessDebugPCode; + + private static boolean inited = false; + + private static File runTempFile; + + private static List runTempFiles = new ArrayList<>(); + + public static void freeRun() { + synchronized (Main.class) { + if (runTempFile != null) { + runTempFile.delete(); + runTempFile = null; + } + for (File f : runTempFiles) { + f.delete(); + } + runTempFiles.clear(); + + runProcess = null; + } + if (mainFrame != null && mainFrame.getPanel() != null) { + mainFrame.getPanel().clearDebuggerColors(); + } + if (runProcessDebug) { + Main.getDebugHandler().disconnect(); + } + } + + public static synchronized boolean isDebugPaused() { + return runProcess != null && runProcessDebug && getDebugHandler().isPaused(); + } + + public static synchronized boolean isDebugRunning() { + return runProcess != null && runProcessDebug; + } + + public static synchronized boolean isDebugPCode() { + return runProcessDebugPCode; + } + + public static synchronized boolean isDebugConnected() { + return getDebugHandler().isConnected(); + } + + public static synchronized boolean isRunning() { + return runProcess != null && !runProcessDebug; + } + + /** + * FIXME! + * + * @param v + */ + public static synchronized void dumpBytes(Variable v) { + InCallFunction icf; + try { + long objectId = 0l; + if ((v.vType == VariableType.OBJECT || v.vType == VariableType.MOVIECLIP)) { + objectId = (Long) v.value; + } + Object oldPos = getDebugHandler().getVariable(objectId, "position", true).parent.value; + getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, 0); + icf = getDebugHandler().callFunction(false, "readUTF", v, new ArrayList<>()); + System.out.println("Result=" + icf.variables.get(0).value); + getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, oldPos); + } catch (DebuggerHandler.ActionScriptException ex) { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); + } + + } + + public static synchronized boolean addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { + DebuggerCommands.Watch w = getDebugHandler().addWatch(v, v_id, watchRead, watchWrite); + return w != null; + } + + public static void runPlayer(String title, final String exePath, String file, String flashVars) { + if (!new File(file).exists()) { + return; + } + if (flashVars != null && !flashVars.isEmpty()) { + file += "?" + flashVars; + } + final String ffile = file; + + CancellableWorker runWorker = new CancellableWorker() { + @Override + protected Object doInBackground() throws Exception { + Process proc; + try { + proc = Runtime.getRuntime().exec(new String[]{exePath, ffile}); + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + return null; + } + boolean isDebug; + + synchronized (Main.class) { + runProcess = proc; + isDebug = runProcessDebug; + } + if (isDebug) { + mainFrame.getMenu().hilightPath("/debugging"); + } + mainFrame.getMenu().updateComponents(); + try { + if (proc != null) { + proc.waitFor(); + } + } catch (InterruptedException ex) { + if (proc != null) { + try { + proc.destroy(); + } catch (Exception ex2) { + //ignore + } + } + } + freeRun(); + stopDebugger(); + mainFrame.getMenu().updateComponents(); + return null; + } + + @Override + protected void done() { + Main.stopWork(); + } + + @Override + public void workerCancelled() { + Main.stopWork(); + synchronized (Main.class) { + if (runProcess != null) { + try { + runProcess.destroy(); + } catch (Exception ex) { + + } + } + } + freeRun(); + mainFrame.getMenu().updateComponents(); + } + }; + + mainFrame.getMenu().updateComponents(); + Main.startWork(title + "...", runWorker); + runWorker.execute(); + } + + public static void stopRun() { + + synchronized (Main.class) { + if (runProcess != null) { + runProcess.destroy(); + } + } + freeRun(); + stopDebugger(); + mainFrame.getMenu().updateComponents(); + } + + private static interface SwfPreparation { + + public SWF prepare(SWF swf); + } + + private static class SwfRunPrepare implements SwfPreparation { + + @Override + public SWF prepare(SWF swf) { + if (Configuration.autoOpenLoadedSWFs.get()) { + if (!DebuggerTools.hasDebugger(swf)) { + DebuggerTools.switchDebugger(swf); + } + DebuggerTools.injectDebugLoader(swf); + } + return swf; + } + } + + private static class SwfDebugPrepare extends SwfRunPrepare { + + private boolean doPCode; + + public SwfDebugPrepare(boolean doPCode) { + this.doPCode = doPCode; + } + + @Override + public SWF prepare(SWF instrSWF) { + instrSWF = super.prepare(instrSWF); + try { + File fTempFile = new File(instrSWF.getFile()); + instrSWF.enableDebugging(true, new File("."), true, doPCode); + FileOutputStream fos = new FileOutputStream(fTempFile); + instrSWF.saveTo(fos); + fos.close(); + if (!instrSWF.isAS3()) { + //Read again, because line file offsets changed with adding debug tags + //TODO: handle somehow without rereading? + instrSWF = null; + try (FileInputStream fis = new FileInputStream(fTempFile)) { + instrSWF = new SWF(fis, false, false); + } catch (InterruptedException ex) { + logger.log(Level.SEVERE, null, ex); + } + if (instrSWF != null) { + String swfFileName = fTempFile.getAbsolutePath(); + if (swfFileName.toLowerCase().endsWith(".swf")) { + swfFileName = swfFileName.substring(0, swfFileName.length() - 4) + ".swd"; + } else { + swfFileName = swfFileName + ".swd"; + } + File swdFile = new File(swfFileName); + if (doPCode) { + instrSWF.generatePCodeSwdFile(swdFile, getPackBreakPoints(true)); + } else { + instrSWF.generateSwdFile(swdFile, getPackBreakPoints(true)); + } + } + } + } catch (IOException ex) { + //ignore, return instrSWF + } + return instrSWF; + } + } + + private static void prepareSwf(SwfPreparation prep, File toPrepareFile, File origFile, List tempFiles) throws IOException { + SWF instrSWF = null; + try (FileInputStream fis = new FileInputStream(toPrepareFile)) { + instrSWF = new SWF(fis, toPrepareFile.getAbsolutePath(), origFile.getName(), false); + } catch (InterruptedException ex) { + logger.log(Level.SEVERE, null, ex); + } + if (instrSWF != null) { + for (Tag t : instrSWF.getLocalTags()) { + if (t instanceof ImportTag) { + ImportTag it = (ImportTag) t; + String url = it.getUrl(); + File importedFile = new File(origFile.getParentFile(), url); + if (importedFile.exists()) { + File newTempFile = File.createTempFile("ffdec_run_import_", ".swf"); + it.setUrl("./" + newTempFile.getName()); + byte[] impData = Helper.readFile(importedFile.getAbsolutePath()); + Helper.writeFile(newTempFile.getAbsolutePath(), impData); + tempFiles.add(newTempFile); + prepareSwf(prep, newTempFile, importedFile, tempFiles); + } + } + } + if (prep != null) { + instrSWF = prep.prepare(instrSWF); + } + try (FileOutputStream fos = new FileOutputStream(toPrepareFile)) { + instrSWF.saveTo(fos); + } + } + } + + public static void run(SWF swf) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + advancedSettings("paths"); + return; + } + if (swf == null) { + return; + } + File tempFile; + List tempFiles = new ArrayList<>(); + try { + tempFile = File.createTempFile("ffdec_run_", ".swf"); + + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + swf.saveTo(fos); + } + + prepareSwf(new SwfRunPrepare(), tempFile, new File(swf.getFile()), tempFiles); + + } catch (IOException ex) { + return; + + } + if (tempFile != null) { + synchronized (Main.class) { + runTempFile = tempFile; + runTempFiles = tempFiles; + runProcessDebug = false; + } + runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); + } + } + + public static void runDebug(SWF swf, final boolean doPCode) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerDebugLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + Main.advancedSettings("paths"); + return; + } + if (swf == null) { + return; + } + File tempFile = null; + + try { + tempFile = File.createTempFile("ffdec_debug_", ".swf"); + } catch (Exception ex) { + + } + + if (tempFile != null) { + final File fTempFile = tempFile; + final List tempFiles = new ArrayList<>(); + CancellableWorker instrumentWorker = new CancellableWorker() { + @Override + protected Object doInBackground() throws Exception { + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { + swf.saveTo(fos); + } + prepareSwf(new SwfDebugPrepare(doPCode), fTempFile, new File(swf.getFile()), tempFiles); + return null; + } + + @Override + public void workerCancelled() { + Main.stopWork(); + } + + @Override + protected void done() { + synchronized (Main.class) { + runTempFile = fTempFile; + runProcessDebug = true; + runProcessDebugPCode = doPCode; + runTempFiles = tempFiles; + } + Main.stopWork(); + Main.startDebugger(); + runPlayer(AppStrings.translate("work.debugging.wait"), playerLocation, fTempFile.getAbsolutePath(), flashVars); + } + }; + + Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); + instrumentWorker.execute(); + } + } + + /* public static void debuggerNotSuspended() { + + }*/ + public static boolean isDebugging() { + return isDebugRunning(); + } + + public synchronized static int getIp(Object pack) { + return getDebugHandler().getBreakIp(); + } + + public synchronized static String getIpClass() { + return getDebugHandler().getBreakScriptName(); + } + + public static synchronized boolean isBreakPointValid(String scriptName, int line) { + return !getDebugHandler().isBreakpointInvalid(scriptName, line); + } + + public synchronized static void addBreakPoint(String scriptName, int line) { + getDebugHandler().addBreakPoint(scriptName, line); + } + + public synchronized static void removeBreakPoint(String scriptName, int line) { + getDebugHandler().removeBreakPoint(scriptName, line); + } + + public synchronized static boolean toggleBreakPoint(String scriptName, int line) { + if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line) || getDebugHandler().isBreakpointInvalid(scriptName, line)) { + getDebugHandler().removeBreakPoint(scriptName, line); + return false; + } else { + getDebugHandler().addBreakPoint(scriptName, line); + return true; + } + } + + public synchronized static Map> getPackBreakPoints(boolean validOnly) { + return getDebugHandler().getAllBreakPoints(validOnly); + } + + public synchronized static Set getScriptBreakPoints(String pack, boolean onlyValid) { + return getDebugHandler().getBreakPoints(pack, onlyValid); + } + + public static DebuggerHandler getDebugHandler() { + return debugHandler; + } + + public static void ensureMainFrame() { + if (mainFrame == null) { + synchronized (Main.class) { + if (mainFrame == null) { + MainFrame frame; + if (Configuration.useRibbonInterface.get()) { + frame = new MainFrameRibbon(); + } else { + frame = new MainFrameClassic(); + } + frame.getPanel().setErrorState(ErrorLogFrame.getInstance().getErrorState()); + mainFrame = frame; + } + } + } + } + + public static MainFrame getMainFrame() { + return mainFrame; + } + + public static void loadFromCache() { + if (loadFromCacheFrame == null) { + loadFromCacheFrame = new LoadFromCacheFrame(); + } + loadFromCacheFrame.setVisible(true); + } + + public static void loadFromMemory() { + if (loadFromMemoryFrame == null) { + loadFromMemoryFrame = new LoadFromMemoryFrame(mainFrame); + } + loadFromMemoryFrame.setVisible(true); + } + + public static void setVariable(long parentId, String varName, int valueType, Object value) { + getDebugHandler().setVariable(parentId, varName, valueType, value); + } + + public static void setSubLimiter(boolean value) { + if (value) { + AVM2Code.toSourceLimit = Configuration.sublimiter.get(); + } else { + AVM2Code.toSourceLimit = -1; + } + } + + public synchronized static boolean isInited() { + return inited; + } + + public synchronized static void setSessionLoaded(boolean v) { + inited = v; + } + + public static boolean isWorking() { + return working; + } + + public static void startProxy(int port) { + if (proxyFrame == null) { + proxyFrame = new ProxyFrame(mainFrame); + } + + proxyFrame.setPort(port); + addTrayIcon(); + switchProxy(); + } + + public static void showProxy() { + if (proxyFrame == null) { + proxyFrame = new ProxyFrame(mainFrame); + } + proxyFrame.setVisible(true); + proxyFrame.setState(Frame.NORMAL); + } + + public static void startWork(String name, CancellableWorker worker) { + startWork(name, -1, worker); + } + + public static void startWork(final String name, final int percent, final CancellableWorker worker) { + working = true; + View.execInEventDispatchLater(() -> { + if (mainFrame != null) { + mainFrame.getPanel().setWorkStatus(name, worker); + if (percent == -1) { + mainFrame.getPanel().hidePercent(); + } else { + mainFrame.getPanel().setPercent(percent); + } + } + if (loadingDialog != null) { + loadingDialog.setDetail(name); + loadingDialog.setPercent(percent); + } + if (CommandLineArgumentParser.isCommandLineMode()) { + System.out.println(name); + } + }); + } + + public static void stopWork() { + working = false; + View.execInEventDispatchLater(() -> { + if (mainFrame != null) { + mainFrame.getPanel().setWorkStatus("", null); + } + if (loadingDialog != null) { + loadingDialog.setDetail(""); + } + }); + } + + public static SWFList parseSWF(SWFSourceInfo sourceInfo) throws Exception { + SWFList result = new SWFList(); + + InputStream inputStream = sourceInfo.getInputStream(); + SWFBundle bundle = null; + FileInputStream fis = null; + if (inputStream == null) { + inputStream = new BufferedInputStream(fis = new FileInputStream(sourceInfo.getFile())); + bundle = sourceInfo.getBundle(false, SearchMode.ALL); + logger.log(Level.INFO, "Load file: {0}", sourceInfo.getFile()); + } else if (inputStream instanceof SeekableInputStream + || inputStream instanceof BufferedInputStream) { + try { + inputStream.reset(); + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + } + logger.log(Level.INFO, "Load stream: {0}", sourceInfo.getFileTitle()); + } + + Stopwatch sw = Stopwatch.startNew(); + if (bundle != null) { + result.bundle = bundle; + result.name = new File(sourceInfo.getFileTitleOrName()).getName(); + for (Entry streamEntry : bundle.getAll().entrySet()) { + InputStream stream = streamEntry.getValue(); + stream.reset(); + CancellableWorker worker = new CancellableWorker() { + @Override + public SWF doInBackground() throws Exception { + final CancellableWorker worker = this; + SWF swf = new SWF(stream, null, streamEntry.getKey(), new ProgressListener() { + @Override + public void progress(int p) { + startWork(AppStrings.translate("work.reading.swf"), p, worker); + } + }, Configuration.parallelSpeedUp.get()); + return swf; + } + }; + loadingDialog.setWroker(worker); + worker.execute(); + + try { + result.add(worker.get()); + } catch (CancellationException ex) { + logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", streamEntry.getKey()); + } + } + } else { + InputStream fInputStream = inputStream; + + final String[] yesno = new String[]{AppStrings.translate("button.yes"), AppStrings.translate("button.no"), AppStrings.translate("button.yes.all"), AppStrings.translate("button.no.all")}; + + CancellableWorker worker = new CancellableWorker() { + private boolean yestoall = false; + + private boolean notoall = false; + + private SWF open(InputStream is, String file, String fileTitle) throws IOException, InterruptedException { + final CancellableWorker worker = this; + + SWF swf = new SWF(is, file, fileTitle, new ProgressListener() { + @Override + public void progress(int p) { + startWork(AppStrings.translate("work.reading.swf"), p, worker); + } + }, Configuration.parallelSpeedUp.get(), false, true, new UrlResolver() { + @Override + public SWF resolveUrl(final String url) { + int opt = -1; + if (!(yestoall || notoall)) { + opt = View.showOptionDialog(null, AppStrings.translate("message.imported.swf").replace("%url%", url), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, yesno, AppStrings.translate("button.yes")); + if (opt == 2) { + yestoall = true; + } + if (opt == 3) { + notoall = true; + } + } + + if (yestoall) { + opt = 0; // yes + } else if (notoall) { + opt = 1; // no + } + + if (opt == 1) //no + { + return null; + } + + if (url.startsWith("http://") || url.startsWith("https://")) { + try { + URL u = new URL(url); + return open(u.openStream(), null, url); //? + } catch (Exception ex) { + //ignore + } + } else { + File f = new File(new File(file).getParentFile(), url); + if (f.exists()) { + try { + return open(new FileInputStream(f), f.getAbsolutePath(), f.getName()); + } catch (Exception ex) { + //ignore + } + } + } + Reference ret = new Reference<>(null); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + + while (JOptionPane.YES_OPTION == View.showConfirmDialog(null, AppStrings.translate("message.imported.swf.manually").replace("%url%", url), AppStrings.translate("error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)) { + + JFileChooser fc = new JFileChooser(); + fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); + FileFilter allSupportedFilter = new FileFilter() { + private final String[] supportedExtensions = new String[]{".swf", ".gfx"}; + + @Override + public boolean accept(File f) { + String name = f.getName().toLowerCase(); + for (String ext : supportedExtensions) { + if (name.endsWith(ext)) { + return true; + } + } + return f.isDirectory(); + } + + @Override + public String getDescription() { + String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); + return AppStrings.translate("filter.supported") + " (" + exts + ")"; + } + }; + fc.setFileFilter(allSupportedFilter); + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + fc.addChoosableFileFilter(swfFilter); + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + fc.addChoosableFileFilter(gfxFilter); + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + int returnVal = fc.showOpenDialog(f); + if (returnVal == JFileChooser.APPROVE_OPTION) { + Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); + File selFile = Helper.fixDialogFile(fc.getSelectedFile()); + try { + ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); + break; + } catch (Exception ex) { + //ignore; + } + } else { + break; + } + } + } + }); + return ret.getVal(); + } + }); + return swf; + } + + @Override + public SWF doInBackground() throws Exception { + return open(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle()); + } + }; + if (loadingDialog != null) { + loadingDialog.setWroker(worker); + } + worker.execute(); + + try { + result.add(worker.get()); + } catch (CancellationException ex) { + logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", sourceInfo.getFileTitleOrName()); + } + } + + if (fis != null) { + logger.log(Level.INFO, "File loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); + fis.close(); + } else { + logger.log(Level.INFO, "Stream loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); + } + + result.sourceInfo = sourceInfo; + for (SWF swf : result) { + logger.log(Level.INFO, ""); + logger.log(Level.INFO, "== File information =="); + logger.log(Level.INFO, "Size: {0}", Helper.formatFileSize(swf.fileSize)); + logger.log(Level.INFO, "Flash version: {0}", swf.version); + int width = (int) ((swf.displayRect.Xmax - swf.displayRect.Xmin) / SWF.unitDivisor); + int height = (int) ((swf.displayRect.Ymax - swf.displayRect.Ymin) / SWF.unitDivisor); + logger.log(Level.INFO, "Width: {0}", width); + logger.log(Level.INFO, "Height: {0}", height); + + swf.swfList = result; + swf.addEventListener(new EventListener() { + @Override + public void handleExportingEvent(String type, int index, int count, Object data) { + String text = AppStrings.translate("work.exporting"); + if (type != null && type.length() > 0) { + text += " " + type; + } + + startWork(text + " " + index + "/" + count + " " + data, null); + } + + @Override + public void handleExportedEvent(String type, int index, int count, Object data) { + String text = AppStrings.translate("work.exported"); + if (type != null && type.length() > 0) { + text += " " + type; + } + + startWork(text + " " + index + "/" + count + " " + data, null); + } + + @Override + public void handleEvent(String event, Object data) { + if (event.equals("exporting") || event.equals("exported")) { + throw new Error("Event is not supported by this handler."); + } + if (event.equals("getVariables")) { + startWork(AppStrings.translate("work.gettingvariables") + "..." + (String) data, null); + } + if (event.equals("deobfuscate")) { + startWork(AppStrings.translate("work.deobfuscating") + "..." + (String) data, null); + } + if (event.equals("rename")) { + startWork(AppStrings.translate("work.renaming") + "..." + (String) data, null); + } + } + }); + } + + return result; + } + + public static void saveFile(SWF swf, String outfile) throws IOException { + saveFile(swf, outfile, SaveFileMode.SAVE, null); + } + + public static void saveFile(SWF swf, String outfile, SaveFileMode mode, ExeExportMode exeExportMode) throws IOException { + if (mode == SaveFileMode.SAVEAS && !swf.swfList.isBundle()) { + swf.setFile(outfile); + swf.swfList.sourceInfo.setFile(outfile); + } + File outfileF = new File(outfile); + File tmpFile = new File(outfile + ".tmp"); + try (FileOutputStream fos = new FileOutputStream(tmpFile); + BufferedOutputStream bos = new BufferedOutputStream(fos)) { + if (mode == SaveFileMode.EXE) { + switch (exeExportMode) { + case WRAPPER: + InputStream exeStream = View.class.getClassLoader().getResourceAsStream("com/jpexs/helpers/resource/Swf2Exe.bin"); + Helper.copyStream(exeStream, bos); + int width = swf.displayRect.Xmax - swf.displayRect.Xmin; + int height = swf.displayRect.Ymax - swf.displayRect.Ymin; + bos.write(width & 0xff); + bos.write((width >> 8) & 0xff); + bos.write((width >> 16) & 0xff); + bos.write((width >> 24) & 0xff); + bos.write(height & 0xff); + bos.write((height >> 8) & 0xff); + bos.write((height >> 16) & 0xff); + bos.write((height >> 24) & 0xff); + bos.write(Configuration.saveAsExeScaleMode.get()); + break; + case PROJECTOR_WIN: + case PROJECTOR_MAC: + case PROJECTOR_LINUX: + File projectorFile = Configuration.getProjectorFile(exeExportMode); + if (projectorFile == null) { + String message = "Projector not found, please place it to " + Configuration.getProjectorPath(); + logger.log(Level.SEVERE, message); + throw new IOException(message); + } + Helper.copyStream(new FileInputStream(projectorFile), bos); + bos.flush(); + break; + } + } + + long pos = fos.getChannel().position(); + swf.saveTo(bos); + + if (mode == SaveFileMode.EXE) { + switch (exeExportMode) { + case PROJECTOR_WIN: + case PROJECTOR_MAC: + case PROJECTOR_LINUX: + bos.flush(); + int swfSize = (int) (fos.getChannel().position() - pos); + + // write magic number + bos.write(0x56); + bos.write(0x34); + bos.write(0x12); + bos.write(0xfa); + + bos.write(swfSize & 0xff); + bos.write((swfSize >> 8) & 0xff); + bos.write((swfSize >> 16) & 0xff); + bos.write((swfSize >> 24) & 0xff); + } + } + } + if (tmpFile.exists()) { + if (tmpFile.length() > 0) { + outfileF.delete(); + if (!tmpFile.renameTo(outfileF)) { + tmpFile.delete(); + throw new IOException("Cannot access " + outfile); + } + } else { + throw new IOException("Output is empty"); + } + } else { + throw new IOException("Output not found"); + } + } + + private static class OpenFileWorker extends SwingWorker { + + private final SWFSourceInfo[] sourceInfos; + + private final Runnable executeAfterOpen; + + private final int[] reloadIndices; + + public OpenFileWorker(SWFSourceInfo sourceInfo) { + this(sourceInfo, -1); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, int reloadIndex) { + this(sourceInfo, null, reloadIndex); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { + this(sourceInfo, executeAfterOpen, -1); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { + this.sourceInfos = new SWFSourceInfo[]{sourceInfo}; + this.executeAfterOpen = executeAfterOpen; + this.reloadIndices = new int[]{reloadIndex}; + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos) { + this(sourceInfos, null, null); + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen) { + this(sourceInfos, executeAfterOpen, null); + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { + this.sourceInfos = sourceInfos; + this.executeAfterOpen = executeAfterOpen; + int[] indices = new int[sourceInfos.length]; + for (int i = 0; i < indices.length; i++) { + indices[i] = -1; + } + this.reloadIndices = reloadIndices == null ? indices : reloadIndices; + } + + @Override + protected Object doInBackground() throws Exception { + boolean first = true; + SWF firstSWF = null; + for (int index = 0; index < sourceInfos.length; index++) { + SWFSourceInfo sourceInfo = sourceInfos[index]; + SWFList swfs = null; + try { + Main.startWork(AppStrings.translate("work.reading.swf") + "...", null); + try { + swfs = parseSWF(sourceInfo); + } catch (ExecutionException ex) { + Throwable cause = ex.getCause(); + if (cause instanceof SwfOpenException) { + throw (SwfOpenException) cause; + } + + throw ex; + } + } catch (OutOfMemoryError ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, "Cannot load SWF file. Out of memory."); + continue; + } catch (SwfOpenException ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, ex.getMessage()); + continue; + } catch (Exception ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, "Cannot load SWF file."); + continue; + } + + final SWFList swfs1 = swfs; + final boolean first1 = first; + first = false; + if (firstSWF == null && swfs1.size() > 0) { + firstSWF = swfs1.get(0); + } + + final int findex = index; + try { + View.execInEventDispatch(() -> { + Main.startWork(AppStrings.translate("work.creatingwindow") + "...", null); + ensureMainFrame(); + if (reloadIndices[findex] > -1) { + mainFrame.getPanel().loadSwfAtPos(swfs1, reloadIndices[findex]); + } else { + mainFrame.getPanel().load(swfs1, first1); + } + }); + } catch (Exception ex) { + logger.log(Level.SEVERE, null, ex); + } + } + + loadingDialog.setVisible(false); + shouldCloseWhenClosingLoadingDialog = false; + + final SWF fswf = firstSWF; + View.execInEventDispatch(() -> { + if (mainFrame != null) { + mainFrame.setVisible(true); + } + + Main.stopWork(); + + if (mainFrame != null && Configuration.gotoMainClassOnStartup.get()) { + mainFrame.getPanel().gotoDocumentClass(fswf); + } + + if (mainFrame != null && fswf != null) { + SwfSpecificConfiguration swfConf = Configuration.getSwfSpecificConfiguration(fswf.getShortFileName()); + if (swfConf != null) { + String pathStr = swfConf.lastSelectedPath; + mainFrame.getPanel().tagTree.setSelectionPathString(pathStr); + } + } + + if (executeAfterOpen != null) { + executeAfterOpen.run(); + } + }); + + return true; + } + } + + public static boolean reloadSWFs() { + CancellableWorker.cancelBackgroundThreads(); + if (Main.sourceInfos.isEmpty()) { + Helper.freeMem(); + showModeFrame(); + return true; + } else { + SWFSourceInfo[] sourceInfosCopy = new SWFSourceInfo[sourceInfos.size()]; + sourceInfos.toArray(sourceInfosCopy); + sourceInfos.clear(); + openFile(sourceInfosCopy); + return true; + } + } + + public static void reloadApp() { + if (debugDialog != null) { + debugDialog.setVisible(false); + debugDialog.dispose(); + debugDialog = null; + } + if (loadingDialog != null) { + synchronized (Main.class) { + if (loadingDialog != null) { + loadingDialog.setVisible(false); + loadingDialog.dispose(); + loadingDialog = null; + } + } + } + if (proxyFrame != null) { + proxyFrame.setVisible(false); + proxyFrame.dispose(); + proxyFrame = null; + } + if (loadFromMemoryFrame != null) { + loadFromMemoryFrame.setVisible(false); + loadFromMemoryFrame.dispose(); + loadFromMemoryFrame = null; + } + if (loadFromCacheFrame != null) { + loadFromCacheFrame.setVisible(false); + loadFromCacheFrame.dispose(); + loadFromCacheFrame = null; + } + if (mainFrame != null) { + mainFrame.setVisible(false); + mainFrame.getPanel().closeAll(false); + mainFrame.dispose(); + mainFrame = null; + } + FontTag.reload(); + Cache.clearAll(); + initGui(); + reloadSWFs(); + } + + public static OpenFileResult openFile(String swfFile, String fileTitle) { + View.checkAccess(); + + return openFile(swfFile, fileTitle, null); + } + + public static OpenFileResult openFile(String swfFile, String fileTitle, Runnable executeAfterOpen) { + View.checkAccess(); + + try { + File file = new File(swfFile); + if (!file.exists()) { + View.showMessageDialog(null, AppStrings.translate("open.error.fileNotFound"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); + return OpenFileResult.NOT_FOUND; + } + swfFile = file.getCanonicalPath(); + SWFSourceInfo sourceInfo = new SWFSourceInfo(null, swfFile, fileTitle); + OpenFileResult openResult = openFile(sourceInfo); + return openResult; + } catch (IOException ex) { + View.showMessageDialog(null, AppStrings.translate("open.error.cannotOpen"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); + return OpenFileResult.ERROR; + } + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}); + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen); + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen, new int[]{reloadIndex}); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos) { + View.checkAccess(); + + return openFile(newSourceInfos, null); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen) { + View.checkAccess(); + + return openFile(newSourceInfos, executeAfterOpen, null); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { + View.checkAccess(); + + if (mainFrame != null && !Configuration.openMultipleFiles.get()) { + sourceInfos.clear(); + mainFrame.getPanel().closeAll(false); + mainFrame.setVisible(false); + Helper.freeMem(); + reloadIndices = null; + } + + loadingDialog.setVisible(true); + + for (int i = 0; i < newSourceInfos.length; i++) { + SWFSourceInfo si = newSourceInfos[i]; + String fileName = si.getFile(); + if (fileName != null) { + Configuration.addRecentFile(fileName); + } + } + + OpenFileWorker wrk = new OpenFileWorker(newSourceInfos, executeAfterOpen, reloadIndices); + wrk.execute(); + if (reloadIndices == null) { + sourceInfos.addAll(Arrays.asList(newSourceInfos)); + } else { + for (int i = 0; i < reloadIndices.length; i++) { + sourceInfos.set(reloadIndices[i], newSourceInfos[i]); + } + } + return OpenFileResult.OK; + } + + public static void closeFile(SWFList swf) { + View.checkAccess(); + + sourceInfos.remove(swf.sourceInfo); + mainFrame.getPanel().close(swf); + } + + public static void reloadFile(SWFList swf) { + View.checkAccess(); + + openFile(swf.sourceInfo, null, sourceInfos.indexOf(swf.sourceInfo)); + } + + public static boolean closeAll() { + View.checkAccess(); + + boolean closeResult = mainFrame.getPanel().closeAll(true); + if (closeResult) { + sourceInfos.clear(); + } + + return closeResult; + } + + public static boolean saveFileDialog(SWF swf, final SaveFileMode mode) { + JFileChooser fc = new JFileChooser(); + fc.setCurrentDirectory(new File(Configuration.lastSaveDir.get())); + String ext = ".swf"; + switch (mode) { + case SAVE: + case SAVEAS: + if (swf.getFile() != null) { + ext = Path.getExtension(swf.getFile()); + } + break; + case EXE: + ext = ".exe"; + break; + } + + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + + ExeExportMode exeExportMode = null; + if (mode == SaveFileMode.EXE) { + exeExportMode = Configuration.exeExportMode.get(); + if (exeExportMode == null) { + exeExportMode = ExeExportMode.WRAPPER; + } + String filterDescription = null; + switch (exeExportMode) { + case WRAPPER: + case PROJECTOR_WIN: + ext = ".exe"; + filterDescription = "filter.exe"; + break; + case PROJECTOR_MAC: + ext = ".dmg"; + filterDescription = "filter.dmg"; + break; + case PROJECTOR_LINUX: + // linux projector is compressed with tar.gz + // todo: decompress + ext = ""; + filterDescription = "filter.linuxExe"; + break; + } + + String fext = ext; + String ffilterDescription = filterDescription; + FileFilter exeFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(fext)) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate(ffilterDescription); + } + }; + fc.setFileFilter(exeFilter); + } else if (swf.gfx) { + fc.addChoosableFileFilter(swfFilter); + fc.setFileFilter(gfxFilter); + } else { + fc.setFileFilter(swfFilter); + fc.addChoosableFileFilter(gfxFilter); + } + final String extension = ext; + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) { + File file = Helper.fixDialogFile(fc.getSelectedFile()); + FileFilter selFilter = fc.getFileFilter(); + try { + String fileName = file.getAbsolutePath(); + if (selFilter == swfFilter) { + if (!fileName.toLowerCase().endsWith(extension)) { + fileName += extension; + } + swf.gfx = false; + } + if (selFilter == gfxFilter) { + if (!fileName.toLowerCase().endsWith(".gfx")) { + fileName += ".gfx"; + } + swf.gfx = true; + } + Main.saveFile(swf, fileName, mode, exeExportMode); + Configuration.lastSaveDir.set(file.getParentFile().getAbsolutePath()); + return true; + } catch (IOException ex) { + View.showMessageDialog(null, AppStrings.translate("error.file.write")); + } + } + return false; + } + + public static boolean openFileDialog() { + View.checkAccess(); + + JFileChooser fc = new JFileChooser(); + if (Configuration.openMultipleFiles.get()) { + fc.setMultiSelectionEnabled(true); + } + fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); + FileFilter allSupportedFilter = new FileFilter() { + private final String[] supportedExtensions = new String[]{".swf", ".gfx", ".swc", ".zip", ".iggy"}; + + @Override + public boolean accept(File f) { + String name = f.getName().toLowerCase(); + for (String ext : supportedExtensions) { + if (name.endsWith(ext)) { + return true; + } + } + return f.isDirectory(); + } + + @Override + public String getDescription() { + String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); + return AppStrings.translate("filter.supported") + " (" + exts + ")"; + } + }; + fc.setFileFilter(allSupportedFilter); + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + fc.addChoosableFileFilter(swfFilter); + + FileFilter swcFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swc")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swc"); + } + }; + fc.addChoosableFileFilter(swcFilter); + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + fc.addChoosableFileFilter(gfxFilter); + + FileFilter iggyFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".iggy")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.iggy"); + } + }; + fc.addChoosableFileFilter(iggyFilter); + + FileFilter zipFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".zip")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.zip"); + } + }; + fc.addChoosableFileFilter(zipFilter); + + FileFilter binaryFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return true; + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.binary"); + } + }; + fc.addChoosableFileFilter(binaryFilter); + + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + int returnVal = fc.showOpenDialog(f); + if (returnVal == JFileChooser.APPROVE_OPTION) { + Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); + File[] selFiles = fc.getSelectedFiles(); + for (File file : selFiles) { + File selfile = Helper.fixDialogFile(file); + Main.openFile(selfile.getAbsolutePath(), null); + } + return true; + } else { + return false; + } + } + + public static void displayErrorFrame() { + ErrorLogFrame.getInstance().setVisible(true); + } + + private static String md5(byte data[]) { + try { + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); + byte[] array = md.digest(data); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString(); + } catch (java.security.NoSuchAlgorithmException e) { + } + return null; + } + + private static void initGui() { + if (GraphicsEnvironment.isHeadless()) { + System.err.println("Error: Your system does not support Graphic User Interface"); + exit(); + } + + System.setProperty("sun.java2d.d3d", "false"); + System.setProperty("sun.java2d.noddraw", "true"); + + if (Configuration.hwAcceleratedGraphics.get()) { + System.setProperty("sun.java2d.opengl", Configuration._debugMode.get() ? "True" : "true"); + } else { + System.setProperty("sun.java2d.opengl", "false"); + } + + initUiLang(); + + if (Configuration.useRibbonInterface.get()) { + View.setLookAndFeel(); + } else { + try { + UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, null); + UIManager.put("Tree.expandedIcon", null); + UIManager.put("Tree.collapsedIcon", null); + UIManager.put("ColorChooserUI", null); + UIManager.put("ColorChooser.swatchesRecentSwatchSize", null); + UIManager.put("ColorChooser.swatchesSwatchSize", null); + UIManager.put("RibbonApplicationMenuPopupPanelUI", null); + UIManager.put("RibbonApplicationMenuButtonUI", null); + UIManager.put("ProgressBarUI", null); + UIManager.put("TextField.background", null); + UIManager.put("FormattedTextField.background", null); + UIManager.put("CommandButtonUI", null); + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { + logger.log(Level.SEVERE, null, ex); + } + } + + View.execInEventDispatch(() -> { + ErrorLogFrame.createNewInstance(); + + autoCheckForUpdates(); + offerAssociation(); + loadingDialog = new LoadingDialog(); + + DebuggerTools.initDebugger().addMessageListener(new DebugListener() { + @Override + public void onMessage(String clientId, String msg) { + } + + @Override + public void onLoaderURL(String clientId, String url) { + } + + @Override + public void onLoaderBytes(String clientId, byte[] data) { + String hash = md5(data); + for (SWFList sl : Main.getMainFrame().getPanel().getSwfs()) { + for (int s = 0; s < sl.size(); s++) { + String t = sl.get(s).getFileTitle(); + if (t == null) { + t = ""; + } + if (t.endsWith(":" + hash)) { //this one is already opened + return; + } + } + } + SWF swf = Main.getMainFrame().getPanel().getCurrentSwf(); + + String title = swf == null ? "?" : swf.getFileTitle(); + final String titleWithHash = title + ":" + hash; + try { + final String tfile = tempFile(titleWithHash); + Helper.writeFile(tfile, data); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + openFile(new SWFSourceInfo(null, tfile, titleWithHash)); + } + }); + } catch (IOException ex) { + logger.log(Level.SEVERE, "Cannot create tempfile"); + } + } + + @Override + public void onFinish(String clientId) { + } + }); + + try { + flashDebugger = new Debugger(); + debugHandler = new DebuggerHandler(); + debugHandler.addBreakListener(new DebuggerHandler.BreakListener() { + @Override + public void doContinue() { + mainFrame.getPanel().clearDebuggerColors(); + } + + @Override + public void breakAt(String scriptName, int line, final int classIndex, final int traitIndex, final int methodIndex) { + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + mainFrame.getPanel().gotoScriptLine(getMainFrame().getPanel().getCurrentSwf(), scriptName, line, classIndex, traitIndex, methodIndex); + } + }); + } + }); + debugHandler.addConnectionListener(new DebuggerHandler.ConnectionListener() { + @Override + public void connected() { + Main.mainFrame.getMenu().updateComponents(); + } + + @Override + public void disconnected() { + if (Main.mainFrame != null && Main.mainFrame.getPanel() != null) { + Main.mainFrame.getPanel().refreshBreakPoints(); + } + } + }); + flashDebugger.addConnectionListener(debugHandler); + } catch (IOException ex) { + logger.log(Level.SEVERE, "eeex", ex); + } + }); + } + + public static void startDebugger() { + flashDebugger.startDebugger(); + } + + public static void stopDebugger() { + flashDebugger.stopDebugger(); + } + + public static void showModeFrame() { + ensureMainFrame(); + mainFrame.setVisible(true); + } + + private static void offerAssociation() { + boolean offered = Configuration.offeredAssociation.get(); + if (!offered) { + if (Platform.isWindows()) { + if ((!ContextMenuTools.isAddedToContextMenu()) && View.showConfirmDialog(null, "Do you want to add FFDec to context menu of SWF files?\n(Can be changed later from main menu)", "Context menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { + ContextMenuTools.addToContextMenu(true, false); + } + } + + Configuration.offeredAssociation.set(true); + } + } + + public static void initUiLang() { + if (GraphicsEnvironment.isHeadless()) { //No GUI in OS + return; + } + try { + Class cl = Class.forName("org.pushingpixels.substance.api.SubstanceLookAndFeel"); + Field field = cl.getDeclaredField("LABEL_BUNDLE"); + field.setAccessible(true); + field.set(null, null); + } catch (Throwable ex) { + logger.log(Level.SEVERE, null, ex); + } + + UIManager.put("OptionPane.okButtonText", AppStrings.translate("button.ok")); + UIManager.put("OptionPane.yesButtonText", AppStrings.translate("button.yes")); + UIManager.put("OptionPane.noButtonText", AppStrings.translate("button.no")); + UIManager.put("OptionPane.cancelButtonText", AppStrings.translate("button.cancel")); + UIManager.put("OptionPane.messageDialogTitle", AppStrings.translate("dialog.message.title")); + UIManager.put("OptionPane.titleText", AppStrings.translate("dialog.select.title")); + + UIManager.put("FileChooser.acceptAllFileFilterText", AppStrings.translate("FileChooser.acceptAllFileFilterText")); + UIManager.put("FileChooser.lookInLabelText", AppStrings.translate("FileChooser.lookInLabelText")); + UIManager.put("FileChooser.cancelButtonText", AppStrings.translate("button.cancel")); + UIManager.put("FileChooser.cancelButtonToolTipText", AppStrings.translate("button.cancel")); + UIManager.put("FileChooser.openButtonText", AppStrings.translate("FileChooser.openButtonText")); + UIManager.put("FileChooser.openButtonToolTipText", AppStrings.translate("FileChooser.openButtonToolTipText")); + UIManager.put("FileChooser.filesOfTypeLabelText", AppStrings.translate("FileChooser.filesOfTypeLabelText")); + UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); + UIManager.put("FileChooser.listViewButtonToolTipText", AppStrings.translate("FileChooser.listViewButtonToolTipText")); + UIManager.put("FileChooser.listViewButtonAccessibleName", AppStrings.translate("FileChooser.listViewButtonAccessibleName")); + UIManager.put("FileChooser.detailsViewButtonToolTipText", AppStrings.translate("FileChooser.detailsViewButtonToolTipText")); + UIManager.put("FileChooser.detailsViewButtonAccessibleName", AppStrings.translate("FileChooser.detailsViewButtonAccessibleName")); + UIManager.put("FileChooser.upFolderToolTipText", AppStrings.translate("FileChooser.upFolderToolTipText")); + UIManager.put("FileChooser.upFolderAccessibleName", AppStrings.translate("FileChooser.upFolderAccessibleName")); + UIManager.put("FileChooser.homeFolderToolTipText", AppStrings.translate("FileChooser.homeFolderToolTipText")); + UIManager.put("FileChooser.homeFolderAccessibleName", AppStrings.translate("FileChooser.homeFolderAccessibleName")); + UIManager.put("FileChooser.fileNameHeaderText", AppStrings.translate("FileChooser.fileNameHeaderText")); + UIManager.put("FileChooser.fileSizeHeaderText", AppStrings.translate("FileChooser.fileSizeHeaderText")); + UIManager.put("FileChooser.fileTypeHeaderText", AppStrings.translate("FileChooser.fileTypeHeaderText")); + UIManager.put("FileChooser.fileDateHeaderText", AppStrings.translate("FileChooser.fileDateHeaderText")); + UIManager.put("FileChooser.fileAttrHeaderText", AppStrings.translate("FileChooser.fileAttrHeaderText")); + UIManager.put("FileChooser.openDialogTitleText", AppStrings.translate("FileChooser.openDialogTitleText")); + UIManager.put("FileChooser.directoryDescriptionText", AppStrings.translate("FileChooser.directoryDescriptionText")); + UIManager.put("FileChooser.directoryOpenButtonText", AppStrings.translate("FileChooser.directoryOpenButtonText")); + UIManager.put("FileChooser.directoryOpenButtonToolTipText", AppStrings.translate("FileChooser.directoryOpenButtonToolTipText")); + UIManager.put("FileChooser.fileDescriptionText", AppStrings.translate("FileChooser.fileDescriptionText")); + UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); + UIManager.put("FileChooser.helpButtonText", AppStrings.translate("FileChooser.helpButtonText")); + UIManager.put("FileChooser.helpButtonToolTipText", AppStrings.translate("FileChooser.helpButtonToolTipText")); + UIManager.put("FileChooser.newFolderAccessibleName", AppStrings.translate("FileChooser.newFolderAccessibleName")); + UIManager.put("FileChooser.newFolderErrorText", AppStrings.translate("FileChooser.newFolderErrorText")); + UIManager.put("FileChooser.newFolderToolTipText", AppStrings.translate("FileChooser.newFolderToolTipText")); + UIManager.put("FileChooser.other.newFolder", AppStrings.translate("FileChooser.other.newFolder")); + UIManager.put("FileChooser.other.newFolder.subsequent", AppStrings.translate("FileChooser.other.newFolder.subsequent")); + UIManager.put("FileChooser.win32.newFolder", AppStrings.translate("FileChooser.win32.newFolder")); + UIManager.put("FileChooser.win32.newFolder.subsequent", AppStrings.translate("FileChooser.win32.newFolder.subsequent")); + UIManager.put("FileChooser.saveButtonText", AppStrings.translate("FileChooser.saveButtonText")); + UIManager.put("FileChooser.saveButtonToolTipText", AppStrings.translate("FileChooser.saveButtonToolTipText")); + UIManager.put("FileChooser.saveDialogTitleText", AppStrings.translate("FileChooser.saveDialogTitleText")); + UIManager.put("FileChooser.saveInLabelText", AppStrings.translate("FileChooser.saveInLabelText")); + UIManager.put("FileChooser.updateButtonText", AppStrings.translate("FileChooser.updateButtonText")); + UIManager.put("FileChooser.updateButtonToolTipText", AppStrings.translate("FileChooser.updateButtonToolTipText")); + + UIManager.put("FileChooser.detailsViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.detailsViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewButtonToolTip.textAndMnemonic")); + UIManager.put("FileChooser.fileAttrHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileAttrHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileDateHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileDateHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileNameHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileNameHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.fileNameLabel.textAndMnemonic")); + UIManager.put("FileChooser.fileSizeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileSizeHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileTypeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileTypeHeader.textAndMnemonic")); + UIManager.put("FileChooser.filesOfTypeLabel.textAndMnemonic", AppStrings.translate("FileChooser.filesOfTypeLabel.textAndMnemonic")); + UIManager.put("FileChooser.folderNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.folderNameLabel.textAndMnemonic")); + UIManager.put("FileChooser.homeFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.homeFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.listViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.listViewActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.listViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.listViewButtonToolTip.textAndMnemonic")); + UIManager.put("FileChooser.lookInLabel.textAndMnemonic", AppStrings.translate("FileChooser.lookInLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.newFolderActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.newFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.refreshActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.refreshActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.saveInLabel.textAndMnemonic", AppStrings.translate("FileChooser.saveInLabel.textAndMnemonic")); + UIManager.put("FileChooser.upFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.upFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.viewMenuButtonAccessibleName", AppStrings.translate("FileChooser.viewMenuButtonAccessibleName")); + UIManager.put("FileChooser.viewMenuButtonToolTipText", AppStrings.translate("FileChooser.viewMenuButtonToolTipText")); + UIManager.put("FileChooser.viewMenuLabel.textAndMnemonic", AppStrings.translate("FileChooser.viewMenuLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderActionLabelText", AppStrings.translate("FileChooser.newFolderActionLabelText")); + UIManager.put("FileChooser.listViewActionLabelText", AppStrings.translate("FileChooser.listViewActionLabelText")); + UIManager.put("FileChooser.detailsViewActionLabelText", AppStrings.translate("FileChooser.detailsViewActionLabelText")); + UIManager.put("FileChooser.refreshActionLabelText", AppStrings.translate("FileChooser.refreshActionLabelText")); + UIManager.put("FileChooser.sortMenuLabelText", AppStrings.translate("FileChooser.sortMenuLabelText")); + UIManager.put("FileChooser.viewMenuLabelText", AppStrings.translate("FileChooser.viewMenuLabelText")); + UIManager.put("FileChooser.fileSizeKiloBytes", AppStrings.translate("FileChooser.fileSizeKiloBytes")); + UIManager.put("FileChooser.fileSizeMegaBytes", AppStrings.translate("FileChooser.fileSizeMegaBytes")); + UIManager.put("FileChooser.fileSizeGigaBytes", AppStrings.translate("FileChooser.fileSizeGigaBytes")); + UIManager.put("FileChooser.folderNameLabelText", AppStrings.translate("FileChooser.folderNameLabelText")); + + UIManager.put("ColorChooser.okText", AppStrings.translate("ColorChooser.okText")); + UIManager.put("ColorChooser.cancelText", AppStrings.translate("ColorChooser.cancelText")); + UIManager.put("ColorChooser.resetText", AppStrings.translate("ColorChooser.resetText")); + UIManager.put("ColorChooser.previewText", AppStrings.translate("ColorChooser.previewText")); + UIManager.put("ColorChooser.swatchesNameText", AppStrings.translate("ColorChooser.swatchesNameText")); + UIManager.put("ColorChooser.swatchesRecentText", AppStrings.translate("ColorChooser.swatchesRecentText")); + UIManager.put("ColorChooser.sampleText", AppStrings.translate("ColorChooser.sampleText")); + + } + + public static void initLang() { + if (!Configuration.locale.hasValue()) { + if (Platform.isWindows()) { + //Load from Installer + String uninstKey = "{E618D276-6596-41F4-8A98-447D442A77DB}_is1"; + uninstKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstKey; + try { + if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey)) { + if (Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language")) { + String installedLoc = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language"); + int lcid = Integer.parseInt(installedLoc); + char[] buf = new char[9]; + int cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO639LANGNAME, buf, 9); + String langCode = new String(buf, 0, cnt).trim().toLowerCase(); + + cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO3166CTRYNAME, buf, 9); + String countryCode = new String(buf, 0, cnt).trim().toLowerCase(); + + List langs = Arrays.asList(SelectLanguageDialog.getAvailableLanguages()); + for (int i = 0; i < langs.size(); i++) { + langs.set(i, langs.get(i).toLowerCase()); + } + + String selectedLang = null; + + if (langs.contains(langCode + "-" + countryCode)) { + selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode + "-" + countryCode)]; + } else if (langs.contains(langCode)) { + selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode)]; + } + if (selectedLang != null) { + Configuration.locale.set(selectedLang); + } + } + } + } catch (Exception ex) { + //ignore + } + } + } + Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); + AppStrings.updateLanguage(); + + Helper.decompilationErrorAdd = AppStrings.translate(Configuration.autoDeobfuscate.get() ? "deobfuscation.comment.failed" : "deobfuscation.comment.tryenable"); + } + + /** + * Clear old FFDec/JavactiveX temp files + */ + private static void clearTemp() { + String tempDirPath = System.getProperty("java.io.tmpdir"); + if (tempDirPath == null) { + return; + } + File tempDir = new File(tempDirPath); + if (!tempDir.exists()) { + return; + } + File[] delFiles = tempDir.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.matches("ffdec_cache.*\\.tmp") || name.matches("javactivex_.*\\.exe") || name.matches("temp[0-9]+\\.swf") || name.matches("ffdec_view_.*\\.swf"); + } + }); + + if (delFiles != null) { + for (File f : delFiles) { + try { + f.delete(); + } catch (Exception ex) { + //ignore + } + } + } + } + + /** + * @param args the command line arguments + * @throws IOException On error + */ + public static void main(String[] args) throws IOException { + setSessionLoaded(false); + + clearTemp(); + + try { + SWFDecompilerPlugin.loadPlugins(); + } catch (Throwable ex) { + logger.log(Level.SEVERE, "Failed to load plugins", ex); + } + + AppStrings.setResourceClass(MainFrame.class); + initLogging(Configuration._debugMode.get()); + + initLang(); + + if (Configuration.cacheOnDisk.get()) { + Cache.setStorageType(Cache.STORAGE_FILES); + } else { + Cache.setStorageType(Cache.STORAGE_MEMORY); + } + + if (args.length == 0) { + initGui(); + checkLibraryVersion(); + View.execInEventDispatch(() -> { + if (Configuration.allowOnlyOneInstance.get() && FirstInstance.focus()) { //Try to focus first instance + Main.exit(); + } else { + showModeFrame(); + reloadLastSession(); + } + }); + } else { + checkLibraryVersion(); + setSessionLoaded(true); + String[] filesToOpen = CommandLineArgumentParser.parseArguments(args); + if (filesToOpen != null && filesToOpen.length > 0) { + View.execInEventDispatch(() -> { + initGui(); + shouldCloseWhenClosingLoadingDialog = true; + if (Configuration.allowOnlyOneInstance.get() && FirstInstance.openFiles(Arrays.asList(filesToOpen))) { //Try to open in first instance + Main.exit(); + } else { + for (String fileToOpen : filesToOpen) { + openFile(fileToOpen, null); + } + } + }); + } + } + } + + private static void checkLibraryVersion() { + if (!ApplicationInfo.version.equals("unknown") && !ApplicationInfo.libraryVersion.equals("unknown") + && !Objects.equals(ApplicationInfo.version, ApplicationInfo.libraryVersion)) { + logger.log(Level.WARNING, "Application version is different from library version. FFDec may not work properly."); + } + } + + private static void reloadLastSession() { + boolean openingFiles = false; + if (Configuration.saveSessionOnExit.get()) { + String lastSession = Configuration.lastSessionFiles.get(); + if (lastSession != null && lastSession.length() > 0) { + String[] filesToOpen = lastSession.split(File.pathSeparator, -1); + List exfiles = new ArrayList<>(); + List extitles = new ArrayList<>(); + String lastSessionTitles = Configuration.lastSessionFileTitles.get(); + String[] fileTitles = new String[0]; + if (lastSessionTitles != null && !lastSessionTitles.isEmpty()) { + fileTitles = lastSessionTitles.split(File.pathSeparator, -1); + } + for (int i = 0; i < filesToOpen.length; i++) { + if (new File(filesToOpen[i]).exists()) { + exfiles.add(filesToOpen[i]); + if (fileTitles.length > i) { + extitles.add(fileTitles[i]); + } else { + extitles.add(null); + } + } + } + SWFSourceInfo[] sourceInfos = new SWFSourceInfo[exfiles.size()]; + for (int i = 0; i < exfiles.size(); i++) { + String extitle = extitles.get(i); + sourceInfos[i] = new SWFSourceInfo(null, exfiles.get(i), extitle == null || extitle.isEmpty() ? null : extitle); + } + if (sourceInfos.length > 0) { + openingFiles = true; + openFile(sourceInfos, () -> { + mainFrame.getPanel().tagTree.setSelectionPathString(Configuration.lastSessionSelection.get()); + setSessionLoaded(true); + }); + } + } + } + + if (!openingFiles) { + setSessionLoaded(true); + } + } + + public static String tempFile(String url) throws IOException { + File f = new File(Configuration.getFFDecHome() + "saved" + File.separator); + Path.createDirectorySafe(f); + return Configuration.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp"; + } + + public static void removeTrayIcon() { + if (SystemTray.isSupported()) { + SystemTray tray = SystemTray.getSystemTray(); + if (trayIcon != null) { + tray.remove(trayIcon); + trayIcon = null; + } + } + } + + public static void switchProxy() { + proxyFrame.switchState(); + if (stopMenuItem != null) { + if (proxyFrame.isRunning()) { + stopMenuItem.setLabel(AppStrings.translate("proxy.stop")); + } else { + stopMenuItem.setLabel(AppStrings.translate("proxy.start")); + } + } + } + + public static void addTrayIcon() { + if (trayIcon != null) { + return; + } + if (SystemTray.isSupported()) { + SystemTray tray = SystemTray.getSystemTray(); + trayIcon = new TrayIcon(View.loadImage("proxy16"), ApplicationInfo.VENDOR + " " + ApplicationInfo.SHORT_APPLICATION_NAME + " " + AppStrings.translate("proxy")); + trayIcon.setImageAutoSize(true); + PopupMenu trayPopup = new PopupMenu(); + + ActionListener trayListener = new ActionListener() { + /** + * Invoked when an action occurs. + */ + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("EXIT")) { + Main.exit(); + } + if (e.getActionCommand().equals("SHOW")) { + Main.showProxy(); + } + if (e.getActionCommand().equals("SWITCH")) { + Main.switchProxy(); + } + } + }; + + MenuItem showMenuItem = new MenuItem(AppStrings.translate("proxy.show")); + showMenuItem.setActionCommand("SHOW"); + showMenuItem.addActionListener(trayListener); + trayPopup.add(showMenuItem); + stopMenuItem = new MenuItem(AppStrings.translate("proxy.start")); + stopMenuItem.setActionCommand("SWITCH"); + stopMenuItem.addActionListener(trayListener); + trayPopup.add(stopMenuItem); + trayPopup.addSeparator(); + MenuItem exitMenuItem = new MenuItem(AppStrings.translate("exit")); + exitMenuItem.setActionCommand("EXIT"); + exitMenuItem.addActionListener(trayListener); + trayPopup.add(exitMenuItem); + + trayIcon.setPopupMenu(trayPopup); + trayIcon.addMouseListener(new MouseAdapter() { + /** + * {@inheritDoc} + */ + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON1) { + Main.showProxy(); + } + } + }); + try { + tray.add(trayIcon); + } catch (AWTException ex) { + } + } + } + + public static void exit() { + Configuration.saveConfig(); + if (mainFrame != null && mainFrame.getPanel() != null) { + mainFrame.getPanel().unloadFlashPlayer(); + mainFrame.dispose(); + } + if (fileTxt != null) { + try { + fileTxt.flush(); + fileTxt.close(); + } catch (Exception ex) { + //ignore + } + } + System.exit(0); + } + + public static void about() { + (new AboutDialog()).setVisible(true); + } + + public static void advancedSettings() { + advancedSettings(null); + } + + public static void advancedSettings(String category) { + (new AdvancedSettingsDialog(category)).setVisible(true); + } + + public static void autoCheckForUpdates() { + if (Configuration.checkForUpdatesAuto.get()) { + Calendar lastUpdatesCheckDate = Configuration.lastUpdatesCheckDate.get(); + if ((lastUpdatesCheckDate == null) || (lastUpdatesCheckDate.getTime().getTime() < Calendar.getInstance().getTime().getTime() - Configuration.checkForUpdatesDelay.get())) { + new SwingWorker() { + @Override + protected Object doInBackground() throws Exception { + checkForUpdates(); + return null; + } + }.execute(); + } + } + } + + public static boolean checkForUpdates() { + String currentVersion = ApplicationInfo.version; + if (currentVersion.equals("unknown")) { + // sometimes during development the version information is not available + return false; + } + + List accepted = new ArrayList<>(); + if (Configuration.checkForUpdatesStable.get()) { + accepted.add("stable"); + } + if (Configuration.checkForUpdatesNightly.get()) { + accepted.add("nightly"); + } + + if (accepted.isEmpty()) { + return false; + } + + String acceptVersions = String.join(",", accepted); + try { + String proxyAddress = Configuration.updateProxyAddress.get(); + URL url = new URL(ApplicationInfo.updateCheckUrl); + + URLConnection uc; + if (proxyAddress != null && !proxyAddress.isEmpty()) { + int port = 8080; + if (proxyAddress.contains(":")) { + String[] parts = proxyAddress.split(":"); + port = Integer.parseInt(parts[1]); + proxyAddress = parts[0]; + } + + uc = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress, port))); + } else { + uc = url.openConnection(); + } + uc.setRequestProperty("X-Accept-Versions", acceptVersions); + uc.setRequestProperty("X-Update-Major", "" + UPDATE_SYSTEM_MAJOR); + uc.setRequestProperty("X-Update-Minor", "" + UPDATE_SYSTEM_MINOR); + uc.setRequestProperty("User-Agent", ApplicationInfo.shortApplicationVerName); + String currentLoc = Configuration.locale.get("en"); + uc.setRequestProperty("Accept-Language", currentLoc + ("en".equals(currentLoc) ? "" : ", en;q=0.8")); + + uc.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); + String s; + final java.util.List versions = new ArrayList<>(); + String header = ""; + Pattern headerPat = Pattern.compile("\\[([a-zA-Z0-9]+)\\]"); + int updateMajor; + int updateMinor; + Version ver = null; + while ((s = br.readLine()) != null) { + + Matcher m = headerPat.matcher(s); + if (m.matches()) { + header = m.group(1); + if (header.equals("version")) { + ver = new Version(); + versions.add(ver); + } + if (header.equals("noversion")) { + break; + } + } else if (s.contains("=")) { + String key = s.substring(0, s.indexOf('=')); + String val = s.substring(s.indexOf('=') + 1); + if ("updateSystem".equals(header)) { + if (key.equals("majorVersion")) { + updateMajor = Integer.parseInt(val); + if (updateMajor > UPDATE_SYSTEM_MAJOR) { + break; + } + } + if (key.equals("minorVersion")) { + updateMinor = Integer.parseInt(val); + } + } + if ("version".equals(header) && (ver != null)) { + if (key.equals("versionId")) { + ver.versionId = Integer.parseInt(val); + } + if (key.equals("versionName")) { + ver.versionName = val; + } + if (key.equals("nightly")) { + ver.nightly = val.equals("true"); + } + if (key.equals("revision")) { + ver.revision = val; + } + if (key.equals("build")) { + ver.build = Integer.parseInt(val); + } + if (key.equals("major")) { + ver.major = Integer.parseInt(val); + } + if (key.equals("minor")) { + ver.minor = Integer.parseInt(val); + } + if (key.equals("release")) { + ver.release = Integer.parseInt(val); + } + if (key.equals("longVersionName")) { + ver.longVersionName = val; + } + if (key.equals("releaseDate")) { + ver.releaseDate = val; + } + if (key.equals("appName")) { + ver.appName = val; + } + if (key.equals("appFullName")) { + ver.appFullName = val; + } + if (key.equals("updateLink")) { + ver.updateLink = val; + } + if (key.equals("change[]")) { + String changeType = val.substring(0, val.indexOf('|')); + String change = val.substring(val.indexOf('|') + 1); + if (!ver.changes.containsKey(changeType)) { + ver.changes.put(changeType, new ArrayList<>()); + } + List chlist = ver.changes.get(changeType); + chlist.add(change); + } + } + } + } + + if (!versions.isEmpty()) { + View.execInEventDispatch(() -> { + NewVersionDialog newVersionDialog = new NewVersionDialog(versions); + newVersionDialog.setVisible(true); + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); + }); + + return true; + } + } catch (IOException | NumberFormatException ex) { + return false; + } + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); + return false; + } + + private static FileHandler fileTxt; + + public static void clearLogFile() { + Logger logger = Logger.getLogger(""); + + FileHandler oldFileTxt = fileTxt; + fileTxt = null; + if (oldFileTxt != null) { + logger.removeHandler(fileTxt); + oldFileTxt.flush(); + oldFileTxt.close(); + } + + String fileName = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); + + try { + fileName = Configuration.getFFDecHome() + "logs" + File.separator; + if (Configuration.useDetailedLogging.get()) { + fileName += "log-" + sdf.format(new Date()) + ".txt"; + } else { + fileName += "log.txt"; + } + File f = new File(fileName).getParentFile(); + if (!f.exists()) { + f.mkdir(); + } + fileTxt = new FileHandler(fileName); + } catch (IOException | SecurityException ex) { + //cannot get lock error + if (ex.getMessage().contains("lock for")) { + //remove all old log files and their .lck + for (int i = 0; i <= 100; i++) { + File flog = new File(fileName + (i == 0 ? "" : "." + i)); + File flog_lock = new File(fileName + (i == 0 ? "" : "." + i) + ".lck"); + flog.delete(); + flog_lock.delete(); + } + try { + fileTxt = new FileHandler(fileName); + } catch (IOException | SecurityException ex1) { + logger.log(Level.SEVERE, "Cannot initialize logging", ex); + } + } else { + logger.log(Level.SEVERE, "Cannot initialize logging", ex); + } + } + + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread t, Throwable e) { + logger.log(Level.SEVERE, "Uncaught exception in thread: " + t.getName(), e); + if (e instanceof OutOfMemoryError && !Helper.is64BitJre() && Helper.is64BitOs()) { + View.showMessageDialog(null, AppStrings.translate("message.warning.outOfMemory32BitJre"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE); + } + } + }); + + Formatter formatterTxt = new LogFormatter(); + if (fileTxt != null) { + fileTxt.setFormatter(formatterTxt); + logger.addHandler(fileTxt); + } + + if (!GraphicsEnvironment.isHeadless() && ErrorLogFrame.hasInstance()) { + ErrorLogFrame.getInstance().clearErrorState(); + } + + sdf = new SimpleDateFormat("yyyy-MM-dd"); + logger.log(Level.INFO, "Date: {0}", sdf.format(new Date())); + logger.log(Level.INFO, ApplicationInfo.applicationVerName); + logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ + System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")}); + logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ + System.getProperty("java.version"), System.getProperty("java.vendor"), System.getProperty("os.arch")}); + } + + public static void initLogging(boolean debug) { + try { + Logger logger = Logger.getLogger(""); + logger.setLevel(Configuration.logLevel); + + Handler[] handlers = logger.getHandlers(); + for (int i = handlers.length - 1; i >= 0; i--) { + logger.removeHandler(handlers[i]); + } + + ConsoleHandler conHan = new ConsoleHandler(); + conHan.setLevel(debug ? Level.CONFIG : Level.WARNING); + SimpleFormatter formatterTxt = new SimpleFormatter(); + conHan.setFormatter(formatterTxt); + logger.addHandler(conHan); + clearLogFile(); + + } catch (Exception ex) { + throw new RuntimeException("Problems with creating the log files"); + } + } +} From 0112764b29ac39a9df4b36d405f626e0c7465048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 20:55:30 +0100 Subject: [PATCH 054/114] Fixed Invalid caret position error on selecting first script after startup. --- .../gui/editor/LineMarkedEditorPane.java | 1380 +++++++++-------- 1 file changed, 693 insertions(+), 687 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java index ad2a514aa..c947bfde1 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java @@ -1,687 +1,693 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.editor; - -import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.AppStrings; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.KeyEventPostProcessor; -import java.awt.KeyboardFocusManager; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.SortedSet; -import java.util.TreeSet; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.plaf.TextUI; -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; -import javax.swing.text.Document; -import javax.swing.text.Element; -import javax.swing.text.Highlighter.HighlightPainter; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.Segment; -import javax.swing.text.View; -import jsyntaxpane.SyntaxDocument; -import jsyntaxpane.SyntaxStyle; -import jsyntaxpane.Token; -import jsyntaxpane.actions.ActionUtils; - -/** - * - * @author JPEXS - */ -public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHandler { - - private static final int truncateLimit = 2 * 1024 * 1024; - - public static final Color BG_SELECTED_LINE = new Color(0xe9, 0xef, 0xf8); - - public static final Color BG_ERROR_LINE = new Color(255, 200, 200); - - private int lastLine = -1; - - private boolean error = false; - - private Token lastUnderlined = null; - - private static final HighlightPainter underLinePainter = new UnderLinePainter(new Color(0, 0, 255)); - - private LinkHandler linkHandler = this; - - public static class LineMarker implements Comparable { - - private final Color bgColor; - - private final Color color; - - private FgPainter fgPainter; - - //private int line; - private final int priority; - - public FgPainter getForegroundPainter() { - return fgPainter; - } - - @Override - public String toString() { - return bgColor.toString() + " priority:" + priority; - } - - public LineMarker(Color color, Color bgColor, int priority) { - this.bgColor = bgColor; - this.color = color; - this.priority = priority; - if (color != null) { - this.fgPainter = new FgPainter(color, bgColor); - } - } - - @Override - public int hashCode() { - int hash = 5; - hash = 17 * hash + Objects.hashCode(this.bgColor); - hash = 17 * hash + Objects.hashCode(this.color); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final LineMarker other = (LineMarker) obj; - if (!Objects.equals(this.bgColor, other.bgColor)) { - return false; - } - return (Objects.equals(this.color, other.color)); - } - - public Color getBgColor() { - return bgColor; - } - - public Color getColor() { - return color; - } - - @Override - public int compareTo(LineMarker o) { - return priority - o.priority; - } - } -//(Map>) - - private Map> lineMarkers = Collections.synchronizedMap(new HashMap>()); - - public void setLineMarkers(Map> colorMarkers) { - this.lineMarkers = colorMarkers; - } - - public void clearLineColors() { - lineMarkers.clear(); - repaint(); - } - - public boolean hasColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (lineMarkers.containsKey(line)) { - return lineMarkers.get(line).contains(lm); - } - return false; - } - - public void removeColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (lineMarkers.containsKey(line)) { - lineMarkers.get(line).remove(lm); - } - getParent().repaint(); - } - - public void removeColorMarkerOnAllLines(LineMarker lm) { - for (int line : lineMarkers.keySet()) { - line += firstLineOffset(); - removeColorMarker(line, lm); - } - } - - public int firstLineOffset() { - return 0; - } - - public void toggleColorMarker(int line, LineMarker lm) { - if (!lineMarkers.containsKey(line - firstLineOffset())) { - addColorMarker(line, lm); - } else if (lineMarkers.get(line - firstLineOffset()).contains(lm)) { - removeColorMarker(line, lm); - } else { - addColorMarker(line, lm); - } - getParent().repaint(); - } - - public void addColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (!lineMarkers.containsKey(line)) { - lineMarkers.put(line, Collections.synchronizedSortedSet(new TreeSet<>())); - } - lineMarkers.get(line).add(lm); - getParent().repaint(); - } - - public int getLine() { - int caretPosition = getCaretPosition(); - Element root = getDocument().getDefaultRootElement(); - int currentLine = root.getElementIndex(caretPosition); - return currentLine; - } - - public void markError() { - error = true; - } - - public void gotoLine(int line) { - setCaretPosition(ActionUtils.getDocumentPosition(this, line, 0)); - } - - public void gotoLineCol(int line, int column) { - setCaretPosition(ActionUtils.getDocumentPosition(this, line, column)); - } - - public Point getLineLocation(int line) { - int pos = ActionUtils.getDocumentPosition(this, line + 1, 0); - if (pos < 0) { - return null; - } - try { - Rectangle r = modelToView(pos); - return new Point(r.x, r.y); - } catch (BadLocationException ex) { - return null; - } - } - - private void getLineBounds(int line, Reference lineStart, Reference lineEnd) { - Document d = getDocument(); - String text = ""; - try { - text = d.getText(0, d.getLength()); - } catch (BadLocationException ex) { - //ignore - } - int lineCnt = 0; - int lineStartVal = 0; - int lineEndVal = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '\n') { - lineCnt++; - if (lineCnt == line) { - lineStartVal = i + 1; - } - if (lineCnt == line + 1) { - lineEndVal = i; - } - } - } - if (lineCnt == 0) { - lineEndVal = text.length() - 1; - if (line > 0) { - lineStartVal = text.length() - 1; - } - } - lineEnd.setVal(lineEndVal); - lineStart.setVal(lineStartVal); - } - - public void selectLine(int line) { - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - getLineBounds(line, lineStart, lineEnd); - - select(lineStart.getVal(), lineEnd.getVal()); - requestFocus(); - } - - public String getCurrentLineText() { - return getLineText(getLine()); - } - - public String getLineText(int line) { - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - getLineBounds(line, lineStart, lineEnd); - try { - return getDocument().getText(lineStart.getVal(), lineEnd.getVal() - lineStart.getVal()); - } catch (BadLocationException ex) { - return null; - } - } - - public LineMarkedEditorPane() { - setOpaque(false); - addCaretListener(new CaretListener() { - @Override - public void caretUpdate(CaretEvent e) { - int caretPosition = getCaretPosition(); - Element root = getDocument().getDefaultRootElement(); - int currentLine = root.getElementIndex(caretPosition); - if (currentLine != lastLine) { - lastLine = currentLine; - error = false; - repaint(); - } - - } - }); - final LinkAdapter la = new LinkAdapter(); - addMouseMotionListener(la); - addMouseListener(la); - - //No standard AddKeyListener as we want to catch Ctrl globally no matter of focus - KeyboardFocusManager.getCurrentKeyboardFocusManager() - .addKeyEventPostProcessor(new KeyEventPostProcessor() { - @Override - public boolean postProcessKeyEvent(KeyEvent e) { - if (e.getID() == KeyEvent.KEY_PRESSED) { - la.keyPressed(e); - } - if (e.getID() == KeyEvent.KEY_RELEASED) { - la.keyReleased(e); - } - if (e.getID() == KeyEvent.KEY_TYPED) { - la.keyTyped(e); - } - return false; - } - }); - - } - - public Token tokenAtPos(Point lastPos) { - Document d = getDocument(); - if (d instanceof SyntaxDocument) { - SyntaxDocument sd = (SyntaxDocument) d; - - //correction of token last character - int pos = viewToModel(lastPos); - Rectangle r; - try { - r = modelToView(pos); - if (r != null) { - if (lastPos.x < r.x) { - pos--; - } - } - } catch (BadLocationException ex) { - //ignore - } - Token t = sd.getTokenAt(pos); - - //Correction of token of length 1 character - if (pos > 0 && pos < d.getLength() - 1 && t != null && t.length == 1) { - Token tprev = sd.getTokenAt(pos - 1); - if (tprev == t) { - t = sd.getTokenAt(pos + 1); - } - } - - return t; - } - return null; - } - - private class LinkAdapter extends MouseAdapter implements KeyListener { - - private Point lastPos = new Point(0, 0); - - private boolean ctrlDown = false; - - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) { - ctrlDown = true; - update(); - } - } - - @Override - public void keyTyped(KeyEvent e) { - - } - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) { - ctrlDown = false; - update(); - } - } - - private void update() { - if (ctrlDown) { - Token t = tokenAtPos(lastPos); - - if (t != lastUnderlined) { - if (t == null || lastUnderlined == null || !t.equals(lastUnderlined)) { - MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); - - if (t != null && linkHandler.isLink(t)) { - lastUnderlined = t; - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - - } else { - lastUnderlined = null; - } - } else { - lastUnderlined = null; - } - } - - if (lastUnderlined != null) { - MyMarkers.markToken(LineMarkedEditorPane.this, lastUnderlined, underLinePainter); - } else { - setCursor(Cursor.getDefaultCursor()); - } - repaint(); - } else { - lastUnderlined = null; - MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); - setCursor(Cursor.getDefaultCursor()); - repaint(); - } - } - - @Override - public void mouseClicked(MouseEvent e) { - if (ctrlDown) { - Token t = tokenAtPos(lastPos); - if (t != null && linkHandler.isLink(t)) { - linkHandler.handleLink(t); - } - } - } - - @Override - public void mouseMoved(MouseEvent e) { - - ctrlDown = (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0; - lastPos = e.getPoint(); - update(); - - } - } - - public void setLinkHandler(LinkHandler linkHandler) { - if (linkHandler == null) { - linkHandler = this; - } - this.linkHandler = linkHandler; - } - - public LinkHandler getLinkHandler() { - return linkHandler; - } - - @Override - public HighlightPainter linkPainter() { - return underLinePainter; - } - - @Override - public boolean isLink(Token token) { - return false; - } - - @Override - public void handleLink(Token token) { - - } - - @Override - public void setText(String t) { - this.lineMarkers = new HashMap<>(); - lastLine = -1; - error = false; - if (Configuration._debugMode.get() && t != null && t.length() > truncateLimit) { - t = t.substring(0, truncateLimit) + "\r\n" + AppStrings.translate("editorTruncateWarning").replace("%chars%", Integer.toString(truncateLimit)); - } - - super.setText(t); - setCaretPosition(0); //scroll to top - } - - public static class FgPainter extends DefaultHighlighter.DefaultHighlightPainter { - - private final SyntaxStyle fgStyle; - - public FgPainter(Color color, Color bgColor) { - super(bgColor); - this.fgStyle = new SyntaxStyle(color, false, false); - } - - @Override - public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { - try { - // --- determine locations --- - TextUI mapper = c.getUI(); - - Segment seg = new Segment(); - ((SyntaxDocument) c.getDocument()).getText(offs0, offs1 - offs0, seg); - - Rectangle r = mapper.modelToView(c, offs0, Position.Bias.Forward); - FontMetrics fm = g.getFontMetrics(); - //int fh = fm.getHeight(); - fgStyle.drawText(seg, r.x, r.y + fm.getAscent(), g, null, offs0); - /*for (int i = offs0; i < offs1; i++) { - - Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); - Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); - if (r1.y == r.y) { - ((SyntaxDocument) c.getDocument()).getText(i, 1, seg); - fgStyle.drawText(seg, r.x, r.y, g, null, i); - //g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); - } - }*/ - - } catch (BadLocationException e) { - // can't render - } - } - - @Override - public Shape paintLayer(Graphics g, int offs0, int offs1, - Shape bounds, JTextComponent c, View view) { - - g.setColor(c.getSelectionColor()); - - Rectangle r; - - if (offs0 == view.getStartOffset() - && offs1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - if (bounds instanceof Rectangle) { - r = (Rectangle) bounds; - } else { - r = bounds.getBounds(); - } - } else { - // Should only render part of View. - try { - // --- determine locations --- - Shape shape = view.modelToView(offs0, Position.Bias.Forward, - offs1, Position.Bias.Backward, - bounds); - r = (shape instanceof Rectangle) - ? (Rectangle) shape : shape.getBounds(); - } catch (BadLocationException e) { - // can't render - r = null; - } - } - - if (r != null) { - r.width = Math.max(r.width, 1); - - paint(g, offs0, offs1, r, c); - } - - return r; - } - } - - public static class UnderLinePainter extends DefaultHighlighter.DefaultHighlightPainter { - - public UnderLinePainter(Color color) { - super(color); - } - - @Override - public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { - try { - // --- determine locations --- - TextUI mapper = c.getUI(); - - Color col = getColor(); - if (col == null) { - col = Color.black; - } - g.setColor(col); - for (int i = offs0; i < offs1; i++) { - - Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); - Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); - if (r1.y == r.y) { - g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); - } - } - - } catch (BadLocationException e) { - // can't render - } - } - - @Override - public Shape paintLayer(Graphics g, int offs0, int offs1, - Shape bounds, JTextComponent c, View view) { - - g.setColor(c.getSelectionColor()); - - Rectangle r; - - if (offs0 == view.getStartOffset() - && offs1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - if (bounds instanceof Rectangle) { - r = (Rectangle) bounds; - } else { - r = bounds.getBounds(); - } - } else { - // Should only render part of View. - try { - // --- determine locations --- - Shape shape = view.modelToView(offs0, Position.Bias.Forward, - offs1, Position.Bias.Backward, - bounds); - r = (shape instanceof Rectangle) - ? (Rectangle) shape : shape.getBounds(); - } catch (BadLocationException e) { - // can't render - r = null; - } - } - - if (r != null) { - r.width = Math.max(r.width, 1); - - paint(g, offs0, offs1, r, c); - - } - - return r; - } - } - - @Override - public void paint(Graphics g) { - g.setColor(Color.white); - g.fillRect(0, 0, getWidth(), getHeight()); - FontMetrics fontMetrics = g.getFontMetrics(); - int lh = fontMetrics.getHeight(); - int d = fontMetrics.getDescent(); - - if (lastLine > 0) { - if (error) { - g.setColor(BG_ERROR_LINE); - } else { - g.setColor(BG_SELECTED_LINE); - } - g.fillRect(0, d + lh * lastLine - 1, getWidth(), lh); - } - for (int line : lineMarkers.keySet()) { - SortedSet cs = lineMarkers.get(line); - if (cs.isEmpty()) { - continue; - } - LineMarker lastMarker = cs.first(); - if (lastMarker.getBgColor() == null) { - continue; - } - g.setColor(lastMarker.getBgColor()); - line += firstLineOffset(); - g.fillRect(0, d + lh * (line - 1), getWidth(), lh); - } - super.paint(g); - for (int line : lineMarkers.keySet()) { - - SortedSet cs = lineMarkers.get(line); - if (cs.isEmpty()) { - continue; - } - line += firstLineOffset(); - - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - - getLineBounds(line, lineStart, lineEnd); - FgPainter fgp = cs.first().getForegroundPainter(); - if (fgp != null) { - fgp.paint(g, lineStart.getVal(), lineEnd.getVal(), null, this); - } - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.editor; + +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.gui.AppStrings; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.KeyEventPostProcessor; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.SortedSet; +import java.util.TreeSet; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.plaf.TextUI; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Highlighter.HighlightPainter; +import javax.swing.text.JTextComponent; +import javax.swing.text.Position; +import javax.swing.text.Segment; +import javax.swing.text.View; +import jsyntaxpane.SyntaxDocument; +import jsyntaxpane.SyntaxStyle; +import jsyntaxpane.Token; +import jsyntaxpane.actions.ActionUtils; + +/** + * + * @author JPEXS + */ +public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHandler { + + private static final int truncateLimit = 2 * 1024 * 1024; + + public static final Color BG_SELECTED_LINE = new Color(0xe9, 0xef, 0xf8); + + public static final Color BG_ERROR_LINE = new Color(255, 200, 200); + + private int lastLine = -1; + + private boolean error = false; + + private Token lastUnderlined = null; + + private static final HighlightPainter underLinePainter = new UnderLinePainter(new Color(0, 0, 255)); + + private LinkHandler linkHandler = this; + + public static class LineMarker implements Comparable { + + private final Color bgColor; + + private final Color color; + + private FgPainter fgPainter; + + //private int line; + private final int priority; + + public FgPainter getForegroundPainter() { + return fgPainter; + } + + @Override + public String toString() { + return bgColor.toString() + " priority:" + priority; + } + + public LineMarker(Color color, Color bgColor, int priority) { + this.bgColor = bgColor; + this.color = color; + this.priority = priority; + if (color != null) { + this.fgPainter = new FgPainter(color, bgColor); + } + } + + @Override + public int hashCode() { + int hash = 5; + hash = 17 * hash + Objects.hashCode(this.bgColor); + hash = 17 * hash + Objects.hashCode(this.color); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final LineMarker other = (LineMarker) obj; + if (!Objects.equals(this.bgColor, other.bgColor)) { + return false; + } + return (Objects.equals(this.color, other.color)); + } + + public Color getBgColor() { + return bgColor; + } + + public Color getColor() { + return color; + } + + @Override + public int compareTo(LineMarker o) { + return priority - o.priority; + } + } +//(Map>) + + private Map> lineMarkers = Collections.synchronizedMap(new HashMap>()); + + public void setLineMarkers(Map> colorMarkers) { + this.lineMarkers = colorMarkers; + } + + public void clearLineColors() { + lineMarkers.clear(); + repaint(); + } + + public boolean hasColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (lineMarkers.containsKey(line)) { + return lineMarkers.get(line).contains(lm); + } + return false; + } + + public void removeColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (lineMarkers.containsKey(line)) { + lineMarkers.get(line).remove(lm); + } + getParent().repaint(); + } + + public void removeColorMarkerOnAllLines(LineMarker lm) { + for (int line : lineMarkers.keySet()) { + line += firstLineOffset(); + removeColorMarker(line, lm); + } + } + + public int firstLineOffset() { + return 0; + } + + public void toggleColorMarker(int line, LineMarker lm) { + if (!lineMarkers.containsKey(line - firstLineOffset())) { + addColorMarker(line, lm); + } else if (lineMarkers.get(line - firstLineOffset()).contains(lm)) { + removeColorMarker(line, lm); + } else { + addColorMarker(line, lm); + } + getParent().repaint(); + } + + public void addColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (!lineMarkers.containsKey(line)) { + lineMarkers.put(line, Collections.synchronizedSortedSet(new TreeSet<>())); + } + lineMarkers.get(line).add(lm); + getParent().repaint(); + } + + public int getLine() { + int caretPosition = getCaretPosition(); + Element root = getDocument().getDefaultRootElement(); + int currentLine = root.getElementIndex(caretPosition); + return currentLine; + } + + public void markError() { + error = true; + } + + public void gotoLine(int line) { + int pos = ActionUtils.getDocumentPosition(this, line, 0); + if (pos != -1) { + setCaretPosition(pos); + } + } + + public void gotoLineCol(int line, int column) { + int pos = ActionUtils.getDocumentPosition(this, line, column); + if (pos != -1) { + setCaretPosition(pos); + } + } + + public Point getLineLocation(int line) { + int pos = ActionUtils.getDocumentPosition(this, line + 1, 0); + if (pos < 0) { + return null; + } + try { + Rectangle r = modelToView(pos); + return new Point(r.x, r.y); + } catch (BadLocationException ex) { + return null; + } + } + + private void getLineBounds(int line, Reference lineStart, Reference lineEnd) { + Document d = getDocument(); + String text = ""; + try { + text = d.getText(0, d.getLength()); + } catch (BadLocationException ex) { + //ignore + } + int lineCnt = 0; + int lineStartVal = 0; + int lineEndVal = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '\n') { + lineCnt++; + if (lineCnt == line) { + lineStartVal = i + 1; + } + if (lineCnt == line + 1) { + lineEndVal = i; + } + } + } + if (lineCnt == 0) { + lineEndVal = text.length() - 1; + if (line > 0) { + lineStartVal = text.length() - 1; + } + } + lineEnd.setVal(lineEndVal); + lineStart.setVal(lineStartVal); + } + + public void selectLine(int line) { + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + getLineBounds(line, lineStart, lineEnd); + + select(lineStart.getVal(), lineEnd.getVal()); + requestFocus(); + } + + public String getCurrentLineText() { + return getLineText(getLine()); + } + + public String getLineText(int line) { + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + getLineBounds(line, lineStart, lineEnd); + try { + return getDocument().getText(lineStart.getVal(), lineEnd.getVal() - lineStart.getVal()); + } catch (BadLocationException ex) { + return null; + } + } + + public LineMarkedEditorPane() { + setOpaque(false); + addCaretListener(new CaretListener() { + @Override + public void caretUpdate(CaretEvent e) { + int caretPosition = getCaretPosition(); + Element root = getDocument().getDefaultRootElement(); + int currentLine = root.getElementIndex(caretPosition); + if (currentLine != lastLine) { + lastLine = currentLine; + error = false; + repaint(); + } + + } + }); + final LinkAdapter la = new LinkAdapter(); + addMouseMotionListener(la); + addMouseListener(la); + + //No standard AddKeyListener as we want to catch Ctrl globally no matter of focus + KeyboardFocusManager.getCurrentKeyboardFocusManager() + .addKeyEventPostProcessor(new KeyEventPostProcessor() { + @Override + public boolean postProcessKeyEvent(KeyEvent e) { + if (e.getID() == KeyEvent.KEY_PRESSED) { + la.keyPressed(e); + } + if (e.getID() == KeyEvent.KEY_RELEASED) { + la.keyReleased(e); + } + if (e.getID() == KeyEvent.KEY_TYPED) { + la.keyTyped(e); + } + return false; + } + }); + + } + + public Token tokenAtPos(Point lastPos) { + Document d = getDocument(); + if (d instanceof SyntaxDocument) { + SyntaxDocument sd = (SyntaxDocument) d; + + //correction of token last character + int pos = viewToModel(lastPos); + Rectangle r; + try { + r = modelToView(pos); + if (r != null) { + if (lastPos.x < r.x) { + pos--; + } + } + } catch (BadLocationException ex) { + //ignore + } + Token t = sd.getTokenAt(pos); + + //Correction of token of length 1 character + if (pos > 0 && pos < d.getLength() - 1 && t != null && t.length == 1) { + Token tprev = sd.getTokenAt(pos - 1); + if (tprev == t) { + t = sd.getTokenAt(pos + 1); + } + } + + return t; + } + return null; + } + + private class LinkAdapter extends MouseAdapter implements KeyListener { + + private Point lastPos = new Point(0, 0); + + private boolean ctrlDown = false; + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) { + ctrlDown = true; + update(); + } + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) { + ctrlDown = false; + update(); + } + } + + private void update() { + if (ctrlDown) { + Token t = tokenAtPos(lastPos); + + if (t != lastUnderlined) { + if (t == null || lastUnderlined == null || !t.equals(lastUnderlined)) { + MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); + + if (t != null && linkHandler.isLink(t)) { + lastUnderlined = t; + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + } else { + lastUnderlined = null; + } + } else { + lastUnderlined = null; + } + } + + if (lastUnderlined != null) { + MyMarkers.markToken(LineMarkedEditorPane.this, lastUnderlined, underLinePainter); + } else { + setCursor(Cursor.getDefaultCursor()); + } + repaint(); + } else { + lastUnderlined = null; + MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); + setCursor(Cursor.getDefaultCursor()); + repaint(); + } + } + + @Override + public void mouseClicked(MouseEvent e) { + if (ctrlDown) { + Token t = tokenAtPos(lastPos); + if (t != null && linkHandler.isLink(t)) { + linkHandler.handleLink(t); + } + } + } + + @Override + public void mouseMoved(MouseEvent e) { + + ctrlDown = (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0; + lastPos = e.getPoint(); + update(); + + } + } + + public void setLinkHandler(LinkHandler linkHandler) { + if (linkHandler == null) { + linkHandler = this; + } + this.linkHandler = linkHandler; + } + + public LinkHandler getLinkHandler() { + return linkHandler; + } + + @Override + public HighlightPainter linkPainter() { + return underLinePainter; + } + + @Override + public boolean isLink(Token token) { + return false; + } + + @Override + public void handleLink(Token token) { + + } + + @Override + public void setText(String t) { + this.lineMarkers = new HashMap<>(); + lastLine = -1; + error = false; + if (Configuration._debugMode.get() && t != null && t.length() > truncateLimit) { + t = t.substring(0, truncateLimit) + "\r\n" + AppStrings.translate("editorTruncateWarning").replace("%chars%", Integer.toString(truncateLimit)); + } + + super.setText(t); + setCaretPosition(0); //scroll to top + } + + public static class FgPainter extends DefaultHighlighter.DefaultHighlightPainter { + + private final SyntaxStyle fgStyle; + + public FgPainter(Color color, Color bgColor) { + super(bgColor); + this.fgStyle = new SyntaxStyle(color, false, false); + } + + @Override + public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { + try { + // --- determine locations --- + TextUI mapper = c.getUI(); + + Segment seg = new Segment(); + ((SyntaxDocument) c.getDocument()).getText(offs0, offs1 - offs0, seg); + + Rectangle r = mapper.modelToView(c, offs0, Position.Bias.Forward); + FontMetrics fm = g.getFontMetrics(); + //int fh = fm.getHeight(); + fgStyle.drawText(seg, r.x, r.y + fm.getAscent(), g, null, offs0); + /*for (int i = offs0; i < offs1; i++) { + + Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); + Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); + if (r1.y == r.y) { + ((SyntaxDocument) c.getDocument()).getText(i, 1, seg); + fgStyle.drawText(seg, r.x, r.y, g, null, i); + //g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); + } + }*/ + + } catch (BadLocationException e) { + // can't render + } + } + + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor(c.getSelectionColor()); + + Rectangle r; + + if (offs0 == view.getStartOffset() + && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + if (bounds instanceof Rectangle) { + r = (Rectangle) bounds; + } else { + r = bounds.getBounds(); + } + } else { + // Should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1, Position.Bias.Backward, + bounds); + r = (shape instanceof Rectangle) + ? (Rectangle) shape : shape.getBounds(); + } catch (BadLocationException e) { + // can't render + r = null; + } + } + + if (r != null) { + r.width = Math.max(r.width, 1); + + paint(g, offs0, offs1, r, c); + } + + return r; + } + } + + public static class UnderLinePainter extends DefaultHighlighter.DefaultHighlightPainter { + + public UnderLinePainter(Color color) { + super(color); + } + + @Override + public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { + try { + // --- determine locations --- + TextUI mapper = c.getUI(); + + Color col = getColor(); + if (col == null) { + col = Color.black; + } + g.setColor(col); + for (int i = offs0; i < offs1; i++) { + + Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); + Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); + if (r1.y == r.y) { + g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); + } + } + + } catch (BadLocationException e) { + // can't render + } + } + + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor(c.getSelectionColor()); + + Rectangle r; + + if (offs0 == view.getStartOffset() + && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + if (bounds instanceof Rectangle) { + r = (Rectangle) bounds; + } else { + r = bounds.getBounds(); + } + } else { + // Should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1, Position.Bias.Backward, + bounds); + r = (shape instanceof Rectangle) + ? (Rectangle) shape : shape.getBounds(); + } catch (BadLocationException e) { + // can't render + r = null; + } + } + + if (r != null) { + r.width = Math.max(r.width, 1); + + paint(g, offs0, offs1, r, c); + + } + + return r; + } + } + + @Override + public void paint(Graphics g) { + g.setColor(Color.white); + g.fillRect(0, 0, getWidth(), getHeight()); + FontMetrics fontMetrics = g.getFontMetrics(); + int lh = fontMetrics.getHeight(); + int d = fontMetrics.getDescent(); + + if (lastLine > 0) { + if (error) { + g.setColor(BG_ERROR_LINE); + } else { + g.setColor(BG_SELECTED_LINE); + } + g.fillRect(0, d + lh * lastLine - 1, getWidth(), lh); + } + for (int line : lineMarkers.keySet()) { + SortedSet cs = lineMarkers.get(line); + if (cs.isEmpty()) { + continue; + } + LineMarker lastMarker = cs.first(); + if (lastMarker.getBgColor() == null) { + continue; + } + g.setColor(lastMarker.getBgColor()); + line += firstLineOffset(); + g.fillRect(0, d + lh * (line - 1), getWidth(), lh); + } + super.paint(g); + for (int line : lineMarkers.keySet()) { + + SortedSet cs = lineMarkers.get(line); + if (cs.isEmpty()) { + continue; + } + line += firstLineOffset(); + + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + + getLineBounds(line, lineStart, lineEnd); + FgPainter fgp = cs.first().getForegroundPainter(); + if (fgp != null) { + fgp.paint(g, lineStart.getVal(), lineEnd.getVal(), null, this); + } + } + } +} From 44d2e93ac5f00cd07870e44148245faf9b434f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 20:57:48 +0100 Subject: [PATCH 055/114] Fixed Invalid caret position error on selecting first script after startup. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe22c46d..bc5c55d26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ All notable changes to this project will be documented in this file. - [#1402] SVG export: certain font characters not exported properly fixed - [#1430] AS 1/2 deobfuscation fixes - Opening loaded SWF files during run fixed +- Not opening first script when clicked on app startup ## [10.0.0] - 2016-12-24 ### Added From 7d50ee941fec464a71cc3dec7a6cd92da964fd89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 21:29:03 +0100 Subject: [PATCH 056/114] Debug tooltips added to Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc5c55d26..8487817ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - [#1333] Exporting sprites as swf files - [#1365] Allow to configure all types of configuration settings from command line - [#1369] Allow zoom in sprite (and button) export +- Debug tooltips on hover ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter From 7e50b87886e8b3670a54ed80e6e87d3101ad6144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 7 Jan 2018 22:19:54 +0100 Subject: [PATCH 057/114] Fix repository line endings --- CHANGELOG.md | 4580 ++++++++-------- src/com/jpexs/decompiler/flash/gui/Main.java | 4836 ++++++++--------- .../gui/editor/LineMarkedEditorPane.java | 1386 ++--- 3 files changed, 5401 insertions(+), 5401 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8487817ba..1ce1c08bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2291 +1,2291 @@ -# Change Log -All notable changes to this project will be documented in this file. - -## [Unreleased] -### Added -- [#1240] AS search using multiple threads when parallel speedup is enabled -- [#1308] Search by all P-code files in AS3 -- [#1333] Exporting sprites as swf files -- [#1365] Allow to configure all types of configuration settings from command line -- [#1369] Allow zoom in sprite (and button) export -- Debug tooltips on hover - -### Fixed -- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter -- [#1343] AS 1/2 direct editation critical bug -- [#1348] Cannot properly export frame with cyrillic symbols to SVG -- [#1354] Various FLA export problem fixes -- [#1367] Raw edit conditional type fix. -- [#1401] SVG export: duplicate pattern IDs fixed -- [#1402] SVG export: certain font characters not exported properly fixed -- [#1430] AS 1/2 deobfuscation fixes -- Opening loaded SWF files during run fixed -- Not opening first script when clicked on app startup - -## [10.0.0] - 2016-12-24 -### Added -- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only -- optional AS3 direct editation with Flex SDK -- AS3 p-code editing - metadata read/write support -- AS3 p-code editing - end of the block command like in RABCDasm -- AS3 p-code editing - popup docs for more than instructions -- Debugger - New columns for variable details - scope, flags, trait -- Debugger - Add watch feature -- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases -- Deobfuscation Tool - Fix colliding trait/classes via toolbar command -- Auto rename identifiers option now fixes colliding trait/classes aswell -- [#1254] FLA export - detecting scripts on AS3 timeline -- [#907] FFDec Library JAR file has version inside it. -- [#1311], [#1313] actionScript source font size -- Display warning when library version and GUI version mismatch -- Changelog file -- [#1308] Search by all P-code files (AS 1/2 only) - -### Changed -- [#1189] AS3 - sort imports to have same order always -- GUI: AS3 P-code header show actual trait type and method type -- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" -- Set advance values button has confirm dialog with information -- [#1274] Linux package no longer requires Oracle Java only -- Library now packaged inside ZIP file - -### Fixed -- P-code docs formatting fix -- Export dialog - handling sprite and SWF frames correctly -- [#1275] debugger - show local variables fixes -- AS3 p-code editing - popup docs correctly displayed when label on line start -- [#1278] replacing DefineBits error -- [#1281] DefineFont 2/3 getting character advance value when replacing fix -- Set advance values button - Do not set advance if the char cannot be displayed in source font -- AS3 Goto declaration for single character names -- Identifier renaming for top level classes -- AS3 direct editation not correctly saving local register names -- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir -- Mac OS X installer fix (.pkg) -- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers -- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix -- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes -- [#1302] Callpropvoid instruction docblock not correct -- [#1309] recent files not getting updates -- [#1312] faster colliding usages finder -- [#1303] garbled text when exporting frame with text -- [#1314] user interface: button order -- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) -- [#1323] Audio playback fails - -## [9.0.0] - 2016-08-12 -### Added -- Instance metadata (AMF3) editing in PlaceObject4 -- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) -- [#1171] Export stroke scale to FLA -- FLA export - check invalid unicode characters -- [#1170] Extract from memory in commandline -- Reload one vs Reload all buttons -- ABC: Float and Float4 support -- AS3 p-code instruction documentation in GUI -- [#1241] Settings to show original bytes in hex view -- Search in dump view -- Jump to resources view from hex view -- Show warning on 32bit JRE - -### Changed -- [#1162] improved opening loaded SWF files -- Flash Viewer - skip frames when not on time -- [#1199] Automatically import alpha channel to JPEG3/4 from PNG - -### Fixed -- [#1151] Filters on texts fixed -- [#1128] Adding characters to font fixed (FontAlignZones not removed) -- [#1163] Clicking open->file makes program buggy -- Refresh tree after raw edit -- [#1172] Text double escape fix -- [#1174] Change language fix -- some AS2 deobfuscation fixes -- [#1183] Index out of bounds fix -- Implicit coersion on binary/unary opfix -- debugger: corect display variable values through getters -- Multiple XLF export fix -- [#1193] FLA export - text tag advance fix, one layer shape fix -- [#1193] FLA export - smoothed image detection, export raw JPEG data -- [#1193] Export space character to TTF correctly -- [#1200] Previous search text selected when quick find -- Flash viewer: aspect ratio on startup fix -- [#1198] Saving trait slot const value -- Zoom parameter commandline fixed -- [#1205] clipping fixed -- [#1194] Wrong sound effects in FLA -- [#1210] Frame Export fix -- Improved/fixed go to declaration in AS3 -- [#1217] PCode window not in same position as AS -- Hide memor search on non windows platform -- [#1244] Incorrect showing of NOP instructions -- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back -- [#1241] File content is different from hex view -- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont -- [#1236] won't open fixed -- [#1251] SWF not same after export XML and import back -- [#1265] Error during export -- [#1268] Font export - Using second glyph when two glyphs for one character found -- [#1268] GFX compacted font - fixed advance values on export - -## [8.0.1] - 2016-02-20 -### Changed -- FFDec debug tab in advanced settings moved to other tabs - -### Fixed -- [#1161] AS1/2 deobfuscation broken -- AS1/2 Simplify expressions fix - -## [8.0.0] - 2016-02-18 -### Added -- Debugger - AS1/2 Show registers -- Debugger - display variables in the tree structure -- Debugger - set value of variable -- Debugger - AS1/2 View constantpool -- Debugger - P-code level debugging for both AS1/2 and AS3 -- Basic SVG import for shapes -- Simplify expression setting -- [#1118] Loading characters through ImportAssets - show as readonly -- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 -- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) -- [#1121] Ability to save binary data by its name -- [#1052] Add object to existing frame -- Allow adding tag to main timeline -- AS1/2: Ctrl+click to declaration of variables, registers -- Allow trait specification in pcode import -- Icons for tag types in Dump view -- Show error message when a text tag is invalid (glyph index problem) -- AS3 direct editation - store local register names in debug info = allow to rename them - -### Changed -- New application icon and splash screen -- [#1145] AS3 better declaration type detection, better convert_x instruction handling -- Binary export - use .swf extension for swf files -- Better tree labels in generic tag editor (Raw edit) -- [#758] Allow zooming more than preview area in internal viewer - -### Fixed -- [#1096] FLA export - pretty print -- [#1104] AS1/2/3 Script Importat not working -- [#1107] Text Offset Incorrect fixed -- [#1106] New Shapes replace function fix -- [#1113] It takes too long to switch between rendered sprite -- [#1075] Lenght of DefineText in some cases -- [#1127] autoRenameIdentifiers is not supported in CLI mode -- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed -- [#1103] Foreach variables fixes -- AS3 Switch fixes -- Default clause position in switch -- [#1133] Incorrect frame order for nested sprite -- [#1135] Handle try "to" in p-code correctly -- Font wideOffsets,wideCodes fixed in DefineFont2/3 -- AS3: super method call -- [#1138] All exported videos are the same file which may be broken -- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages -- [#1137] running flashplayer(debugger) executable in Linux/MacOs -- [#1144] Command line argument renameInvalidIdentifiers -- [#1145] double not (!!) not removed -- [#1147] Sprite is exported incorrectly -- [#1148] handing end of stream exception in abc reader, loc exception -- [#1152] Font info tag modified tag was not set => saved swf was corrupt -- [#1154] Some 32bit JRE problems - program won't start -- [#1145] Correct precedence handling on binary operators -- [#116] not resolving unusual tags in DefineSprite - -## [7.1.2] - 2015-12-03 -### Fixed -- AS3 debugger start halt fix -- AS1/2 debugger fix on nondebug enabled SWFs -- AS1/2 debugger fix for functions -- Debug menu item enabled fix -- AS3 local reg index fix -- Advanced settings calendar -- AVM2 instructions in hex view -- [#1070] Incorrect switch decompilation -- [#1098] Import XML fix - -## [7.1.1] - 2015-11-23 -### Fixed -- Critical debugger fix - widelines - -## [7.1.0] - 2015-11-23 -### Added -- AS1/2 debugger -- Breakpoint/IP marker on line beginning - -### Changed -- Starting debugger on demand -- Installer message about playerglobal is only warning now - -### Fixed -- [#1033], [#1083] AS3 deobfuscation issues -- [#1091] AS 1/2 direct editation saving - -## [7.0.1] - 2015-11-18 -### Fixed -- Debugger: Adding breakpoint if script initializer not displayed - -## [7.0.0] - 2015-11-18 -### Added -- AS3 Debugger - breakpoints, stepping, show variables -- Faster AS3 direct editation - -### Changed -- Better Configuration of flashplayer paths - -### Removed -- Removed old "debugger" buttons -- Removed search from browsers cache - inactual code - -### Fixed -- Many AS3 direct editation related bugs -- [#1076] export fix - -## [6.1.1] - 2015-10-30 -### Fixed -- Deobfuscate AS3 metadata -- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix -- [#1063] AS3 direct edit - script initializer fix, generating method names -- XML export/import fixes -- [#1019] Namespace imports fix -- AVM2 code execution fix -- [#1016] AS3 direct editation fixes -- [#1010] AS2 direct editation - internal and override is not a reserved word -- [#1008] pushshort instruction diassembly -- [#1004] this/super can be AS1/2 variable -- [#933] AS3 allow numbers as object literal keys - -## [6.1.0] - 2015-10-26 -### Added -- Open other loaded SWFs during playback (useful for loaders) -- Export uncompressed data from dump tree -- Print performance statistics from commandline -- [#1062] Editing/displaying script initializers -- Enable debugging on SWF file (commandline) - -### Changed -- Faster syntax highlighting -- Better AS1/2 deobfuscator -- [#418] AS3 deobfuscator improved - -### Fixed -- AS call method fix (first parameter is "this") -- [#1047] open all scripts folders -- [#812] decompile fail -- [#1056] deltaY missing when adding a new StraightEdgeRecord -- [#1057] Editing as in editor results in package name moving -- [#991] GUI export -- [#689] Ignore Case not correctly toggled -- [#1060] reversed and/or detection in some cases -- [#1037] isXML call - -## [6.0.2] - 2015-09-12 -### Added -- AS3: Display and direct edit trait Metadata -- Allow to specify tag type on image or shape import -- Convert image tags from commandline -- [#489] Hex decode very large integers -- Add new tags without show empty folders -- Dependent characters in basic tag info -- [#1007] replace bytearray in raw editing -- Italian translation - -### Changed -- AS2 parser - add string to constant pool if there is not enough space -- [#1044] AS2 - order scripts by physical location, name by offset - -### Removed -- Deprecated commandline parameters removed - -### Fixed -- JNA problems on some JDKs -- [#947] Marklevels errors ignored 17a94b7 -- [#953] Mac application permission fix (maybe) -- [#954] IndexOutOfBounds fix -- [#950] AddTrait setting modified fix -- [#945] AS1/2 directeditation fix - member named as global function -- [#957] AS1/2 IndexOutOfBounds fix -- [#956] Invalid jump offsets warning -- [#968] Sprites export with wrong coloring -- [#978] case sensitivity of filenames -- [#955] AS2 decompilation problem -- Image alpha fixes -- [#966] Go to document class -- [#991] scripts exporting -- [#999] save as fla -- [#1000] image export for malformed JPEG3 tags -- [#1017] store alchemy opcodes with wrong order -- [#1030] stack overflow fix - -## [6.0.1] - 2015-07-06 -### Added -- Special §§ instructions marked as red -- [#949] Replace alpha channel from commandline -- AS3 deobfuscation from commandline -- Option to ignore FlashCC/Alchemy packages - -### Changed -- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements - -### Fixed -- AS1/2 deobfuscation fixed -- [#952] Not loading SWF without extension - -## [6.0.0] - 2015-07-04 -### Added -- New AS3 deobfuscation method -- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... -- Allow reload FFDec when no SWF is opened -- [#858] Allow to set compression type in header -- [#905] Show codec details for sound items -- Better alchemy/DomainMemory instruction handling -- Better obfuscated names handling -- [#920] Export instance name to SVG -- [#921] Export html DefineEditText to SVG -- Open multiple files with drag and drop -- Better "multi packs" handling (Alchemy) -- SWF version 29 to flash player 18 mapping -- ImportAssets2 sha1 field -- [#924] Sprites to image from commandline -- AS1/2 direct editation big numbers fix -- Allow to add FILTERs and SHAPERECORDs in generic tag editor -- Enable close all menu when no swf is selected -- Restore modified state even when something goes wrong -- Some old tags added - -### Changed -- AS decompilation highly improved -- Better &&, || handling -- DoABCDefine renamed to DoABC2 -- Separated Sprite export settings - -### Deprecated -- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) - -### Fixed -- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. -- Few menu issues -- [#895] Correct handling CMYK JPEG -- [#884] AS direct edit assignment -- [#899] Show script after AS3 direct editation -- Some AS1/2 parser problems -- [#903] FLA export - fix for missing fontname, lastframe -- [#855] AS3 direct edit - for..in variable declaration fix -- [#850] Constant initialization for same multinames -- [#832] AS3 direct edit - other ABCs resolving fix -- [#904] Cannot export images -- [#910] Missing instructions -- Opening not existent files on restoring last session -- [#922] Edit text leading -- Put image before shape on shape replace -- [#916] Replacing Shape corrupts SWF -- JRE setup parameters fixed -- [#938] Parallel speedup limit fix - -## [5.3.0] - 2015-05-25 -### Added -- Generic tag editor: improved table editing (import/export assets tags, etc.) - -### Changed -- Classic (nonribbon) UI improved - has same items as Ribbon UI -- Icons improvements -- Disabling menu items when work in progress - -### Fixed -- [#897] Classic UI fix - -## [5.2.0] - 2015-05-22 -### Added -- UI8 editbox for swf version in header panel -- Basic tag information panel - -### Changed -- AS1/2: Shown only the constant pool(s) in pcode editor -- Do not allow to chage tag tree selection, when current tag is under editing -- Faster bitmap export -- Using less memory when playing sounds -- Error message changed when the opened file is not swf - -### Fixed -- [#470] panels size after resizing from/to full screen -- [#877] A small glitch after search in AS -- [#878] small glitch after saving P-code or swf file -- [#470] glitch -- [#845] If frame consist 2 DoAction then it imports only first one -- pdf export (when no frame exists) -- text rendering (alpha channel was ignored), -- bmp export (paddings when width%2==1) -- [#883] -dumpSWF option does not work anymore -- [#882] Canvas export border size -- [#760] Internal viewer line linear gradient fill is not working -- [#887] error on export a special swf's P-CODE -- Extensions of exported images fixed - -## [5.1.0] - 2015-05-04 -### Added -- Allow to copy/move multiple tags, and dependencies -- [#842] For reconstruction if debug line info present -- [#841] Loop control for sound preview -- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button -- Scrollbar added to fontpanel -- SWF header editor -- Configure what object types to export in exportdialog - -### Changed -- Better gif exporter -- [#772]: closing loading dialog now cancels the loading of the swf -- [#762] export pcode with different extension - -### Fixed -- CRITICAL: Update System Bug causing updates not working -- [#862] AS3 asm: do not read beyond return/throw instructions -- [#865], [#613]: ribbon prefered width fix -- [#868] export path fix, allow to export buttons -- [#865] TagTree font size problem on high resolution screens -- [#713],[#807] Installer for 4.0+ fails to access Adobe Website -- [#728] Large fonts, [#857] add scroll on DefineFont3 - -## [5.0.2] - 2015-04-18 -### Added -- Reopen last session - -### Fixed -- ffdec.sh file line endings fixed - -## [5.0.1] - 2015-04-18 -### Fixed -- [#860]: Opening bundle (zip, swc, any binary file) files fixed - -## [5.0.0] - 2015-04-18 -### Added -- Color skins -- [#824] Mac OS X package -- [#809] Move left,right buttons for DefineTexts using translatex parameter -- [#805] Editor mode for DefineTexts -- [#825] Hotkeys for next/previous DefineText -- Export/Import symbol classes/export asset tags -- Frame export progress -- [#737] Single file script export -- Displaying changed AS3 scripts in GUI as bold -- Additional character info tags placed under character node -- New icons for other tags (metadata,fileattributes,setbackground,place/remove) -- Metadata tag editor - -### Changed -- Default color skin altered -- [#350] Allow only one running instance (Windows only, can be turned off) -- SWFs in zip based bundles (SWC for example) can be modified & saved -- Performace improvements -- More compact SWF-XML format -- Marking changed parentnodes as bold too - -### Fixed -- [#814] Exporting with scale problem -- [#816] P-code not shown after class initializer trait selection -- [#835] Static initializer improvements -- AS3 direct editing - local register decrement fix -- AS3 direct editing - maintain register order/names -- [#836] AS1/2/3 Correct expression precedence handling -- AS3 preincrement -- [#848] Correct toggling text switches -- [#817] AS1/2 for..in variable declaration -- [#849] Attribute member -- [#852] Ignore case for russian characters -- [#837] AS3 try..finally without catch - -## [4.1.1] - 2015-02-21 -### Added -- Export/Import XML added to ribbon menu -- Few GUI enhancements -- Undo tag changes context menu - -### Changed -- Java 8 now required - -### Removed -- Removed support for Java below 8 - -### Fixed -- [#811] export ActionScript - -## [4.1.0] - 2015-02-18 -### Added -- XML export/import -- confirmation dialogs added -- Add support for non-standard ABC-compressed SWF file -- [#745] Copy tag to another SWF -- [#803] Align text in DefineText - -### Changed -- performance improvements -- [#758] Zoom to fit is dynamic - -### Fixed -- [#738] Frame export -- [#742] Can't edit frames -- [#747] Move tag to adds extra frame -- [#749] Internal viewer Sprite fill color -- [#752] Sound is not stopped -- [#753] Reload swf -- [#759] Decompilation § symbol -- [#766] Can't extract all resources -- [#768] Super calls not being correctly recognized -- [#773] Scripts associated with ClipActions are not shown -- [#776] Stop working after setting "number of threads" to 0 -- [#783] No OK box when edited script or text was saved -- [#785] Text search. Remember last choise, Unicode case insensitive search -- [#787] Search in AS bug (when navigating to searched results) -- [#788] Add DefineCompactedFont Tag to gfx file -- [#790] Impossible to change letters under a font -- [#794] Font extraction fails sometimes -- [#798] Close file streams after export, exporting progress -- [#800] Unexpected deleted carrier return in DefineEditText -- Build fix on Linux -- Fis Startup Script for OpenJDK -- Other minor fixes - -## [4.0.5] - 2014-12-01 -### Added -- Escape control characters in strings, identifier names -- [#676] import text error messages / logging enhancement -- [#734] \xAB escapes, \uABCD escapes -- [#687] AS3 - allowing p-code comments on separate line -- [#709] Text Export to Single File with custom filename - -### Fixed -- [#732] Random freezing - JavactiveX library updated. -- [#730] Not working without ActiveX fix on Windows -- [#735] Automatic deobfuscation not correctly switched (required restart) - -## [4.0.4] - 2014-11-23 -### Changed -- better file cache, removing unneccessary temp files - -### Fixed -- obfuscated identifiers - -## [4.0.3] - 2014-11-23 -### Added -- [#722] Go to next/previous frame -- BMP file format export (images,frames,shapes) and import(images) - -### Fixed -- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type -- [#715] namespace resolving fix -- [#635],[#726] placing cursor inside Unicode characters - -## [4.0.2] - 2014-11-22 -### Added -- show frame number during play -- flashplayer - show controls for DefineSprite -- goto frame -- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design - -### Changed -- [#720]: edited shape tag is not marked as modified after replacing -- reorganized about dialog - -### Fixed -- [#719] null swf name in Proxy after cancelling rename dialog -- flashplayer - font display -- [#723]: saving swf with invalid referenced characters -- DefineCompactedFont paging -- [#288] Less memory usage during FLA export -- Corrected syntax hilighting for AS3 P-code - -## [4.0.1] - 2014-11-12 -### Fixed -- [#713] Installer can continue when no file can be downloaded -- Fixed shapes -- Checking for updates moved to separate thread - -## [4.0.0] - 2014-11-11 -### Added -- [#677] Zoom level in export settings -- internal viewer: linear/srgb gradients -- zooming buttons for flashplayer/internal viewer -- stroke scaling modes for canvas export -- create snapshot button -- [#389] Selecting font face on import -- [#701] Importing font from TTF file -- Reorganized font panel -- [#707] Debugger for logging messages -- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets -- [#685] Getting local register names from debug info can be disabled -- Adding new tags -- [#698] Allowing unicode letters in identifiers -- [#710] Information about deobfuscation in error comments -- One EXE for 32/64 bit, uses percentage memory. -- EXE SplashScreen -- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc -- Config setting to load inner SWFs automatically -- Replace shape with image - -### Changed -- better FlashPlayer integration using JavactiveX library -- Faster building tag tree -- Faster timeline construction -- [#711] Improved folder view - faster and with correct context menu - -### Fixed -- AS2 deobfuscation fixes -- AS2 loops fix -- [#681] Linux script fixes -- AS2 constructor name fix -- [#688] AS3 direct edit fixes -- [#691] AS3 p-code reading/saving fix -- AS3 direct edit -submethod name resolve fix -- frames to html canvas fix -- [#524] Mask layer not applied when nonempty script layer -- [#663] AS3 imports fixes -- Font export of dot character -- Font panel Yes button fixed -- [#702] GFX font reading fix -- Better obfuscated names handling -- [#539] for(each) in declaration fixes - -## [3.0.0] - 2014-09-20 -### Added -- Separated GUI (GPL) and library (now LGPL) -- Editing obfuscated identifiers via new paragraph(§) syntax -- Timeline View with preview and object hilighting -- Show GFX data in dump view -- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline -- Dump view - selecting node -- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption - -### Removed -- Removed deprecated commandline export formats (see --help) - -### Fixed -- FileAttributes tag reading fix -- [#649] GFX reading fixed -- [#656] Search in memory - 64 bit processes fix -- [#661] scripts not showing -- [#664] expanding fillStyles in raw edit -- [#668] add missing character fix, text tags fix -- [#674] texts hilighting initialization fix -- [#675] AS1/2 and/or operator compilation -- [#632] Locking file after opening (cannot save, etc.) -- [#651] Unnecessary removing expression killed in unreachable part -- [#678] Windows batch file paths fixed -- [#672] Disabling transparency slider on RGB only selection -- [#684] Sound streams inside DefineSprites, soundstream handling - -## [2.1.4] - 2014-08-23 -### Added -- AS1/2: New method for deobfuscation (can be switched off in settings) -- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters - -### Fixed -- [#647] Skipping FileAttributesTag with Parallel speedup on -- [#648] Export from embedded SWF - -## [2.1.3] - 2014-08-18 -### Added -- Show "save" and "saveas" in application menu -- Saving data range in dump view -- Show actions, abcdata in dumpview (context menu on the tree node) -- [#612] show color in hex format - -### Changed -- Faster dump info collecting (less memory) -- Allow selecting multiple files in open file dialog - -### Fixed -- [#623] ffdec.sh UNIX file endings, executable -- [#624] search in embedded swf files -- [#632] AS1/2 Unnecessary GetVariable before NewObject -- [#627] filter swf not working -- LZMA saving -- Export pcode&hex from commandline -- [#640] text import fixed, ignore BOM - -## [2.1.2] - 2014-07-20 -### Added -- Dump view -- Context menu: Jump to character, raw edit all tags -- Catalan translation -- SWF header display - -### Fixed -- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes -- [#592] AS3 Multiname resolving in P-code causing different bytecode -- [#585] AS3 moving popped values to output -- [#578] Always on top fixed on search results -- [#501] GotoFrame2 fix -- [#616] Frames to PNG export -- Export context menu -- [#559] Bitmap export opacity -- [#401] Placeobject 3/4 fix -- [#593] Return object newline -- [#594] Setting for curly brace - -## [2.1.1] - 2014-06-05 -### Added -- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers -- AS1/2 direct edit - global functions improvements -- AS1/2 negate operator, unary minus operator -- Opening SWFs in BinaryData tags -- AS1: Old string operators support, and/or, <> operator (editation) -- Statusbar loading animation improved -- [#579] AS3 direct editation - removing old class/methods from ABC -- remove character without the dependencies (remove only the place/remove tags) -- Running on system with no home directory -- [#428] PDF export (as images only) -- Commandline FlashPaper to PDF export -- Select frames / Characters commandline options - -### Changed -- [#337] quickfind visibility improved -- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) - -### Fixed -- [#576] AS1/2 direct editation: DefineFunction2 fix -- AS1/2 property fix -- AS1/2 typeof operator fix -- [#250] line spacing fix -- PlaceObject 3-4 className -- [#579] AS3 direct editation bugfixes - property resolving, integer values -- Morphshape canvas export fix -- Canvas export fix - closing path -- [#580] Rename invalid identifiers commandline fix -- [#510] JSyntaxPane find and replace dialog wrap around fix -- No more frame caching during export => memory saving (like [#583]) -- [#586] DropShadow filter fix -- Canvas export colortransform fix - -## [2.1.0 update 2] - 2014-05-08 -### Added -- AS3 decompilation/editation: Vector initializers -- AS3 direct editation: more classes in one file - -### Fixed -- [#574] DefineSprite editing fix -- Various AS3 direct editation fixes - -## [2.1.0 update 1] - 2014-05-05 -### Added -- Portugese-brasilian translation - -### Changed -- HTML Canvas export improvements - -### Fixed -- Various AS3 direct editation bugs, like [#570] - -## [2.1.0] - 2014-05-01 -### Added -- AS3 direct editation (Experimental!) -- Frames SVG Export -- Shape/MorphShape/Frames HTML 5 Canvas Export -- [#559] morphshapes as animated SVG -- [#563] Single file text export/import -- Font WOFF export -- Advanced settings dialog with tabs, config names, descriptions - -### Fixed -- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments -- Internal viewer: Filters fix - -## [2.0.1 update 2] - 2014-04-05 -### Fixed -- [#557] AS3 null namespace fix - p-code not working - -## [2.0.1 update 1] - 2014-04-04 -### Fixed -- [#556] Goto main class on startup fix -- [#557] Nullpointer fix (private namespaces) - -## [2.0.1] - 2014-04-03 -### Added -- Thumbnail view -- Font TTF export -- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) -- Expand all context menu -- Internal viewer: Button mouse move and click handling -- Playing sounds without flash player -- Internal viewer: Sounds on stage -- All sounds to WAV export -- Internal viewer: Showing texts, dynamic text border/fill -- [#504]: Unicode characters in JSyntaxPane -- Internal viewer: showing object under cursor -- Folder icons -- Sound/Image format on command line. -- Removing placeobject tags -- Removing frames -- AS: "elseif" statements -- Code formatting: space before parenthesis - -### Changed -- Single frames animated. - -### Fixed -- [#529] limit the number of displayed binaryData bytes -- [#538] Interface are sometimes dynamic -- [#537] super is sometime preceded by a dot -- [#540] Saving SWF changes very large static uint values -- [#387] Frames preview bugged -- AS:loop mismatch fix on parallel speedup -- [#552] Some timeout exceptions -- [#494] Fixed nightly builds updates - -## [2.0.0] - 2014-03-02 -### Added -- Generic tag tree editor -- Timeline view (stub only) -- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) -- [#513]: command line option to extract swf from binary file -- Configurable code formatting (Indentation + brace position) -- [#262] Export FLA: Font character ranges export -- Configurable checking for updates - -### Changed -- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes -- Improved commandline usage -- Automatic deobfuscation default value set to False (See News on webpages) -- Check for updates can be configured to inform about Nightly builds aswell - -### Deprecated -- Some commandline options are now deprecated, see --help - -### Fixed -- [#499] Cannot save via Proxy fixed -- [#504] font name reading fixed -- [#508] Support for OS without GUI -- [#305] Export FLA: empty sound layers -- [#312] Export FLA: Improved Shape/MorphShape fix -- [#503] Export FLA: Smoothing invalid shapes -- [#401] Invalid GFX tags in non GFX files -- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues -- [#361] FFDec icon is not visible on application start -- [#392] Video stream data fix -- [#516] AS3 P-code editor - Null name namespace handling - -## [1.8.1 update 1] - 2014-02-02 -### Fixed -- [#495] font embedding fix -- [#496] date format in new version dialog -- cosmetic changes - -## [1.8.1] - 2014-01-30 -### Added -- [#299] replace DefineBits images -- [#303] open folder with exported FLA -- [#324],[#346] SWC/zip/other binary file support -- [#371] detailed logging -- [#426] command line switch to rename identifiers -- [#457] clear recent opened files list -- [#458] save selected system font for swf fonts -- [#460] text editor: do not scroll to the end automatically -- [#462] font embedding dialog: show more sample characters -- [#463] global search in texts -- [#465] make font properties editable -- [#466] font preview - -### Changed -- [#369] new SVG and preview image rendering -- [#390] refresh font list without reloading the application -- [#453] update texts aftert adding new character to a font tag -- [#459] remember text panel splitter position -- [#461] font panel gui redesigned - -### Fixed -- [#451] dialog windows are not on the center of the screen -- [#454] Text syntax highlighting -- [#455],[#465] classic interface issues -- [#474] changeing language only available one time -- [#477] log window localization -- [#481] SVG export fix -- [#484] Oversized advance value after editing DefineText with DefineFont2 font -- [#493] missing search results - -## [1.8.0 update 1] - 2013-12-27 -### Added -- [#453] refresh (edit+save action) all texts button - -### Fixed -- Flash panel and font panel fixed - -## [1.8.0] - 2013-12-27 -### Added -- [#350] Allow to open multiple SWFs -- [#365] Filter fake SWFs during memory search -- [#366] Allow to sort the result list in memory search window -- [#429] Auto rename invalid identifiers setting -- [#447] Non-ribbon interface - -### Fixed -- [#354] Infinite decompilation fixed -- [#438] Case sensitive Command line arguments fixed -- [#436] Saving actionscript fixed -- [#446] Precedence issue fixed -- [#451] Dialogue window positions on a multi-monitor configuration fixed - -## [1.7.4 update 1] - 2013-12-05 -### Added -- [#426] Command line parameter for renaming invalid identifiers - -### Fixed -- [#427] Exception on linux fixed -- [#405], [#420], [#421] Some decompilation issues fixed -- [#430] Configuration default value problem fixed -- [#397], [#431] Deobfuscation stucked sometimes problem fixed - -## [1.7.4] - 2013-11-10 -### Added -- [#169] hexedit method body bytes -- [#335] last opened files -- [#404] Exporting P-code and Hex + console parameters -- [#407] register name is configurable -- Advanced settings -- Cancellable decompiling, exporting and searching - -### Fixed -- [#399], [#400] performance optimizations - -## [1.7.3 update 2] - 2013-09-29 -### Fixed -- [#398] AS3 p-code values with index 0 (null) - -## [1.7.3 update 1] - 2013-09-28 -### Added -- [#382] AS3: Adding new method - -## [1.7.3] - 2013-09-27 -### Added -- AS3: Multiname and namespace editing. -- [#382],[#396] AS3: Adding new trait (method/slot/const) -- AS3: Highlighting pair parenthesis/bracket -- AS3: Editing various new P-code parameters -- AS3: Highligting of trait names/types/parameters -- AS3: Global rename identifier for traits -- [#357] Playback controls for DefineSound -- [#391] AS3: Native methods mark -- [#395] Support for GFx ScaleForm SWFs (with fonts editing) -- Displaying fonts in internal viewer -- [#334], [#395] New Embed font dialog - selecting character ranges with preview -- Replacing characters in font (Yes/No to all dialog) - -### Changed -- AS3: New p-code syntax inspired by RABCDasm -- AS3: Editing whole trait in one textarea -- AS3: Removed messages about adding new constants -- AS3: Modified colors in editor -- [#301] Clearing error log causes icon to reset - -## [1.7.2 update 2] - 2013-09-13 -### Changed -- Updated translations - -### Fixed -- [#383] Firefox browser cache handling -- [#386] SWF resizing - -## [1.7.2 update 1] - 2013-09-11 -### Changed -- updated translations - -### Fixed -- [#383] Fixed cache loading when Firefox not used - -## [1.7.2] - 2013-09-11 -### Added -- [#357] Sounds Preview (Windows only) -- Movies preview (Windows only) -- Whole SWF display -- Preview controls (Play,Pause,Stop) -- Search SWFs in browsers cache (Firefox, Chrome) -- [#367] Memory search: Save selected files to disk -- Portugese translation - -### Changed -- [#380] Faster displaying DefineBitsLossless(2) images - -### Fixed -- [#292] Background color for Fonts preview fixed -- [#375] Replacing DefineBitsLossless image tag -- [#378] Refreshing language of JSyntaxPane -- MORPHGRADIENT reading fix - -## [1.7.1] - 2013-08-25 -### Added -- Loading SWFs from other processes memory (Windows only, sorry) -- [#325] Spanish translation -- [#210] Ukrainian and Dutch translation -- [#355] Chinese translation -- [#292] Change background color in SWF preview -- [#301] Clear errors log button -- [#313] Command line parameter for ignore all errors -- [#330] Protection agains adding same characters -- [#332] AS1/2 Showing elapsed times during commandline export -- [#344] Reload opened SWF -- Decompilation timeouts - -### Fixed -- [#295] Export FLA: wrong font -- [#297] Too bright titlebar button colors -- [#307] Export FLA: fixed empty textfields -- [#309] Export FLA: static text letter spacing detection -- [#310] Export FLA: Strokes -- [#311] Export FLA: BitmapFill -- [#327] AS1/2 Disassembly error stop application -- [#328] Fixed replacing images in DefineBitsJPEGX -- [#333] AS1/2 action reading -- [#336] Graph window is too small -- [#337] Quick search panel barely visible in same cases -- [#338] Expand/collapse icon in errorlog - -## [1.7.0 update 1] - 2013-08-11 -### Added -- [#315] German translation (partial) - -### Fixed -- [#123] Better context menu integration -- [#243],[#326] Better deobfuscation -- [#287] Typo in parallelSpeedUp parameter -- [#290],[#291] improved select language dialog -- [#294] minor GUI fixes -- [#298] Progressbar positition issues -- [#296] better export directory remembering -- [#314] Better deobfuscating filenames -- [#316] Readonly editor panes accepted Ctrl+Z/Y -- [#318] Export FLA: Shapes export fix -- [#319] AS3: Improved try..catch..finally decompilation -- [#323] AS3: Fixed default switch part - -## [1.7.0] - 2013-08-03 -### Added -- Listing contributors on about page -- [#223] AS2: Detecting uninitialized class fields -- [#250] Export FLA: Detecting static fields margin and spacing -- [#261] Export FLA: AS1/2 Frame scripts on first layer -- [#269] Commandline parameters for switching configuration -- [#274] AS3 Displaying elapsed time during commandline export -- [#275] AS3 Removing returnvoid as last statement - -### Changed -- New GUI based on Substance look and feel -- Menu changed to ribbon panel -- New round icon -- [#258] AS1/2: Improved chained assignments -- [#267] Starting program without choosing a file -- [#286] Saving to temp file first - -### Fixed -- [#123] Improved context menu integration on Windows -- [#233] Globally rename identifier deselects item in the tree -- [#235] Export FLA: Dynamic text fields coordinates -- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation -- [#251] Export FLA: Fixed filter strength rounding -- [#257] Export FLA: Text field color and size issues -- [#259] Fixed images alpha -- [#260] Export FLA: Labels position -- [#268] AS1/2 Function parameter shown as register instead loc -- [#272] AS3 Class initializer editation fix -- [#276] Fixed anonymous/inline functions handling -- [#220] Improved editing fonts / texts -- [#284],... other small fixes - -## [1.6.7] - 2013-07-20 -### Added -- [#220] Selection of font to import characters from -- [#232] Automatically add .swf extension in saveas dialog -- [#253] Abort/Retry/Ignore dialog on errors with file saving - -### Changed -- Improved translations - -### Fixed -- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation -- [#203] AS1/2 improved direct editing -- [#220] Adding characters to font fix -- [#225] AS1/2 object literal without name quotes -- [#236] AS1/2 Rename invalid identifiers issues -- [#245] AS3 Double space around "as" keyword -- [#247] AS3 Scrolling to main class at startup -- [#248] Memory issues (slowdown) -- [#254] Expressions as commands -- [#255] Windows 7 loading issues -- [#256] AS3 Object literal in return clause -- SWF text parsing (new lines) -- Labels size by locales - -## [1.6.6 update 2] - 2013-07-16 -### Fixed -- [#241] Program could not be started - -## [1.6.6 update 1] - 2013-07-16 -### Changed -- Better localization support - -### Fixed -- [#238],[#239],[#240] Fixed deobfuscation related problems -- [#237] Parentheses in AS1/2 add,subtract - -## [1.6.6] - 2013-07-16 -### Added -- [#217] Russian translation (focus) -- [#219] Hungarian translation (honfika) -- [#224] Swedish translation (Capasha) -- [#220] Adding characters to Fonts, displaying font info -- [#121] Search progress indication -- Error log - -### Changed -- [#203] Improved direct editing of AS1/2 -- [#207] Update SWF preview after switching external/internal flash player - -### Fixed -- [#151] Memory caching -- [#171] Skipping invalid AS3 code - newobject, newarray -- [#206] AS3 switch problem -- [#208] Renaming anonymous functions -- [#209],[#229] FLA export texts positions -- [#213],[#221] other decompilation issues -- [#225] AS object literal broken with ternar operator -- [#226] onClip indentation in FLA export -- [#227] gotoAndStop wrong frame index -- [#230] FLA export missing strokes -- Shapes viewer - missing strokes - -## [1.6.5 update 1] - 2013-07-09 -### Fixed -- [#151] Fixed caching in memory -- [#172] AS1/2 constant detection fix -- [#174] Renaming SymbolClass fix -- [#175],[#212] Fixed create directory issues on export -- [#185],[#186] on-clip actions indentation -- [#197] AS1/2 Missing storeregister before switch -- [#216] AS2 Fixed field order -- [#213] AS2 Fixed var fields quotes, switch nullpointer - -## [1.6.5] - 2013-07-08 -### Added -- Multilanguage support (currently English and Czech) -- [#151] Option for caching in memory instead of files -- [#168] Export selection in tree context menu -- [#176] option to show main class on startup -- [#177] saving window maximized state -- [#202] Removing tags other than DefineSprite - -### Changed -- [#173],[#190] Better renaming -- [#129], [#153] Better deobfuscation -- [#180] better error handling -- [#185],[#186] better displaying and exporting onclip actions - -### Fixed -- [#123] Better context menu integration -- [#136] FLA export - text sizes -- [#137],[#179] foreach issues (hasNext) -- [#144] Plain text export - empty line fix -- [#144] Not displaying texts -- [#164] DefineMorphShape issues -- [#167] Sprite tag appearing twice in export filename -- [#170] AS3 Try in loop -- [#172] loop detection fix -- [#175] use empty namespace -- [#178] AS subtract with negate -- [#181] AS3 missing quotes in object field -- [#182] missing namespace imports -- [#183] wrong stage size -- [#184] wrong video link -- [#189] Fixed three dots in tree -- [#191] Focalgradient fill fix -- [#195] AS2 issues -- [#196],[#197] switch issues -- [#198] DefineFont2 empty check -- [#200] DefineBitsLossLess fix -- [#201] Nonworking main window in Linux/MacOS (due toAssociation) - -## [1.6.4 update 1] - 2013-06-30 -### Fixed -- [#166] For loops detection -- [#165] AS3:direct lookupswitch support - -## [1.6.4] - 2013-06-30 -### Added -- [#63] Globally rename identifier -- [#67] Deobfuscation - rename identifiers according to type -- [#117] Drag & Drop SWF file to main window opens it -- [#123] Context menu integration on Windows -- [#127] Drag & Drop items from tree outside of application -- [#134] AS3: Find document class -- [#144] New lines in plain text export -- [#155] Remembering window size + splitbar positions between runs - -### Changed -- [#142] Using exportassets tag for tag names -- [#146] Display AS2 classes as tree of packages -- Better loop detection - -### Fixed -- [#129] AS1/2: not refreshing decompiled after rename -- [#130] Renaming SymbolClass identifiers too -- [#132] Renaming identifiers renamed strings -- [#136] Invalid text positions in FLA export -- [#145] Unicode support -- [#147] Escape filenames during obfuscated AS3 export -- [#148] Better package vs classname handling -- [#152] Empty if branches not inverted -- [#156] Better search handling (not freezing) -- [#157] AS3: Try statements in loops -- [#158] Graph repaint problem -- [#159] AS3: Improper rest parameter handling -- [#160] Commandline binaryData export -- [#162] DefineBitsJPEG2 image replacing -- [#163] Closing SWF file after loading -- other minor fixes - -## [1.6.3 update 2] - 2013-06-21 -### Changed -- [#149] Ifs with empty onTrue branches now inverted - -### Fixed -- [#150] Long line restriction removed - -## [1.6.3 update 1] - 2013-06-21 -### Fixed -- Memory limit decreased - FFDec was not working on 32 bit JVM. - -## [1.6.3] - 2013-06-20 -### Changed -- Parallel SpeedUp can be disabled in menu -- Better loop detection - -### Fixed -- [#119] Replacements file not found issue -- [#101] AS1/2 postincrement fix -- [#114],[#116],[#135],[#141] Fixed loop detection -- [#102] Fixed loop highlighting in export -- [#124] Flash player file path detection -- [#128] Improved imports -- [#135] CommentItem fix -- [#129],[#131] Better deobfuscation -- [#104] AS3 inc/dec local deobfuscation fix -- [#113],[#133],[#140] Memory limit increased - -## [1.6.2] - 2013-06-09 -### Added -- New loop detection algorithm - -### Changed -- [#108] - Faster loading and decompiling (Parallelism) -- Improved Internal flash viewer - shapes and morphshapes - -### Fixed -- Ternar operator fix -- [#102] Fixed Shapes to FLA export -- AS1/2 class detection fix -- [#105],[#104],[#101] fixed via new loop detection - -## [1.6.1] - 2013-06-03 -### Added -- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) -- [#109], [#106], [#107] some code improvements - -### Changed -- Application needs Java 1.7 to run - -### Removed -- Support for Java before 1.7 - -### Fixed -- [#102], [#110] AS3: Class highlight fix -- [#103] AS3:Fixed setslot handling -- [#104] AS3:Inc/Declocal nullpointer fix -- [#104] Multiple conditions in loop fix -- [#111] AS3:Object literal truncates line -- [#105] Better do while..break handling -- loop fixes - -## [1.6.0 update 1] - 2013-05-25 -### Added -- better FLA export - -### Fixed -- Many FLA export related bugs (like [#96]) -- [#98] Empty initializers do not cause empty lines now -- [#99] small logging issues -- [#100] large obfuscated code support - -## [1.6.0] - 2013-05-20 -### Added -- Export to FLA (Experimental BETA!) -- [#85] Search text in all ActionScripts -- SWF 11 support - -### Fixed -- [#79] ActionStartDrag constraint fix -- [#92] Inversed GreaterThan/LessThan -- [#93] AS1/2 fixed switch detection -- [#94] AS1/2 ActionTry - register cast fix -- [#95] Better script end handling - -## [1.5.2] - 2013-05-05 -### Added -- Improved automatic update system (changes log). -- Handling script traits as separate objects. -- [#86] open/save file dialog now accepts absolute paths in quotes - -### Fixed -- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 -- [#88] Fixed graph building -- [#89] AS3: bracket in property name lead to missing dot -- [#82] printgraph issue - -## [1.5.1 update 1] - 2013-05-04 -### Added -- Exporting texts via commandline -- Exporting all via commandline - -### Fixed -- DefineText2 color parameter -- AS3 GetSlot,SetSlot -- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... -- [#83] Fixed images transparency (zlib fix) -- Fixed graphparts with only jump in it (obfuscators) -- MORPHGRADIENT FIX -- Trasparency in DefineBitsJPEG3 and 4 -- Displaying shapes,morphshapes and sprites with bitmaps - -## [1.5.1] - 2013-05-01 -### Added -- Support for larger switches (10+cases) -- Editing text tags -- [#65] Exporting text tags -- Removing sprites -- Replacing images - -### Fixed -- DefineMorphShape2 fix -- [#79] - AS1/2 class detection fix, wrong printgraph fix -- [#78] - script trait slots fix - -## [1.5.0 update 1] - 2013-04-21 -### Fixed -- Automatic deobfuscation config defaulted to Off for AS1/2. - -## [1.5.0] - 2013-04-20 -### Added -- Direct editing of ActionScript 1/2 code (Beta) -- AS1/2: ifFrameLoaded support -- Automatic deobfuscation can be disabled in the menu -- [#48] - Decompile only specified class (commandline option) -- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices -- [#66] - Decompressing LZMA via commandline -- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) -- [#69] - DoABC vs DoABCDefine tags decompilation -- [#75] - Comma separator in while/do..while conditions, better if..return handling -- AS1/2: parsing NaN,Infinity value (Fix for [#73]) - -### Changed -- New icons (edit/save/cancel and main menu) - -### Fixed -- [#62] - Errors on not defined character tags (import tag) -- [#72] - First ternary operator expression was always true -- Fixed many deobfuscation related bugs - -## [1.4.3 update 2] - 2013-04-10 -### Fixed -- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) -- Try to fix lib/FlashPlayer.exe issue - -## [1.4.3 update 1] - 2013-04-06 -### Fixed -- [#38] - Indentation in const/var initializers, missing semicolon -- [#56] - Test output left in last release -- [#57] - Unknown instructions now do not log an exception (obfuscators do this) -- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. -- AS3 loops fix -- While true fix - -## [1.4.3] - 2013-04-04 -### Added -- AS1/2 Better deobfuscation - -### Fixed -- [#45] - Unicode characters fix -- [#50] - AS1/2 Function body deobfuscation fix -- [#51] - Displaying java class names instead of expressions -- [#52] - AS1/2 Better constantpool detection (deobfuscation) -- [#38] - AS3 indentation in initialized const/var value for newobject -- Fixed ImportAssets2 tag id - -## [1.4.2 update 1] - 2013-03-25 -### Fixed -- [#47] - wrong AS3 deobfuscation -- AS3 deobfuscation issues -- AS3 switch - -## [1.4.2] - 2013-03-24 -### Added -- [#42] - Displaying code as hex -- AS1/2: Renaming identifiers (deobfuscation) -- AS1/2,AS3: Better deobfuscation -- Storing configuration to user home -- Installer for Windows systems - -### Changed -- Graph button changed to icon. - -### Fixed -- [#39] - AS1/2 NewMethod..Pop fix -- [#40] - No logging + For..in..return decompilation -- [#44] - DefineFont2 fix -- [#36] - Multiname with invalid index -- [#43] - Ternary operator and more -- [#46] - Ifs with empty branches got ignored -- [#3] - Ignoring unknown opcodes -- Logging exceptions during export - -## [1.4.1] - 2013-03-10 -### Added -- Exporting sounds -- Better AS1/2 deobfuscation (disassembly & decompilation) - -### Fixed -- Exporting only first 1000 frames of the movie -- Decompiled code was not refreshed on AS1/2 changes -- Application no longer creates empty directories on export - -## [1.4.0 update 1] - 2013-03-04 -### Fixed -- [#37] - AS3: Reversed loop conditions - -## [1.4.0] - 2013-03-03 -### Added -- AS3: ignoring return void at the end of methods -- New icons - Silk icons -- AS3: Traits list sort button -- Better Graph display -- Frames view -- Exporting of movies (No audio) -- Some AS3 related Tests -- Homepage & Donate link in the menu - -### Changed -- Tree view instead of tabs -- AS1/2 and AS3 now share same decompiling method. - -### Fixed -- [#34] - Reversed loop conditions -- [#35] - Fixed unicode strings (Japanese) - -## [1.3.1] - 2013-02-23 -### Changed -- Flash player no longer uses SWT library - -### Fixed -- [#32] - AS2: Action255 bug -- [#31] - Erorrneous tags are now ignored -- DefineBitsLossLess 1&2 on 8bit colormapped images - -## [1.3.0] - 2013-02-17 -### Added -- Decompilation is more resistant to obfuscation -- Shapes SVG export -- AS2: Decompiling classes & interfaces -- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) -- AS3: Deobfuscation menu -- Graph button for displaying code flow Graph - -### Changed -- Complete new decompiling method in both AS1/2 and AS3 -- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". -- To edit source, Edit button must be pressed first (Due to click&go feature) - -### Fixed -- AS3: Method info editor fixed -- Edittext & Button displaying - -## [1.2.0] - 2013-01-19 -### Added -- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). -- Images display and export -- AS2: Exporting selection -- Progressbar during loading - -### Changed -- One merged window for AS1/2 and 3. -- Updated icons - -### Fixed -- AS3: xml attrib, switch in anonymous function (in AS2 too) - -## [1.1.0] - 2013-01-02 -### Added -- Checking for updates -- AS2: Exporting -- AS3: Decompiling whole scripts instead of just classes -- AS3: Exporting selected scripts -- AS3: Script search bar -- AS3: List of DoABCTags now has default "- all -" item -- AS3: Better imports, use namespaces -- AS3: XML related instructions -- AS3: Anonymous functions with names -- AS3: Better initialization of const values -- Logging exceptions to log.txt file - -### Fixed -- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops - -## [1.0.1] - 2012-12-26 -### Added -- AS3: Runtime namespace resolving -- AS3: Arguments variable -- AS3: Better recognizing Pre/Post Increments/Decrements -- AS3: Better declarations - -### Fixed -- AS3: Fixed static variables - -## [1.0.0] - 2012-12-24 -### Added -- Support for LZMA compressed files -- AS3: Detecting local register types for declaration. -- AS3: Displaying inline functions -- AS3: Last save/open dir is remembered -- AS3: Better usage detection for multinames -- AS3: Commandline arguments for exporting -- AS3: Better chained assignments -- AS2: FSCommand2 instruction support -- Proxy: Mimetype application/octet-stream added -- Added executable for Windows users. - -### Changed -- AS3: GUI - Constants tab moved to the top -- AS3: Deobfuscation is now optional, can be accessed via menu - -### Fixed -- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) -- Other minor fixes - -## [beta 1] - 2011-07-30 -### Added -- AS3: Automatic computing method body parameters (EXPERIMENTAL) -- AS3: Editing return type of methods -- AS3: Editing type and default value for variables/constants (Slot/Const traits) -- AS1/2: Few enhancements -- About dialog - -### Changed -- Gui: Updated Icons - -### Fixed -- AS 1/2: Fixed large bug causing Ifs to not decompile properly -- Proxy: Some minor fixes - -## [alpha 10] - 2011-07-13 -### Added -- AS3:Highlighting actual line -- AS3:Completing instruction names via Ctrl+Space -- AS3:Editing method parameters, method body parameters via tab panel -- AS3:ByteCode minor_version 17 supported - decimal datatypes -- AS3:Local variables and method parameters take name from debug information if present -- AS3:Automatic renaming of classes/methods when obfuscated names -- AS3:Better error messages (When cannot decompile obfuscated code) - -### Fixed -- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) -- AS3:Hilighting fixes -- AS3:Fixed decrement/increment statements decompilation -- AS3:Decompiler now adds variable declarations on the beginning of decompiled method -- AS3:Try/catch statements fixed when debug information present -- AS3:Fixed for each statements -- AS3:Other minor fixes - -## [alpha 9] - 2011-07-02 -### Added -- AS3: Added disassembling of some new types of instructions -- AS3: Exporting source as PCode - -### Fixed -- AS3: Many other bugfixes... - -## [alpha 8] - 2010-09-19 -### Added -- AS3: Editing exceptions -- AS3: Finding usage of multinames from constant table - -### Changed -- AS1/2: Better GUI -- AS1/2: Better decompiling of Ifs, For..in - -## [alpha 7] - 2010-09-04 -### Added -- Initial public release - -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev -[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 -[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 -[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 -[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 -[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 -[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 -[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 -[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 -[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 -[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 -[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 -[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 -[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 -[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 -[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 -[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 -[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 -[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 -[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 -[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 -[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 -[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 -[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 -[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 -[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 -[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 -[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 -[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 -[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 -[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 -[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 -[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 -[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 -[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 -[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 -[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 -[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 -[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 -[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 -[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 -[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 -[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 -[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 -[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 -[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 -[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 -[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 -[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 -[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 -[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 -[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 -[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 -[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 -[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 -[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 -[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 -[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 -[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 -[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 -[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 -[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 -[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 -[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 -[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 -[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 -[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 -[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 -[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 -[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 -[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 -[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 -[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 -[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 -[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 -[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 -[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 -[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 -[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 -[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 -[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 -[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 -[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 -[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 -[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 -[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 -[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 -[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 -[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 -[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 -[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 -[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 -[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 -[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 -[#1156]: https://www.free-decompiler.com/flash/issues/1156 -[#1171]: https://www.free-decompiler.com/flash/issues/1171 -[#1170]: https://www.free-decompiler.com/flash/issues/1170 -[#1241]: https://www.free-decompiler.com/flash/issues/1241 -[#1162]: https://www.free-decompiler.com/flash/issues/1162 -[#1199]: https://www.free-decompiler.com/flash/issues/1199 -[#1151]: https://www.free-decompiler.com/flash/issues/1151 -[#1128]: https://www.free-decompiler.com/flash/issues/1128 -[#1163]: https://www.free-decompiler.com/flash/issues/1163 -[#1172]: https://www.free-decompiler.com/flash/issues/1172 -[#1174]: https://www.free-decompiler.com/flash/issues/1174 -[#1183]: https://www.free-decompiler.com/flash/issues/1183 -[#1193]: https://www.free-decompiler.com/flash/issues/1193 -[#1200]: https://www.free-decompiler.com/flash/issues/1200 -[#1198]: https://www.free-decompiler.com/flash/issues/1198 -[#1205]: https://www.free-decompiler.com/flash/issues/1205 -[#1194]: https://www.free-decompiler.com/flash/issues/1194 -[#1210]: https://www.free-decompiler.com/flash/issues/1210 -[#1217]: https://www.free-decompiler.com/flash/issues/1217 -[#1244]: https://www.free-decompiler.com/flash/issues/1244 -[#1247]: https://www.free-decompiler.com/flash/issues/1247 -[#1236]: https://www.free-decompiler.com/flash/issues/1236 -[#1251]: https://www.free-decompiler.com/flash/issues/1251 -[#1265]: https://www.free-decompiler.com/flash/issues/1265 -[#1268]: https://www.free-decompiler.com/flash/issues/1268 -[#1161]: https://www.free-decompiler.com/flash/issues/1161 -[#1118]: https://www.free-decompiler.com/flash/issues/1118 -[#409]: https://www.free-decompiler.com/flash/issues/409 -[#1132]: https://www.free-decompiler.com/flash/issues/1132 -[#1134]: https://www.free-decompiler.com/flash/issues/1134 -[#1121]: https://www.free-decompiler.com/flash/issues/1121 -[#1052]: https://www.free-decompiler.com/flash/issues/1052 -[#1145]: https://www.free-decompiler.com/flash/issues/1145 -[#758]: https://www.free-decompiler.com/flash/issues/758 -[#1096]: https://www.free-decompiler.com/flash/issues/1096 -[#1104]: https://www.free-decompiler.com/flash/issues/1104 -[#1107]: https://www.free-decompiler.com/flash/issues/1107 -[#1106]: https://www.free-decompiler.com/flash/issues/1106 -[#1113]: https://www.free-decompiler.com/flash/issues/1113 -[#1075]: https://www.free-decompiler.com/flash/issues/1075 -[#1127]: https://www.free-decompiler.com/flash/issues/1127 -[#1103]: https://www.free-decompiler.com/flash/issues/1103 -[#1133]: https://www.free-decompiler.com/flash/issues/1133 -[#1135]: https://www.free-decompiler.com/flash/issues/1135 -[#1138]: https://www.free-decompiler.com/flash/issues/1138 -[#1139]: https://www.free-decompiler.com/flash/issues/1139 -[#930]: https://www.free-decompiler.com/flash/issues/930 -[#1137]: https://www.free-decompiler.com/flash/issues/1137 -[#1144]: https://www.free-decompiler.com/flash/issues/1144 -[#1147]: https://www.free-decompiler.com/flash/issues/1147 -[#1148]: https://www.free-decompiler.com/flash/issues/1148 -[#1152]: https://www.free-decompiler.com/flash/issues/1152 -[#1154]: https://www.free-decompiler.com/flash/issues/1154 -[#116]: https://www.free-decompiler.com/flash/issues/116 -[#1070]: https://www.free-decompiler.com/flash/issues/1070 -[#1098]: https://www.free-decompiler.com/flash/issues/1098 -[#1033]: https://www.free-decompiler.com/flash/issues/1033 -[#1083]: https://www.free-decompiler.com/flash/issues/1083 -[#1091]: https://www.free-decompiler.com/flash/issues/1091 -[#1076]: https://www.free-decompiler.com/flash/issues/1076 -[#1068]: https://www.free-decompiler.com/flash/issues/1068 -[#1063]: https://www.free-decompiler.com/flash/issues/1063 -[#1019]: https://www.free-decompiler.com/flash/issues/1019 -[#1016]: https://www.free-decompiler.com/flash/issues/1016 -[#1010]: https://www.free-decompiler.com/flash/issues/1010 -[#1008]: https://www.free-decompiler.com/flash/issues/1008 -[#1004]: https://www.free-decompiler.com/flash/issues/1004 -[#933]: https://www.free-decompiler.com/flash/issues/933 -[#1062]: https://www.free-decompiler.com/flash/issues/1062 -[#418]: https://www.free-decompiler.com/flash/issues/418 -[#1047]: https://www.free-decompiler.com/flash/issues/1047 -[#812]: https://www.free-decompiler.com/flash/issues/812 -[#1056]: https://www.free-decompiler.com/flash/issues/1056 -[#1057]: https://www.free-decompiler.com/flash/issues/1057 -[#991]: https://www.free-decompiler.com/flash/issues/991 -[#689]: https://www.free-decompiler.com/flash/issues/689 -[#1060]: https://www.free-decompiler.com/flash/issues/1060 -[#1037]: https://www.free-decompiler.com/flash/issues/1037 -[#489]: https://www.free-decompiler.com/flash/issues/489 -[#1007]: https://www.free-decompiler.com/flash/issues/1007 -[#1044]: https://www.free-decompiler.com/flash/issues/1044 -[#947]: https://www.free-decompiler.com/flash/issues/947 -[#953]: https://www.free-decompiler.com/flash/issues/953 -[#954]: https://www.free-decompiler.com/flash/issues/954 -[#950]: https://www.free-decompiler.com/flash/issues/950 -[#945]: https://www.free-decompiler.com/flash/issues/945 -[#957]: https://www.free-decompiler.com/flash/issues/957 -[#956]: https://www.free-decompiler.com/flash/issues/956 -[#968]: https://www.free-decompiler.com/flash/issues/968 -[#978]: https://www.free-decompiler.com/flash/issues/978 -[#955]: https://www.free-decompiler.com/flash/issues/955 -[#966]: https://www.free-decompiler.com/flash/issues/966 -[#999]: https://www.free-decompiler.com/flash/issues/999 -[#1000]: https://www.free-decompiler.com/flash/issues/1000 -[#1017]: https://www.free-decompiler.com/flash/issues/1017 -[#1030]: https://www.free-decompiler.com/flash/issues/1030 -[#949]: https://www.free-decompiler.com/flash/issues/949 -[#944]: https://www.free-decompiler.com/flash/issues/944 -[#939]: https://www.free-decompiler.com/flash/issues/939 -[#942]: https://www.free-decompiler.com/flash/issues/942 -[#952]: https://www.free-decompiler.com/flash/issues/952 -[#858]: https://www.free-decompiler.com/flash/issues/858 -[#905]: https://www.free-decompiler.com/flash/issues/905 -[#920]: https://www.free-decompiler.com/flash/issues/920 -[#921]: https://www.free-decompiler.com/flash/issues/921 -[#924]: https://www.free-decompiler.com/flash/issues/924 -[#895]: https://www.free-decompiler.com/flash/issues/895 -[#884]: https://www.free-decompiler.com/flash/issues/884 -[#899]: https://www.free-decompiler.com/flash/issues/899 -[#903]: https://www.free-decompiler.com/flash/issues/903 -[#855]: https://www.free-decompiler.com/flash/issues/855 -[#850]: https://www.free-decompiler.com/flash/issues/850 -[#832]: https://www.free-decompiler.com/flash/issues/832 -[#904]: https://www.free-decompiler.com/flash/issues/904 -[#910]: https://www.free-decompiler.com/flash/issues/910 -[#922]: https://www.free-decompiler.com/flash/issues/922 -[#916]: https://www.free-decompiler.com/flash/issues/916 -[#938]: https://www.free-decompiler.com/flash/issues/938 -[#897]: https://www.free-decompiler.com/flash/issues/897 -[#470]: https://www.free-decompiler.com/flash/issues/470 -[#877]: https://www.free-decompiler.com/flash/issues/877 -[#878]: https://www.free-decompiler.com/flash/issues/878 -[#845]: https://www.free-decompiler.com/flash/issues/845 -[#883]: https://www.free-decompiler.com/flash/issues/883 -[#882]: https://www.free-decompiler.com/flash/issues/882 -[#760]: https://www.free-decompiler.com/flash/issues/760 -[#887]: https://www.free-decompiler.com/flash/issues/887 -[#842]: https://www.free-decompiler.com/flash/issues/842 -[#841]: https://www.free-decompiler.com/flash/issues/841 -[#772]: https://www.free-decompiler.com/flash/issues/772 -[#762]: https://www.free-decompiler.com/flash/issues/762 -[#862]: https://www.free-decompiler.com/flash/issues/862 -[#865]: https://www.free-decompiler.com/flash/issues/865 -[#613]: https://www.free-decompiler.com/flash/issues/613 -[#868]: https://www.free-decompiler.com/flash/issues/868 -[#713]: https://www.free-decompiler.com/flash/issues/713 -[#807]: https://www.free-decompiler.com/flash/issues/807 -[#728]: https://www.free-decompiler.com/flash/issues/728 -[#857]: https://www.free-decompiler.com/flash/issues/857 -[#860]: https://www.free-decompiler.com/flash/issues/860 -[#824]: https://www.free-decompiler.com/flash/issues/824 -[#809]: https://www.free-decompiler.com/flash/issues/809 -[#805]: https://www.free-decompiler.com/flash/issues/805 -[#825]: https://www.free-decompiler.com/flash/issues/825 -[#737]: https://www.free-decompiler.com/flash/issues/737 -[#350]: https://www.free-decompiler.com/flash/issues/350 -[#814]: https://www.free-decompiler.com/flash/issues/814 -[#816]: https://www.free-decompiler.com/flash/issues/816 -[#835]: https://www.free-decompiler.com/flash/issues/835 -[#836]: https://www.free-decompiler.com/flash/issues/836 -[#848]: https://www.free-decompiler.com/flash/issues/848 -[#817]: https://www.free-decompiler.com/flash/issues/817 -[#849]: https://www.free-decompiler.com/flash/issues/849 -[#852]: https://www.free-decompiler.com/flash/issues/852 -[#837]: https://www.free-decompiler.com/flash/issues/837 -[#811]: https://www.free-decompiler.com/flash/issues/811 -[#745]: https://www.free-decompiler.com/flash/issues/745 -[#803]: https://www.free-decompiler.com/flash/issues/803 -[#738]: https://www.free-decompiler.com/flash/issues/738 -[#742]: https://www.free-decompiler.com/flash/issues/742 -[#747]: https://www.free-decompiler.com/flash/issues/747 -[#749]: https://www.free-decompiler.com/flash/issues/749 -[#752]: https://www.free-decompiler.com/flash/issues/752 -[#753]: https://www.free-decompiler.com/flash/issues/753 -[#759]: https://www.free-decompiler.com/flash/issues/759 -[#766]: https://www.free-decompiler.com/flash/issues/766 -[#768]: https://www.free-decompiler.com/flash/issues/768 -[#773]: https://www.free-decompiler.com/flash/issues/773 -[#776]: https://www.free-decompiler.com/flash/issues/776 -[#783]: https://www.free-decompiler.com/flash/issues/783 -[#785]: https://www.free-decompiler.com/flash/issues/785 -[#787]: https://www.free-decompiler.com/flash/issues/787 -[#788]: https://www.free-decompiler.com/flash/issues/788 -[#790]: https://www.free-decompiler.com/flash/issues/790 -[#794]: https://www.free-decompiler.com/flash/issues/794 -[#798]: https://www.free-decompiler.com/flash/issues/798 -[#800]: https://www.free-decompiler.com/flash/issues/800 -[#676]: https://www.free-decompiler.com/flash/issues/676 -[#734]: https://www.free-decompiler.com/flash/issues/734 -[#687]: https://www.free-decompiler.com/flash/issues/687 -[#709]: https://www.free-decompiler.com/flash/issues/709 -[#732]: https://www.free-decompiler.com/flash/issues/732 -[#730]: https://www.free-decompiler.com/flash/issues/730 -[#735]: https://www.free-decompiler.com/flash/issues/735 -[#722]: https://www.free-decompiler.com/flash/issues/722 -[#725]: https://www.free-decompiler.com/flash/issues/725 -[#715]: https://www.free-decompiler.com/flash/issues/715 -[#635]: https://www.free-decompiler.com/flash/issues/635 -[#726]: https://www.free-decompiler.com/flash/issues/726 -[#716]: https://www.free-decompiler.com/flash/issues/716 -[#717]: https://www.free-decompiler.com/flash/issues/717 -[#718]: https://www.free-decompiler.com/flash/issues/718 -[#720]: https://www.free-decompiler.com/flash/issues/720 -[#719]: https://www.free-decompiler.com/flash/issues/719 -[#723]: https://www.free-decompiler.com/flash/issues/723 -[#288]: https://www.free-decompiler.com/flash/issues/288 -[#677]: https://www.free-decompiler.com/flash/issues/677 -[#389]: https://www.free-decompiler.com/flash/issues/389 -[#701]: https://www.free-decompiler.com/flash/issues/701 -[#707]: https://www.free-decompiler.com/flash/issues/707 -[#302]: https://www.free-decompiler.com/flash/issues/302 -[#685]: https://www.free-decompiler.com/flash/issues/685 -[#698]: https://www.free-decompiler.com/flash/issues/698 -[#710]: https://www.free-decompiler.com/flash/issues/710 -[#711]: https://www.free-decompiler.com/flash/issues/711 -[#681]: https://www.free-decompiler.com/flash/issues/681 -[#688]: https://www.free-decompiler.com/flash/issues/688 -[#691]: https://www.free-decompiler.com/flash/issues/691 -[#524]: https://www.free-decompiler.com/flash/issues/524 -[#663]: https://www.free-decompiler.com/flash/issues/663 -[#702]: https://www.free-decompiler.com/flash/issues/702 -[#539]: https://www.free-decompiler.com/flash/issues/539 -[#650]: https://www.free-decompiler.com/flash/issues/650 -[#680]: https://www.free-decompiler.com/flash/issues/680 -[#649]: https://www.free-decompiler.com/flash/issues/649 -[#656]: https://www.free-decompiler.com/flash/issues/656 -[#661]: https://www.free-decompiler.com/flash/issues/661 -[#664]: https://www.free-decompiler.com/flash/issues/664 -[#668]: https://www.free-decompiler.com/flash/issues/668 -[#674]: https://www.free-decompiler.com/flash/issues/674 -[#675]: https://www.free-decompiler.com/flash/issues/675 -[#632]: https://www.free-decompiler.com/flash/issues/632 -[#651]: https://www.free-decompiler.com/flash/issues/651 -[#678]: https://www.free-decompiler.com/flash/issues/678 -[#672]: https://www.free-decompiler.com/flash/issues/672 -[#684]: https://www.free-decompiler.com/flash/issues/684 -[#647]: https://www.free-decompiler.com/flash/issues/647 -[#648]: https://www.free-decompiler.com/flash/issues/648 -[#612]: https://www.free-decompiler.com/flash/issues/612 -[#623]: https://www.free-decompiler.com/flash/issues/623 -[#624]: https://www.free-decompiler.com/flash/issues/624 -[#627]: https://www.free-decompiler.com/flash/issues/627 -[#640]: https://www.free-decompiler.com/flash/issues/640 -[#595]: https://www.free-decompiler.com/flash/issues/595 -[#592]: https://www.free-decompiler.com/flash/issues/592 -[#585]: https://www.free-decompiler.com/flash/issues/585 -[#578]: https://www.free-decompiler.com/flash/issues/578 -[#501]: https://www.free-decompiler.com/flash/issues/501 -[#616]: https://www.free-decompiler.com/flash/issues/616 -[#559]: https://www.free-decompiler.com/flash/issues/559 -[#401]: https://www.free-decompiler.com/flash/issues/401 -[#593]: https://www.free-decompiler.com/flash/issues/593 -[#594]: https://www.free-decompiler.com/flash/issues/594 -[#579]: https://www.free-decompiler.com/flash/issues/579 -[#428]: https://www.free-decompiler.com/flash/issues/428 -[#337]: https://www.free-decompiler.com/flash/issues/337 -[#584]: https://www.free-decompiler.com/flash/issues/584 -[#576]: https://www.free-decompiler.com/flash/issues/576 -[#250]: https://www.free-decompiler.com/flash/issues/250 -[#580]: https://www.free-decompiler.com/flash/issues/580 -[#510]: https://www.free-decompiler.com/flash/issues/510 -[#583]: https://www.free-decompiler.com/flash/issues/583 -[#586]: https://www.free-decompiler.com/flash/issues/586 -[#574]: https://www.free-decompiler.com/flash/issues/574 -[#570]: https://www.free-decompiler.com/flash/issues/570 -[#563]: https://www.free-decompiler.com/flash/issues/563 -[#561]: https://www.free-decompiler.com/flash/issues/561 -[#509]: https://www.free-decompiler.com/flash/issues/509 -[#433]: https://www.free-decompiler.com/flash/issues/433 -[#557]: https://www.free-decompiler.com/flash/issues/557 -[#556]: https://www.free-decompiler.com/flash/issues/556 -[#504]: https://www.free-decompiler.com/flash/issues/504 -[#529]: https://www.free-decompiler.com/flash/issues/529 -[#538]: https://www.free-decompiler.com/flash/issues/538 -[#537]: https://www.free-decompiler.com/flash/issues/537 -[#540]: https://www.free-decompiler.com/flash/issues/540 -[#387]: https://www.free-decompiler.com/flash/issues/387 -[#552]: https://www.free-decompiler.com/flash/issues/552 -[#494]: https://www.free-decompiler.com/flash/issues/494 -[#513]: https://www.free-decompiler.com/flash/issues/513 -[#262]: https://www.free-decompiler.com/flash/issues/262 -[#499]: https://www.free-decompiler.com/flash/issues/499 -[#508]: https://www.free-decompiler.com/flash/issues/508 -[#305]: https://www.free-decompiler.com/flash/issues/305 -[#312]: https://www.free-decompiler.com/flash/issues/312 -[#503]: https://www.free-decompiler.com/flash/issues/503 -[#304]: https://www.free-decompiler.com/flash/issues/304 -[#306]: https://www.free-decompiler.com/flash/issues/306 -[#507]: https://www.free-decompiler.com/flash/issues/507 -[#424]: https://www.free-decompiler.com/flash/issues/424 -[#425]: https://www.free-decompiler.com/flash/issues/425 -[#478]: https://www.free-decompiler.com/flash/issues/478 -[#485]: https://www.free-decompiler.com/flash/issues/485 -[#517]: https://www.free-decompiler.com/flash/issues/517 -[#518]: https://www.free-decompiler.com/flash/issues/518 -[#361]: https://www.free-decompiler.com/flash/issues/361 -[#392]: https://www.free-decompiler.com/flash/issues/392 -[#516]: https://www.free-decompiler.com/flash/issues/516 -[#495]: https://www.free-decompiler.com/flash/issues/495 -[#496]: https://www.free-decompiler.com/flash/issues/496 -[#299]: https://www.free-decompiler.com/flash/issues/299 -[#303]: https://www.free-decompiler.com/flash/issues/303 -[#324]: https://www.free-decompiler.com/flash/issues/324 -[#346]: https://www.free-decompiler.com/flash/issues/346 -[#371]: https://www.free-decompiler.com/flash/issues/371 -[#426]: https://www.free-decompiler.com/flash/issues/426 -[#457]: https://www.free-decompiler.com/flash/issues/457 -[#458]: https://www.free-decompiler.com/flash/issues/458 -[#460]: https://www.free-decompiler.com/flash/issues/460 -[#462]: https://www.free-decompiler.com/flash/issues/462 -[#463]: https://www.free-decompiler.com/flash/issues/463 -[#465]: https://www.free-decompiler.com/flash/issues/465 -[#466]: https://www.free-decompiler.com/flash/issues/466 -[#369]: https://www.free-decompiler.com/flash/issues/369 -[#390]: https://www.free-decompiler.com/flash/issues/390 -[#453]: https://www.free-decompiler.com/flash/issues/453 -[#459]: https://www.free-decompiler.com/flash/issues/459 -[#461]: https://www.free-decompiler.com/flash/issues/461 -[#451]: https://www.free-decompiler.com/flash/issues/451 -[#454]: https://www.free-decompiler.com/flash/issues/454 -[#455]: https://www.free-decompiler.com/flash/issues/455 -[#474]: https://www.free-decompiler.com/flash/issues/474 -[#477]: https://www.free-decompiler.com/flash/issues/477 -[#481]: https://www.free-decompiler.com/flash/issues/481 -[#484]: https://www.free-decompiler.com/flash/issues/484 -[#493]: https://www.free-decompiler.com/flash/issues/493 -[#365]: https://www.free-decompiler.com/flash/issues/365 -[#366]: https://www.free-decompiler.com/flash/issues/366 -[#429]: https://www.free-decompiler.com/flash/issues/429 -[#447]: https://www.free-decompiler.com/flash/issues/447 -[#354]: https://www.free-decompiler.com/flash/issues/354 -[#438]: https://www.free-decompiler.com/flash/issues/438 -[#436]: https://www.free-decompiler.com/flash/issues/436 -[#446]: https://www.free-decompiler.com/flash/issues/446 -[#427]: https://www.free-decompiler.com/flash/issues/427 -[#405]: https://www.free-decompiler.com/flash/issues/405 -[#420]: https://www.free-decompiler.com/flash/issues/420 -[#421]: https://www.free-decompiler.com/flash/issues/421 -[#430]: https://www.free-decompiler.com/flash/issues/430 -[#397]: https://www.free-decompiler.com/flash/issues/397 -[#431]: https://www.free-decompiler.com/flash/issues/431 -[#169]: https://www.free-decompiler.com/flash/issues/169 -[#335]: https://www.free-decompiler.com/flash/issues/335 -[#404]: https://www.free-decompiler.com/flash/issues/404 -[#407]: https://www.free-decompiler.com/flash/issues/407 -[#399]: https://www.free-decompiler.com/flash/issues/399 -[#400]: https://www.free-decompiler.com/flash/issues/400 -[#398]: https://www.free-decompiler.com/flash/issues/398 -[#382]: https://www.free-decompiler.com/flash/issues/382 -[#396]: https://www.free-decompiler.com/flash/issues/396 -[#357]: https://www.free-decompiler.com/flash/issues/357 -[#391]: https://www.free-decompiler.com/flash/issues/391 -[#395]: https://www.free-decompiler.com/flash/issues/395 -[#334]: https://www.free-decompiler.com/flash/issues/334 -[#301]: https://www.free-decompiler.com/flash/issues/301 -[#383]: https://www.free-decompiler.com/flash/issues/383 -[#386]: https://www.free-decompiler.com/flash/issues/386 -[#367]: https://www.free-decompiler.com/flash/issues/367 -[#380]: https://www.free-decompiler.com/flash/issues/380 -[#292]: https://www.free-decompiler.com/flash/issues/292 -[#375]: https://www.free-decompiler.com/flash/issues/375 -[#378]: https://www.free-decompiler.com/flash/issues/378 -[#325]: https://www.free-decompiler.com/flash/issues/325 -[#210]: https://www.free-decompiler.com/flash/issues/210 -[#355]: https://www.free-decompiler.com/flash/issues/355 -[#313]: https://www.free-decompiler.com/flash/issues/313 -[#330]: https://www.free-decompiler.com/flash/issues/330 -[#332]: https://www.free-decompiler.com/flash/issues/332 -[#344]: https://www.free-decompiler.com/flash/issues/344 -[#295]: https://www.free-decompiler.com/flash/issues/295 -[#297]: https://www.free-decompiler.com/flash/issues/297 -[#307]: https://www.free-decompiler.com/flash/issues/307 -[#309]: https://www.free-decompiler.com/flash/issues/309 -[#310]: https://www.free-decompiler.com/flash/issues/310 -[#311]: https://www.free-decompiler.com/flash/issues/311 -[#327]: https://www.free-decompiler.com/flash/issues/327 -[#328]: https://www.free-decompiler.com/flash/issues/328 -[#333]: https://www.free-decompiler.com/flash/issues/333 -[#336]: https://www.free-decompiler.com/flash/issues/336 -[#338]: https://www.free-decompiler.com/flash/issues/338 -[#315]: https://www.free-decompiler.com/flash/issues/315 -[#123]: https://www.free-decompiler.com/flash/issues/123 -[#243]: https://www.free-decompiler.com/flash/issues/243 -[#326]: https://www.free-decompiler.com/flash/issues/326 -[#287]: https://www.free-decompiler.com/flash/issues/287 -[#290]: https://www.free-decompiler.com/flash/issues/290 -[#291]: https://www.free-decompiler.com/flash/issues/291 -[#294]: https://www.free-decompiler.com/flash/issues/294 -[#298]: https://www.free-decompiler.com/flash/issues/298 -[#296]: https://www.free-decompiler.com/flash/issues/296 -[#314]: https://www.free-decompiler.com/flash/issues/314 -[#316]: https://www.free-decompiler.com/flash/issues/316 -[#318]: https://www.free-decompiler.com/flash/issues/318 -[#319]: https://www.free-decompiler.com/flash/issues/319 -[#323]: https://www.free-decompiler.com/flash/issues/323 -[#223]: https://www.free-decompiler.com/flash/issues/223 -[#261]: https://www.free-decompiler.com/flash/issues/261 -[#269]: https://www.free-decompiler.com/flash/issues/269 -[#274]: https://www.free-decompiler.com/flash/issues/274 -[#275]: https://www.free-decompiler.com/flash/issues/275 -[#258]: https://www.free-decompiler.com/flash/issues/258 -[#267]: https://www.free-decompiler.com/flash/issues/267 -[#286]: https://www.free-decompiler.com/flash/issues/286 -[#233]: https://www.free-decompiler.com/flash/issues/233 -[#235]: https://www.free-decompiler.com/flash/issues/235 -[#263]: https://www.free-decompiler.com/flash/issues/263 -[#264]: https://www.free-decompiler.com/flash/issues/264 -[#265]: https://www.free-decompiler.com/flash/issues/265 -[#266]: https://www.free-decompiler.com/flash/issues/266 -[#281]: https://www.free-decompiler.com/flash/issues/281 -[#251]: https://www.free-decompiler.com/flash/issues/251 -[#257]: https://www.free-decompiler.com/flash/issues/257 -[#259]: https://www.free-decompiler.com/flash/issues/259 -[#260]: https://www.free-decompiler.com/flash/issues/260 -[#268]: https://www.free-decompiler.com/flash/issues/268 -[#272]: https://www.free-decompiler.com/flash/issues/272 -[#276]: https://www.free-decompiler.com/flash/issues/276 -[#220]: https://www.free-decompiler.com/flash/issues/220 -[#284]: https://www.free-decompiler.com/flash/issues/284 -[#232]: https://www.free-decompiler.com/flash/issues/232 -[#253]: https://www.free-decompiler.com/flash/issues/253 -[#137]: https://www.free-decompiler.com/flash/issues/137 -[#242]: https://www.free-decompiler.com/flash/issues/242 -[#244]: https://www.free-decompiler.com/flash/issues/244 -[#203]: https://www.free-decompiler.com/flash/issues/203 -[#225]: https://www.free-decompiler.com/flash/issues/225 -[#236]: https://www.free-decompiler.com/flash/issues/236 -[#245]: https://www.free-decompiler.com/flash/issues/245 -[#247]: https://www.free-decompiler.com/flash/issues/247 -[#248]: https://www.free-decompiler.com/flash/issues/248 -[#254]: https://www.free-decompiler.com/flash/issues/254 -[#255]: https://www.free-decompiler.com/flash/issues/255 -[#256]: https://www.free-decompiler.com/flash/issues/256 -[#241]: https://www.free-decompiler.com/flash/issues/241 -[#238]: https://www.free-decompiler.com/flash/issues/238 -[#239]: https://www.free-decompiler.com/flash/issues/239 -[#240]: https://www.free-decompiler.com/flash/issues/240 -[#237]: https://www.free-decompiler.com/flash/issues/237 -[#217]: https://www.free-decompiler.com/flash/issues/217 -[#219]: https://www.free-decompiler.com/flash/issues/219 -[#224]: https://www.free-decompiler.com/flash/issues/224 -[#121]: https://www.free-decompiler.com/flash/issues/121 -[#207]: https://www.free-decompiler.com/flash/issues/207 -[#151]: https://www.free-decompiler.com/flash/issues/151 -[#171]: https://www.free-decompiler.com/flash/issues/171 -[#206]: https://www.free-decompiler.com/flash/issues/206 -[#208]: https://www.free-decompiler.com/flash/issues/208 -[#209]: https://www.free-decompiler.com/flash/issues/209 -[#229]: https://www.free-decompiler.com/flash/issues/229 -[#213]: https://www.free-decompiler.com/flash/issues/213 -[#221]: https://www.free-decompiler.com/flash/issues/221 -[#226]: https://www.free-decompiler.com/flash/issues/226 -[#227]: https://www.free-decompiler.com/flash/issues/227 -[#230]: https://www.free-decompiler.com/flash/issues/230 -[#172]: https://www.free-decompiler.com/flash/issues/172 -[#174]: https://www.free-decompiler.com/flash/issues/174 -[#175]: https://www.free-decompiler.com/flash/issues/175 -[#212]: https://www.free-decompiler.com/flash/issues/212 -[#185]: https://www.free-decompiler.com/flash/issues/185 -[#186]: https://www.free-decompiler.com/flash/issues/186 -[#197]: https://www.free-decompiler.com/flash/issues/197 -[#216]: https://www.free-decompiler.com/flash/issues/216 -[#168]: https://www.free-decompiler.com/flash/issues/168 -[#176]: https://www.free-decompiler.com/flash/issues/176 -[#177]: https://www.free-decompiler.com/flash/issues/177 -[#202]: https://www.free-decompiler.com/flash/issues/202 -[#173]: https://www.free-decompiler.com/flash/issues/173 -[#190]: https://www.free-decompiler.com/flash/issues/190 -[#129]: https://www.free-decompiler.com/flash/issues/129 -[#153]: https://www.free-decompiler.com/flash/issues/153 -[#180]: https://www.free-decompiler.com/flash/issues/180 -[#136]: https://www.free-decompiler.com/flash/issues/136 -[#179]: https://www.free-decompiler.com/flash/issues/179 -[#144]: https://www.free-decompiler.com/flash/issues/144 -[#164]: https://www.free-decompiler.com/flash/issues/164 -[#167]: https://www.free-decompiler.com/flash/issues/167 -[#170]: https://www.free-decompiler.com/flash/issues/170 -[#178]: https://www.free-decompiler.com/flash/issues/178 -[#181]: https://www.free-decompiler.com/flash/issues/181 -[#182]: https://www.free-decompiler.com/flash/issues/182 -[#183]: https://www.free-decompiler.com/flash/issues/183 -[#184]: https://www.free-decompiler.com/flash/issues/184 -[#189]: https://www.free-decompiler.com/flash/issues/189 -[#191]: https://www.free-decompiler.com/flash/issues/191 -[#195]: https://www.free-decompiler.com/flash/issues/195 -[#196]: https://www.free-decompiler.com/flash/issues/196 -[#198]: https://www.free-decompiler.com/flash/issues/198 -[#200]: https://www.free-decompiler.com/flash/issues/200 -[#201]: https://www.free-decompiler.com/flash/issues/201 -[#166]: https://www.free-decompiler.com/flash/issues/166 -[#165]: https://www.free-decompiler.com/flash/issues/165 -[#63]: https://www.free-decompiler.com/flash/issues/63 -[#67]: https://www.free-decompiler.com/flash/issues/67 -[#117]: https://www.free-decompiler.com/flash/issues/117 -[#127]: https://www.free-decompiler.com/flash/issues/127 -[#134]: https://www.free-decompiler.com/flash/issues/134 -[#155]: https://www.free-decompiler.com/flash/issues/155 -[#142]: https://www.free-decompiler.com/flash/issues/142 -[#146]: https://www.free-decompiler.com/flash/issues/146 -[#130]: https://www.free-decompiler.com/flash/issues/130 -[#132]: https://www.free-decompiler.com/flash/issues/132 -[#145]: https://www.free-decompiler.com/flash/issues/145 -[#147]: https://www.free-decompiler.com/flash/issues/147 -[#148]: https://www.free-decompiler.com/flash/issues/148 -[#152]: https://www.free-decompiler.com/flash/issues/152 -[#156]: https://www.free-decompiler.com/flash/issues/156 -[#157]: https://www.free-decompiler.com/flash/issues/157 -[#158]: https://www.free-decompiler.com/flash/issues/158 -[#159]: https://www.free-decompiler.com/flash/issues/159 -[#160]: https://www.free-decompiler.com/flash/issues/160 -[#162]: https://www.free-decompiler.com/flash/issues/162 -[#163]: https://www.free-decompiler.com/flash/issues/163 -[#149]: https://www.free-decompiler.com/flash/issues/149 -[#150]: https://www.free-decompiler.com/flash/issues/150 -[#119]: https://www.free-decompiler.com/flash/issues/119 -[#101]: https://www.free-decompiler.com/flash/issues/101 -[#114]: https://www.free-decompiler.com/flash/issues/114 -[#135]: https://www.free-decompiler.com/flash/issues/135 -[#141]: https://www.free-decompiler.com/flash/issues/141 -[#102]: https://www.free-decompiler.com/flash/issues/102 -[#124]: https://www.free-decompiler.com/flash/issues/124 -[#128]: https://www.free-decompiler.com/flash/issues/128 -[#131]: https://www.free-decompiler.com/flash/issues/131 -[#104]: https://www.free-decompiler.com/flash/issues/104 -[#113]: https://www.free-decompiler.com/flash/issues/113 -[#133]: https://www.free-decompiler.com/flash/issues/133 -[#140]: https://www.free-decompiler.com/flash/issues/140 -[#108]: https://www.free-decompiler.com/flash/issues/108 -[#105]: https://www.free-decompiler.com/flash/issues/105 -[#109]: https://www.free-decompiler.com/flash/issues/109 -[#106]: https://www.free-decompiler.com/flash/issues/106 -[#107]: https://www.free-decompiler.com/flash/issues/107 -[#110]: https://www.free-decompiler.com/flash/issues/110 -[#103]: https://www.free-decompiler.com/flash/issues/103 -[#111]: https://www.free-decompiler.com/flash/issues/111 -[#96]: https://www.free-decompiler.com/flash/issues/96 -[#98]: https://www.free-decompiler.com/flash/issues/98 -[#99]: https://www.free-decompiler.com/flash/issues/99 -[#100]: https://www.free-decompiler.com/flash/issues/100 -[#85]: https://www.free-decompiler.com/flash/issues/85 -[#79]: https://www.free-decompiler.com/flash/issues/79 -[#92]: https://www.free-decompiler.com/flash/issues/92 -[#93]: https://www.free-decompiler.com/flash/issues/93 -[#94]: https://www.free-decompiler.com/flash/issues/94 -[#95]: https://www.free-decompiler.com/flash/issues/95 -[#86]: https://www.free-decompiler.com/flash/issues/86 -[#87]: https://www.free-decompiler.com/flash/issues/87 -[#88]: https://www.free-decompiler.com/flash/issues/88 -[#89]: https://www.free-decompiler.com/flash/issues/89 -[#82]: https://www.free-decompiler.com/flash/issues/82 -[#78]: https://www.free-decompiler.com/flash/issues/78 -[#81]: https://www.free-decompiler.com/flash/issues/81 -[#84]: https://www.free-decompiler.com/flash/issues/84 -[#83]: https://www.free-decompiler.com/flash/issues/83 -[#65]: https://www.free-decompiler.com/flash/issues/65 -[#48]: https://www.free-decompiler.com/flash/issues/48 -[#53]: https://www.free-decompiler.com/flash/issues/53 -[#66]: https://www.free-decompiler.com/flash/issues/66 -[#68]: https://www.free-decompiler.com/flash/issues/68 -[#69]: https://www.free-decompiler.com/flash/issues/69 -[#75]: https://www.free-decompiler.com/flash/issues/75 -[#73]: https://www.free-decompiler.com/flash/issues/73 -[#62]: https://www.free-decompiler.com/flash/issues/62 -[#72]: https://www.free-decompiler.com/flash/issues/72 -[#64]: https://www.free-decompiler.com/flash/issues/64 -[#38]: https://www.free-decompiler.com/flash/issues/38 -[#56]: https://www.free-decompiler.com/flash/issues/56 -[#57]: https://www.free-decompiler.com/flash/issues/57 -[#58]: https://www.free-decompiler.com/flash/issues/58 -[#45]: https://www.free-decompiler.com/flash/issues/45 -[#50]: https://www.free-decompiler.com/flash/issues/50 -[#51]: https://www.free-decompiler.com/flash/issues/51 -[#52]: https://www.free-decompiler.com/flash/issues/52 -[#47]: https://www.free-decompiler.com/flash/issues/47 -[#42]: https://www.free-decompiler.com/flash/issues/42 -[#39]: https://www.free-decompiler.com/flash/issues/39 -[#40]: https://www.free-decompiler.com/flash/issues/40 -[#44]: https://www.free-decompiler.com/flash/issues/44 -[#36]: https://www.free-decompiler.com/flash/issues/36 -[#43]: https://www.free-decompiler.com/flash/issues/43 -[#46]: https://www.free-decompiler.com/flash/issues/46 -[#3]: https://www.free-decompiler.com/flash/issues/3 -[#37]: https://www.free-decompiler.com/flash/issues/37 -[#34]: https://www.free-decompiler.com/flash/issues/34 -[#35]: https://www.free-decompiler.com/flash/issues/35 -[#32]: https://www.free-decompiler.com/flash/issues/32 +# Change Log +All notable changes to this project will be documented in this file. + +## [Unreleased] +### Added +- [#1240] AS search using multiple threads when parallel speedup is enabled +- [#1308] Search by all P-code files in AS3 +- [#1333] Exporting sprites as swf files +- [#1365] Allow to configure all types of configuration settings from command line +- [#1369] Allow zoom in sprite (and button) export +- Debug tooltips on hover + +### Fixed +- [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter +- [#1343] AS 1/2 direct editation critical bug +- [#1348] Cannot properly export frame with cyrillic symbols to SVG +- [#1354] Various FLA export problem fixes +- [#1367] Raw edit conditional type fix. +- [#1401] SVG export: duplicate pattern IDs fixed +- [#1402] SVG export: certain font characters not exported properly fixed +- [#1430] AS 1/2 deobfuscation fixes +- Opening loaded SWF files during run fixed +- Not opening first script when clicked on app startup + +## [10.0.0] - 2016-12-24 +### Added +- Iggy Files support - reading and (limited) editation of fonts, texts and AS3 - 64 bit variant only +- optional AS3 direct editation with Flex SDK +- AS3 p-code editing - metadata read/write support +- AS3 p-code editing - end of the block command like in RABCDasm +- AS3 p-code editing - popup docs for more than instructions +- Debugger - New columns for variable details - scope, flags, trait +- Debugger - Add watch feature +- AS3 decompilation - colliding trait/class names handling - show hash suffix with namespace index on such cases +- Deobfuscation Tool - Fix colliding trait/classes via toolbar command +- Auto rename identifiers option now fixes colliding trait/classes aswell +- [#1254] FLA export - detecting scripts on AS3 timeline +- [#907] FFDec Library JAR file has version inside it. +- [#1311], [#1313] actionScript source font size +- Display warning when library version and GUI version mismatch +- Changelog file +- [#1308] Search by all P-code files (AS 1/2 only) + +### Changed +- [#1189] AS3 - sort imports to have same order always +- GUI: AS3 P-code header show actual trait type and method type +- GUI: Script editing buttons now named "Edit ActionScript" and "Edit P-code" +- Set advance values button has confirm dialog with information +- [#1274] Linux package no longer requires Oracle Java only +- Library now packaged inside ZIP file + +### Fixed +- P-code docs formatting fix +- Export dialog - handling sprite and SWF frames correctly +- [#1275] debugger - show local variables fixes +- AS3 p-code editing - popup docs correctly displayed when label on line start +- [#1278] replacing DefineBits error +- [#1281] DefineFont 2/3 getting character advance value when replacing fix +- Set advance values button - Do not set advance if the char cannot be displayed in source font +- AS3 Goto declaration for single character names +- Identifier renaming for top level classes +- AS3 direct editation not correctly saving local register names +- [#1254] FLA export - placing AS3 classes to FLA directory instead of scripts dir +- Mac OS X installer fix (.pkg) +- [#1289] AS1/2 direct editation - variables used in inner functions must not be stored in local registers +- [#1283] AS3 Unbounded Vector - Vector<*> decompilation and direct editation fix +- [#1294] Font editation (DefineFont2/3) - correct switching of wide character codes +- [#1302] Callpropvoid instruction docblock not correct +- [#1309] recent files not getting updates +- [#1312] faster colliding usages finder +- [#1303] garbled text when exporting frame with text +- [#1314] user interface: button order +- Internal viewer shows red image when bitmap fill is not available (see issue [#1320]) +- [#1323] Audio playback fails + +## [9.0.0] - 2016-08-12 +### Added +- Instance metadata (AMF3) editing in PlaceObject4 +- [#1156] Flash Viewer - DefineScalingGrid support (9-slice scaling) +- [#1171] Export stroke scale to FLA +- FLA export - check invalid unicode characters +- [#1170] Extract from memory in commandline +- Reload one vs Reload all buttons +- ABC: Float and Float4 support +- AS3 p-code instruction documentation in GUI +- [#1241] Settings to show original bytes in hex view +- Search in dump view +- Jump to resources view from hex view +- Show warning on 32bit JRE + +### Changed +- [#1162] improved opening loaded SWF files +- Flash Viewer - skip frames when not on time +- [#1199] Automatically import alpha channel to JPEG3/4 from PNG + +### Fixed +- [#1151] Filters on texts fixed +- [#1128] Adding characters to font fixed (FontAlignZones not removed) +- [#1163] Clicking open->file makes program buggy +- Refresh tree after raw edit +- [#1172] Text double escape fix +- [#1174] Change language fix +- some AS2 deobfuscation fixes +- [#1183] Index out of bounds fix +- Implicit coersion on binary/unary opfix +- debugger: corect display variable values through getters +- Multiple XLF export fix +- [#1193] FLA export - text tag advance fix, one layer shape fix +- [#1193] FLA export - smoothed image detection, export raw JPEG data +- [#1193] Export space character to TTF correctly +- [#1200] Previous search text selected when quick find +- Flash viewer: aspect ratio on startup fix +- [#1198] Saving trait slot const value +- Zoom parameter commandline fixed +- [#1205] clipping fixed +- [#1194] Wrong sound effects in FLA +- [#1210] Frame Export fix +- Improved/fixed go to declaration in AS3 +- [#1217] PCode window not in same position as AS +- Hide memor search on non windows platform +- [#1244] Incorrect showing of NOP instructions +- [#1244] Remove unknown actions when deobfuscation is enabled, compole unknown instructions back +- [#1241] File content is different from hex view +- [#1247] Incorrectly handling remainingbytes for DefineCompactedFont +- [#1236] won't open fixed +- [#1251] SWF not same after export XML and import back +- [#1265] Error during export +- [#1268] Font export - Using second glyph when two glyphs for one character found +- [#1268] GFX compacted font - fixed advance values on export + +## [8.0.1] - 2016-02-20 +### Changed +- FFDec debug tab in advanced settings moved to other tabs + +### Fixed +- [#1161] AS1/2 deobfuscation broken +- AS1/2 Simplify expressions fix + +## [8.0.0] - 2016-02-18 +### Added +- Debugger - AS1/2 Show registers +- Debugger - display variables in the tree structure +- Debugger - set value of variable +- Debugger - AS1/2 View constantpool +- Debugger - P-code level debugging for both AS1/2 and AS3 +- Basic SVG import for shapes +- Simplify expression setting +- [#1118] Loading characters through ImportAssets - show as readonly +- [#409], [#1132], [SkinPart] metadata support - decompilation and direct editation in AS3 +- [#1134] compiling §§ instructions back while direct editation (§§goto is still missing) +- [#1121] Ability to save binary data by its name +- [#1052] Add object to existing frame +- Allow adding tag to main timeline +- AS1/2: Ctrl+click to declaration of variables, registers +- Allow trait specification in pcode import +- Icons for tag types in Dump view +- Show error message when a text tag is invalid (glyph index problem) +- AS3 direct editation - store local register names in debug info = allow to rename them + +### Changed +- New application icon and splash screen +- [#1145] AS3 better declaration type detection, better convert_x instruction handling +- Binary export - use .swf extension for swf files +- Better tree labels in generic tag editor (Raw edit) +- [#758] Allow zooming more than preview area in internal viewer + +### Fixed +- [#1096] FLA export - pretty print +- [#1104] AS1/2/3 Script Importat not working +- [#1107] Text Offset Incorrect fixed +- [#1106] New Shapes replace function fix +- [#1113] It takes too long to switch between rendered sprite +- [#1075] Lenght of DefineText in some cases +- [#1127] autoRenameIdentifiers is not supported in CLI mode +- [#1128] Letterspacing bug (after font embed): ignore letterspacing when character changed +- [#1103] Foreach variables fixes +- AS3 Switch fixes +- Default clause position in switch +- [#1133] Incorrect frame order for nested sprite +- [#1135] Handle try "to" in p-code correctly +- Font wideOffsets,wideCodes fixed in DefineFont2/3 +- AS3: super method call +- [#1138] All exported videos are the same file which may be broken +- [#1139],[#930] Windows Installer: Correct ActiveX download link, Download latest java from webpages +- [#1137] running flashplayer(debugger) executable in Linux/MacOs +- [#1144] Command line argument renameInvalidIdentifiers +- [#1145] double not (!!) not removed +- [#1147] Sprite is exported incorrectly +- [#1148] handing end of stream exception in abc reader, loc exception +- [#1152] Font info tag modified tag was not set => saved swf was corrupt +- [#1154] Some 32bit JRE problems - program won't start +- [#1145] Correct precedence handling on binary operators +- [#116] not resolving unusual tags in DefineSprite + +## [7.1.2] - 2015-12-03 +### Fixed +- AS3 debugger start halt fix +- AS1/2 debugger fix on nondebug enabled SWFs +- AS1/2 debugger fix for functions +- Debug menu item enabled fix +- AS3 local reg index fix +- Advanced settings calendar +- AVM2 instructions in hex view +- [#1070] Incorrect switch decompilation +- [#1098] Import XML fix + +## [7.1.1] - 2015-11-23 +### Fixed +- Critical debugger fix - widelines + +## [7.1.0] - 2015-11-23 +### Added +- AS1/2 debugger +- Breakpoint/IP marker on line beginning + +### Changed +- Starting debugger on demand +- Installer message about playerglobal is only warning now + +### Fixed +- [#1033], [#1083] AS3 deobfuscation issues +- [#1091] AS 1/2 direct editation saving + +## [7.0.1] - 2015-11-18 +### Fixed +- Debugger: Adding breakpoint if script initializer not displayed + +## [7.0.0] - 2015-11-18 +### Added +- AS3 Debugger - breakpoints, stepping, show variables +- Faster AS3 direct editation + +### Changed +- Better Configuration of flashplayer paths + +### Removed +- Removed old "debugger" buttons +- Removed search from browsers cache - inactual code + +### Fixed +- Many AS3 direct editation related bugs +- [#1076] export fix + +## [6.1.1] - 2015-10-30 +### Fixed +- Deobfuscate AS3 metadata +- [#1068] MorphShape with focal gradient fix, FLA XML export formatting fix +- [#1063] AS3 direct edit - script initializer fix, generating method names +- XML export/import fixes +- [#1019] Namespace imports fix +- AVM2 code execution fix +- [#1016] AS3 direct editation fixes +- [#1010] AS2 direct editation - internal and override is not a reserved word +- [#1008] pushshort instruction diassembly +- [#1004] this/super can be AS1/2 variable +- [#933] AS3 allow numbers as object literal keys + +## [6.1.0] - 2015-10-26 +### Added +- Open other loaded SWFs during playback (useful for loaders) +- Export uncompressed data from dump tree +- Print performance statistics from commandline +- [#1062] Editing/displaying script initializers +- Enable debugging on SWF file (commandline) + +### Changed +- Faster syntax highlighting +- Better AS1/2 deobfuscator +- [#418] AS3 deobfuscator improved + +### Fixed +- AS call method fix (first parameter is "this") +- [#1047] open all scripts folders +- [#812] decompile fail +- [#1056] deltaY missing when adding a new StraightEdgeRecord +- [#1057] Editing as in editor results in package name moving +- [#991] GUI export +- [#689] Ignore Case not correctly toggled +- [#1060] reversed and/or detection in some cases +- [#1037] isXML call + +## [6.0.2] - 2015-09-12 +### Added +- AS3: Display and direct edit trait Metadata +- Allow to specify tag type on image or shape import +- Convert image tags from commandline +- [#489] Hex decode very large integers +- Add new tags without show empty folders +- Dependent characters in basic tag info +- [#1007] replace bytearray in raw editing +- Italian translation + +### Changed +- AS2 parser - add string to constant pool if there is not enough space +- [#1044] AS2 - order scripts by physical location, name by offset + +### Removed +- Deprecated commandline parameters removed + +### Fixed +- JNA problems on some JDKs +- [#947] Marklevels errors ignored 17a94b7 +- [#953] Mac application permission fix (maybe) +- [#954] IndexOutOfBounds fix +- [#950] AddTrait setting modified fix +- [#945] AS1/2 directeditation fix - member named as global function +- [#957] AS1/2 IndexOutOfBounds fix +- [#956] Invalid jump offsets warning +- [#968] Sprites export with wrong coloring +- [#978] case sensitivity of filenames +- [#955] AS2 decompilation problem +- Image alpha fixes +- [#966] Go to document class +- [#991] scripts exporting +- [#999] save as fla +- [#1000] image export for malformed JPEG3 tags +- [#1017] store alchemy opcodes with wrong order +- [#1030] stack overflow fix + +## [6.0.1] - 2015-07-06 +### Added +- Special §§ instructions marked as red +- [#949] Replace alpha channel from commandline +- AS3 deobfuscation from commandline +- Option to ignore FlashCC/Alchemy packages + +### Changed +- [#944],[#991],[#939],[#942] AS3 deobfuscation improvements + +### Fixed +- AS1/2 deobfuscation fixed +- [#952] Not loading SWF without extension + +## [6.0.0] - 2015-07-04 +### Added +- New AS3 deobfuscation method +- Internal "preprocessor" §§ actions introduced - §§pop,§§push,... +- Allow reload FFDec when no SWF is opened +- [#858] Allow to set compression type in header +- [#905] Show codec details for sound items +- Better alchemy/DomainMemory instruction handling +- Better obfuscated names handling +- [#920] Export instance name to SVG +- [#921] Export html DefineEditText to SVG +- Open multiple files with drag and drop +- Better "multi packs" handling (Alchemy) +- SWF version 29 to flash player 18 mapping +- ImportAssets2 sha1 field +- [#924] Sprites to image from commandline +- AS1/2 direct editation big numbers fix +- Allow to add FILTERs and SHAPERECORDs in generic tag editor +- Enable close all menu when no swf is selected +- Restore modified state even when something goes wrong +- Some old tags added + +### Changed +- AS decompilation highly improved +- Better &&, || handling +- DoABCDefine renamed to DoABC2 +- Separated Sprite export settings + +### Deprecated +- Old AS1/2/3 deobfuscation method marked as deprecated (can be enabled back deep in the configuration) + +### Fixed +- Many decompilation problems - EmptyStack exception, Maximum recursion level reached, etc. +- Few menu issues +- [#895] Correct handling CMYK JPEG +- [#884] AS direct edit assignment +- [#899] Show script after AS3 direct editation +- Some AS1/2 parser problems +- [#903] FLA export - fix for missing fontname, lastframe +- [#855] AS3 direct edit - for..in variable declaration fix +- [#850] Constant initialization for same multinames +- [#832] AS3 direct edit - other ABCs resolving fix +- [#904] Cannot export images +- [#910] Missing instructions +- Opening not existent files on restoring last session +- [#922] Edit text leading +- Put image before shape on shape replace +- [#916] Replacing Shape corrupts SWF +- JRE setup parameters fixed +- [#938] Parallel speedup limit fix + +## [5.3.0] - 2015-05-25 +### Added +- Generic tag editor: improved table editing (import/export assets tags, etc.) + +### Changed +- Classic (nonribbon) UI improved - has same items as Ribbon UI +- Icons improvements +- Disabling menu items when work in progress + +### Fixed +- [#897] Classic UI fix + +## [5.2.0] - 2015-05-22 +### Added +- UI8 editbox for swf version in header panel +- Basic tag information panel + +### Changed +- AS1/2: Shown only the constant pool(s) in pcode editor +- Do not allow to chage tag tree selection, when current tag is under editing +- Faster bitmap export +- Using less memory when playing sounds +- Error message changed when the opened file is not swf + +### Fixed +- [#470] panels size after resizing from/to full screen +- [#877] A small glitch after search in AS +- [#878] small glitch after saving P-code or swf file +- [#470] glitch +- [#845] If frame consist 2 DoAction then it imports only first one +- pdf export (when no frame exists) +- text rendering (alpha channel was ignored), +- bmp export (paddings when width%2==1) +- [#883] -dumpSWF option does not work anymore +- [#882] Canvas export border size +- [#760] Internal viewer line linear gradient fill is not working +- [#887] error on export a special swf's P-CODE +- Extensions of exported images fixed + +## [5.1.0] - 2015-05-04 +### Added +- Allow to copy/move multiple tags, and dependencies +- [#842] For reconstruction if debug line info present +- [#841] Loop control for sound preview +- [#845] Import exported AS1/2 (DefineButton2&DefineSprite) button +- Scrollbar added to fontpanel +- SWF header editor +- Configure what object types to export in exportdialog + +### Changed +- Better gif exporter +- [#772]: closing loading dialog now cancels the loading of the swf +- [#762] export pcode with different extension + +### Fixed +- CRITICAL: Update System Bug causing updates not working +- [#862] AS3 asm: do not read beyond return/throw instructions +- [#865], [#613]: ribbon prefered width fix +- [#868] export path fix, allow to export buttons +- [#865] TagTree font size problem on high resolution screens +- [#713],[#807] Installer for 4.0+ fails to access Adobe Website +- [#728] Large fonts, [#857] add scroll on DefineFont3 + +## [5.0.2] - 2015-04-18 +### Added +- Reopen last session + +### Fixed +- ffdec.sh file line endings fixed + +## [5.0.1] - 2015-04-18 +### Fixed +- [#860]: Opening bundle (zip, swc, any binary file) files fixed + +## [5.0.0] - 2015-04-18 +### Added +- Color skins +- [#824] Mac OS X package +- [#809] Move left,right buttons for DefineTexts using translatex parameter +- [#805] Editor mode for DefineTexts +- [#825] Hotkeys for next/previous DefineText +- Export/Import symbol classes/export asset tags +- Frame export progress +- [#737] Single file script export +- Displaying changed AS3 scripts in GUI as bold +- Additional character info tags placed under character node +- New icons for other tags (metadata,fileattributes,setbackground,place/remove) +- Metadata tag editor + +### Changed +- Default color skin altered +- [#350] Allow only one running instance (Windows only, can be turned off) +- SWFs in zip based bundles (SWC for example) can be modified & saved +- Performace improvements +- More compact SWF-XML format +- Marking changed parentnodes as bold too + +### Fixed +- [#814] Exporting with scale problem +- [#816] P-code not shown after class initializer trait selection +- [#835] Static initializer improvements +- AS3 direct editing - local register decrement fix +- AS3 direct editing - maintain register order/names +- [#836] AS1/2/3 Correct expression precedence handling +- AS3 preincrement +- [#848] Correct toggling text switches +- [#817] AS1/2 for..in variable declaration +- [#849] Attribute member +- [#852] Ignore case for russian characters +- [#837] AS3 try..finally without catch + +## [4.1.1] - 2015-02-21 +### Added +- Export/Import XML added to ribbon menu +- Few GUI enhancements +- Undo tag changes context menu + +### Changed +- Java 8 now required + +### Removed +- Removed support for Java below 8 + +### Fixed +- [#811] export ActionScript + +## [4.1.0] - 2015-02-18 +### Added +- XML export/import +- confirmation dialogs added +- Add support for non-standard ABC-compressed SWF file +- [#745] Copy tag to another SWF +- [#803] Align text in DefineText + +### Changed +- performance improvements +- [#758] Zoom to fit is dynamic + +### Fixed +- [#738] Frame export +- [#742] Can't edit frames +- [#747] Move tag to adds extra frame +- [#749] Internal viewer Sprite fill color +- [#752] Sound is not stopped +- [#753] Reload swf +- [#759] Decompilation § symbol +- [#766] Can't extract all resources +- [#768] Super calls not being correctly recognized +- [#773] Scripts associated with ClipActions are not shown +- [#776] Stop working after setting "number of threads" to 0 +- [#783] No OK box when edited script or text was saved +- [#785] Text search. Remember last choise, Unicode case insensitive search +- [#787] Search in AS bug (when navigating to searched results) +- [#788] Add DefineCompactedFont Tag to gfx file +- [#790] Impossible to change letters under a font +- [#794] Font extraction fails sometimes +- [#798] Close file streams after export, exporting progress +- [#800] Unexpected deleted carrier return in DefineEditText +- Build fix on Linux +- Fis Startup Script for OpenJDK +- Other minor fixes + +## [4.0.5] - 2014-12-01 +### Added +- Escape control characters in strings, identifier names +- [#676] import text error messages / logging enhancement +- [#734] \xAB escapes, \uABCD escapes +- [#687] AS3 - allowing p-code comments on separate line +- [#709] Text Export to Single File with custom filename + +### Fixed +- [#732] Random freezing - JavactiveX library updated. +- [#730] Not working without ActiveX fix on Windows +- [#735] Automatic deobfuscation not correctly switched (required restart) + +## [4.0.4] - 2014-11-23 +### Changed +- better file cache, removing unneccessary temp files + +### Fixed +- obfuscated identifiers + +## [4.0.3] - 2014-11-23 +### Added +- [#722] Go to next/previous frame +- BMP file format export (images,frames,shapes) and import(images) + +### Fixed +- [#725] various AS direct editation bug fixes - namespace compilation, AS 1/2 strict equals, submethod scope, unbounded type +- [#715] namespace resolving fix +- [#635],[#726] placing cursor inside Unicode characters + +## [4.0.2] - 2014-11-22 +### Added +- show frame number during play +- flashplayer - show controls for DefineSprite +- goto frame +- [#716],[#717],[#718] Proxy - save SWF, replace, copy URL, filesizes, table design + +### Changed +- [#720]: edited shape tag is not marked as modified after replacing +- reorganized about dialog + +### Fixed +- [#719] null swf name in Proxy after cancelling rename dialog +- flashplayer - font display +- [#723]: saving swf with invalid referenced characters +- DefineCompactedFont paging +- [#288] Less memory usage during FLA export +- Corrected syntax hilighting for AS3 P-code + +## [4.0.1] - 2014-11-12 +### Fixed +- [#713] Installer can continue when no file can be downloaded +- Fixed shapes +- Checking for updates moved to separate thread + +## [4.0.0] - 2014-11-11 +### Added +- [#677] Zoom level in export settings +- internal viewer: linear/srgb gradients +- zooming buttons for flashplayer/internal viewer +- stroke scaling modes for canvas export +- create snapshot button +- [#389] Selecting font face on import +- [#701] Importing font from TTF file +- Reorganized font panel +- [#707] Debugger for logging messages +- [#302] AS3: Better Ctrl+Click handling with underline, more declaration targets +- [#685] Getting local register names from debug info can be disabled +- Adding new tags +- [#698] Allowing unicode letters in identifiers +- [#710] Information about deobfuscation in error comments +- One EXE for 32/64 bit, uses percentage memory. +- EXE SplashScreen +- New Improved Windows Installer (NSIS) - can install Java and FlashPlayer, download playerglobal.swc +- Config setting to load inner SWFs automatically +- Replace shape with image + +### Changed +- better FlashPlayer integration using JavactiveX library +- Faster building tag tree +- Faster timeline construction +- [#711] Improved folder view - faster and with correct context menu + +### Fixed +- AS2 deobfuscation fixes +- AS2 loops fix +- [#681] Linux script fixes +- AS2 constructor name fix +- [#688] AS3 direct edit fixes +- [#691] AS3 p-code reading/saving fix +- AS3 direct edit -submethod name resolve fix +- frames to html canvas fix +- [#524] Mask layer not applied when nonempty script layer +- [#663] AS3 imports fixes +- Font export of dot character +- Font panel Yes button fixed +- [#702] GFX font reading fix +- Better obfuscated names handling +- [#539] for(each) in declaration fixes + +## [3.0.0] - 2014-09-20 +### Added +- Separated GUI (GPL) and library (now LGPL) +- Editing obfuscated identifiers via new paragraph(§) syntax +- Timeline View with preview and object hilighting +- Show GFX data in dump view +- [#650] New parameter to replace binarydata, images, sounds, scripts from commandline +- Dump view - selecting node +- [#680] Loading subSWFs from binaryTags now optional (button/context menu) to avoid unnecessary memory consumption + +### Removed +- Removed deprecated commandline export formats (see --help) + +### Fixed +- FileAttributes tag reading fix +- [#649] GFX reading fixed +- [#656] Search in memory - 64 bit processes fix +- [#661] scripts not showing +- [#664] expanding fillStyles in raw edit +- [#668] add missing character fix, text tags fix +- [#674] texts hilighting initialization fix +- [#675] AS1/2 and/or operator compilation +- [#632] Locking file after opening (cannot save, etc.) +- [#651] Unnecessary removing expression killed in unreachable part +- [#678] Windows batch file paths fixed +- [#672] Disabling transparency slider on RGB only selection +- [#684] Sound streams inside DefineSprites, soundstream handling + +## [2.1.4] - 2014-08-23 +### Added +- AS1/2: New method for deobfuscation (can be switched off in settings) +- AS1/2: Using eval/set on invalid identifiers, quotes in function names/parameters + +### Fixed +- [#647] Skipping FileAttributesTag with Parallel speedup on +- [#648] Export from embedded SWF + +## [2.1.3] - 2014-08-18 +### Added +- Show "save" and "saveas" in application menu +- Saving data range in dump view +- Show actions, abcdata in dumpview (context menu on the tree node) +- [#612] show color in hex format + +### Changed +- Faster dump info collecting (less memory) +- Allow selecting multiple files in open file dialog + +### Fixed +- [#623] ffdec.sh UNIX file endings, executable +- [#624] search in embedded swf files +- [#632] AS1/2 Unnecessary GetVariable before NewObject +- [#627] filter swf not working +- LZMA saving +- Export pcode&hex from commandline +- [#640] text import fixed, ignore BOM + +## [2.1.2] - 2014-07-20 +### Added +- Dump view +- Context menu: Jump to character, raw edit all tags +- Catalan translation +- SWF header display + +### Fixed +- [#595] AS3 direct edit - Getter/Setter generation - caused FlashPlayer crashes +- [#592] AS3 Multiname resolving in P-code causing different bytecode +- [#585] AS3 moving popped values to output +- [#578] Always on top fixed on search results +- [#501] GotoFrame2 fix +- [#616] Frames to PNG export +- Export context menu +- [#559] Bitmap export opacity +- [#401] Placeobject 3/4 fix +- [#593] Return object newline +- [#594] Setting for curly brace + +## [2.1.1] - 2014-06-05 +### Added +- [#302] Find declaration (Ctrl+click, Ctrl+B), Find usages (Ctrl+U) - Works only for exactly same multinames, not local registers +- AS1/2 direct edit - global functions improvements +- AS1/2 negate operator, unary minus operator +- Opening SWFs in BinaryData tags +- AS1: Old string operators support, and/or, <> operator (editation) +- Statusbar loading animation improved +- [#579] AS3 direct editation - removing old class/methods from ABC +- remove character without the dependencies (remove only the place/remove tags) +- Running on system with no home directory +- [#428] PDF export (as images only) +- Commandline FlashPaper to PDF export +- Select frames / Characters commandline options + +### Changed +- [#337] quickfind visibility improved +- [#584] commandline script export - select whole packages (use .+ at the end of -selectas3class) + +### Fixed +- [#576] AS1/2 direct editation: DefineFunction2 fix +- AS1/2 property fix +- AS1/2 typeof operator fix +- [#250] line spacing fix +- PlaceObject 3-4 className +- [#579] AS3 direct editation bugfixes - property resolving, integer values +- Morphshape canvas export fix +- Canvas export fix - closing path +- [#580] Rename invalid identifiers commandline fix +- [#510] JSyntaxPane find and replace dialog wrap around fix +- No more frame caching during export => memory saving (like [#583]) +- [#586] DropShadow filter fix +- Canvas export colortransform fix + +## [2.1.0 update 2] - 2014-05-08 +### Added +- AS3 decompilation/editation: Vector initializers +- AS3 direct editation: more classes in one file + +### Fixed +- [#574] DefineSprite editing fix +- Various AS3 direct editation fixes + +## [2.1.0 update 1] - 2014-05-05 +### Added +- Portugese-brasilian translation + +### Changed +- HTML Canvas export improvements + +### Fixed +- Various AS3 direct editation bugs, like [#570] + +## [2.1.0] - 2014-05-01 +### Added +- AS3 direct editation (Experimental!) +- Frames SVG Export +- Shape/MorphShape/Frames HTML 5 Canvas Export +- [#559] morphshapes as animated SVG +- [#563] Single file text export/import +- Font WOFF export +- Advanced settings dialog with tabs, config names, descriptions + +### Fixed +- [#561], [#509], [#433]: AS3 EmptyStackException fix - correct hasnext2 arguments +- Internal viewer: Filters fix + +## [2.0.1 update 2] - 2014-04-05 +### Fixed +- [#557] AS3 null namespace fix - p-code not working + +## [2.0.1 update 1] - 2014-04-04 +### Fixed +- [#556] Goto main class on startup fix +- [#557] Nullpointer fix (private namespaces) + +## [2.0.1] - 2014-04-03 +### Added +- Thumbnail view +- Font TTF export +- Exporting frames: PNGs, AVI, GIF (via Internal flash viewer) +- Expand all context menu +- Internal viewer: Button mouse move and click handling +- Playing sounds without flash player +- Internal viewer: Sounds on stage +- All sounds to WAV export +- Internal viewer: Showing texts, dynamic text border/fill +- [#504]: Unicode characters in JSyntaxPane +- Internal viewer: showing object under cursor +- Folder icons +- Sound/Image format on command line. +- Removing placeobject tags +- Removing frames +- AS: "elseif" statements +- Code formatting: space before parenthesis + +### Changed +- Single frames animated. + +### Fixed +- [#529] limit the number of displayed binaryData bytes +- [#538] Interface are sometimes dynamic +- [#537] super is sometime preceded by a dot +- [#540] Saving SWF changes very large static uint values +- [#387] Frames preview bugged +- AS:loop mismatch fix on parallel speedup +- [#552] Some timeout exceptions +- [#494] Fixed nightly builds updates + +## [2.0.0] - 2014-03-02 +### Added +- Generic tag tree editor +- Timeline view (stub only) +- FLA export to CS5, CS5.5, CC format (previously only CS6 was supported) +- [#513]: command line option to extract swf from binary file +- Configurable code formatting (Indentation + brace position) +- [#262] Export FLA: Font character ranges export +- Configurable checking for updates + +### Changed +- Improved Internal Flash viewer - better shapes, morphshapes, DefineEditText tag, clipping, blend modes +- Improved commandline usage +- Automatic deobfuscation default value set to False (See News on webpages) +- Check for updates can be configured to inform about Nightly builds aswell + +### Deprecated +- Some commandline options are now deprecated, see --help + +### Fixed +- [#499] Cannot save via Proxy fixed +- [#504] font name reading fixed +- [#508] Support for OS without GUI +- [#305] Export FLA: empty sound layers +- [#312] Export FLA: Improved Shape/MorphShape fix +- [#503] Export FLA: Smoothing invalid shapes +- [#401] Invalid GFX tags in non GFX files +- [#304],[#306],[#507],[#424],[#425],[#478],[#485],[#517],[#518] Many direct AS1/2 editing issues +- [#361] FFDec icon is not visible on application start +- [#392] Video stream data fix +- [#516] AS3 P-code editor - Null name namespace handling + +## [1.8.1 update 1] - 2014-02-02 +### Fixed +- [#495] font embedding fix +- [#496] date format in new version dialog +- cosmetic changes + +## [1.8.1] - 2014-01-30 +### Added +- [#299] replace DefineBits images +- [#303] open folder with exported FLA +- [#324],[#346] SWC/zip/other binary file support +- [#371] detailed logging +- [#426] command line switch to rename identifiers +- [#457] clear recent opened files list +- [#458] save selected system font for swf fonts +- [#460] text editor: do not scroll to the end automatically +- [#462] font embedding dialog: show more sample characters +- [#463] global search in texts +- [#465] make font properties editable +- [#466] font preview + +### Changed +- [#369] new SVG and preview image rendering +- [#390] refresh font list without reloading the application +- [#453] update texts aftert adding new character to a font tag +- [#459] remember text panel splitter position +- [#461] font panel gui redesigned + +### Fixed +- [#451] dialog windows are not on the center of the screen +- [#454] Text syntax highlighting +- [#455],[#465] classic interface issues +- [#474] changeing language only available one time +- [#477] log window localization +- [#481] SVG export fix +- [#484] Oversized advance value after editing DefineText with DefineFont2 font +- [#493] missing search results + +## [1.8.0 update 1] - 2013-12-27 +### Added +- [#453] refresh (edit+save action) all texts button + +### Fixed +- Flash panel and font panel fixed + +## [1.8.0] - 2013-12-27 +### Added +- [#350] Allow to open multiple SWFs +- [#365] Filter fake SWFs during memory search +- [#366] Allow to sort the result list in memory search window +- [#429] Auto rename invalid identifiers setting +- [#447] Non-ribbon interface + +### Fixed +- [#354] Infinite decompilation fixed +- [#438] Case sensitive Command line arguments fixed +- [#436] Saving actionscript fixed +- [#446] Precedence issue fixed +- [#451] Dialogue window positions on a multi-monitor configuration fixed + +## [1.7.4 update 1] - 2013-12-05 +### Added +- [#426] Command line parameter for renaming invalid identifiers + +### Fixed +- [#427] Exception on linux fixed +- [#405], [#420], [#421] Some decompilation issues fixed +- [#430] Configuration default value problem fixed +- [#397], [#431] Deobfuscation stucked sometimes problem fixed + +## [1.7.4] - 2013-11-10 +### Added +- [#169] hexedit method body bytes +- [#335] last opened files +- [#404] Exporting P-code and Hex + console parameters +- [#407] register name is configurable +- Advanced settings +- Cancellable decompiling, exporting and searching + +### Fixed +- [#399], [#400] performance optimizations + +## [1.7.3 update 2] - 2013-09-29 +### Fixed +- [#398] AS3 p-code values with index 0 (null) + +## [1.7.3 update 1] - 2013-09-28 +### Added +- [#382] AS3: Adding new method + +## [1.7.3] - 2013-09-27 +### Added +- AS3: Multiname and namespace editing. +- [#382],[#396] AS3: Adding new trait (method/slot/const) +- AS3: Highlighting pair parenthesis/bracket +- AS3: Editing various new P-code parameters +- AS3: Highligting of trait names/types/parameters +- AS3: Global rename identifier for traits +- [#357] Playback controls for DefineSound +- [#391] AS3: Native methods mark +- [#395] Support for GFx ScaleForm SWFs (with fonts editing) +- Displaying fonts in internal viewer +- [#334], [#395] New Embed font dialog - selecting character ranges with preview +- Replacing characters in font (Yes/No to all dialog) + +### Changed +- AS3: New p-code syntax inspired by RABCDasm +- AS3: Editing whole trait in one textarea +- AS3: Removed messages about adding new constants +- AS3: Modified colors in editor +- [#301] Clearing error log causes icon to reset + +## [1.7.2 update 2] - 2013-09-13 +### Changed +- Updated translations + +### Fixed +- [#383] Firefox browser cache handling +- [#386] SWF resizing + +## [1.7.2 update 1] - 2013-09-11 +### Changed +- updated translations + +### Fixed +- [#383] Fixed cache loading when Firefox not used + +## [1.7.2] - 2013-09-11 +### Added +- [#357] Sounds Preview (Windows only) +- Movies preview (Windows only) +- Whole SWF display +- Preview controls (Play,Pause,Stop) +- Search SWFs in browsers cache (Firefox, Chrome) +- [#367] Memory search: Save selected files to disk +- Portugese translation + +### Changed +- [#380] Faster displaying DefineBitsLossless(2) images + +### Fixed +- [#292] Background color for Fonts preview fixed +- [#375] Replacing DefineBitsLossless image tag +- [#378] Refreshing language of JSyntaxPane +- MORPHGRADIENT reading fix + +## [1.7.1] - 2013-08-25 +### Added +- Loading SWFs from other processes memory (Windows only, sorry) +- [#325] Spanish translation +- [#210] Ukrainian and Dutch translation +- [#355] Chinese translation +- [#292] Change background color in SWF preview +- [#301] Clear errors log button +- [#313] Command line parameter for ignore all errors +- [#330] Protection agains adding same characters +- [#332] AS1/2 Showing elapsed times during commandline export +- [#344] Reload opened SWF +- Decompilation timeouts + +### Fixed +- [#295] Export FLA: wrong font +- [#297] Too bright titlebar button colors +- [#307] Export FLA: fixed empty textfields +- [#309] Export FLA: static text letter spacing detection +- [#310] Export FLA: Strokes +- [#311] Export FLA: BitmapFill +- [#327] AS1/2 Disassembly error stop application +- [#328] Fixed replacing images in DefineBitsJPEGX +- [#333] AS1/2 action reading +- [#336] Graph window is too small +- [#337] Quick search panel barely visible in same cases +- [#338] Expand/collapse icon in errorlog + +## [1.7.0 update 1] - 2013-08-11 +### Added +- [#315] German translation (partial) + +### Fixed +- [#123] Better context menu integration +- [#243],[#326] Better deobfuscation +- [#287] Typo in parallelSpeedUp parameter +- [#290],[#291] improved select language dialog +- [#294] minor GUI fixes +- [#298] Progressbar positition issues +- [#296] better export directory remembering +- [#314] Better deobfuscating filenames +- [#316] Readonly editor panes accepted Ctrl+Z/Y +- [#318] Export FLA: Shapes export fix +- [#319] AS3: Improved try..catch..finally decompilation +- [#323] AS3: Fixed default switch part + +## [1.7.0] - 2013-08-03 +### Added +- Listing contributors on about page +- [#223] AS2: Detecting uninitialized class fields +- [#250] Export FLA: Detecting static fields margin and spacing +- [#261] Export FLA: AS1/2 Frame scripts on first layer +- [#269] Commandline parameters for switching configuration +- [#274] AS3 Displaying elapsed time during commandline export +- [#275] AS3 Removing returnvoid as last statement + +### Changed +- New GUI based on Substance look and feel +- Menu changed to ribbon panel +- New round icon +- [#258] AS1/2: Improved chained assignments +- [#267] Starting program without choosing a file +- [#286] Saving to temp file first + +### Fixed +- [#123] Improved context menu integration on Windows +- [#233] Globally rename identifier deselects item in the tree +- [#235] Export FLA: Dynamic text fields coordinates +- [#243],[#263],[#264],[#265],[#266],[#281] Improved deobfuscation +- [#251] Export FLA: Fixed filter strength rounding +- [#257] Export FLA: Text field color and size issues +- [#259] Fixed images alpha +- [#260] Export FLA: Labels position +- [#268] AS1/2 Function parameter shown as register instead loc +- [#272] AS3 Class initializer editation fix +- [#276] Fixed anonymous/inline functions handling +- [#220] Improved editing fonts / texts +- [#284],... other small fixes + +## [1.6.7] - 2013-07-20 +### Added +- [#220] Selection of font to import characters from +- [#232] Automatically add .swf extension in saveas dialog +- [#253] Abort/Retry/Ignore dialog on errors with file saving + +### Changed +- Improved translations + +### Fixed +- [#137],[#242], [#243], [#244] AS1/2/3 fixed deobfuscation +- [#203] AS1/2 improved direct editing +- [#220] Adding characters to font fix +- [#225] AS1/2 object literal without name quotes +- [#236] AS1/2 Rename invalid identifiers issues +- [#245] AS3 Double space around "as" keyword +- [#247] AS3 Scrolling to main class at startup +- [#248] Memory issues (slowdown) +- [#254] Expressions as commands +- [#255] Windows 7 loading issues +- [#256] AS3 Object literal in return clause +- SWF text parsing (new lines) +- Labels size by locales + +## [1.6.6 update 2] - 2013-07-16 +### Fixed +- [#241] Program could not be started + +## [1.6.6 update 1] - 2013-07-16 +### Changed +- Better localization support + +### Fixed +- [#238],[#239],[#240] Fixed deobfuscation related problems +- [#237] Parentheses in AS1/2 add,subtract + +## [1.6.6] - 2013-07-16 +### Added +- [#217] Russian translation (focus) +- [#219] Hungarian translation (honfika) +- [#224] Swedish translation (Capasha) +- [#220] Adding characters to Fonts, displaying font info +- [#121] Search progress indication +- Error log + +### Changed +- [#203] Improved direct editing of AS1/2 +- [#207] Update SWF preview after switching external/internal flash player + +### Fixed +- [#151] Memory caching +- [#171] Skipping invalid AS3 code - newobject, newarray +- [#206] AS3 switch problem +- [#208] Renaming anonymous functions +- [#209],[#229] FLA export texts positions +- [#213],[#221] other decompilation issues +- [#225] AS object literal broken with ternar operator +- [#226] onClip indentation in FLA export +- [#227] gotoAndStop wrong frame index +- [#230] FLA export missing strokes +- Shapes viewer - missing strokes + +## [1.6.5 update 1] - 2013-07-09 +### Fixed +- [#151] Fixed caching in memory +- [#172] AS1/2 constant detection fix +- [#174] Renaming SymbolClass fix +- [#175],[#212] Fixed create directory issues on export +- [#185],[#186] on-clip actions indentation +- [#197] AS1/2 Missing storeregister before switch +- [#216] AS2 Fixed field order +- [#213] AS2 Fixed var fields quotes, switch nullpointer + +## [1.6.5] - 2013-07-08 +### Added +- Multilanguage support (currently English and Czech) +- [#151] Option for caching in memory instead of files +- [#168] Export selection in tree context menu +- [#176] option to show main class on startup +- [#177] saving window maximized state +- [#202] Removing tags other than DefineSprite + +### Changed +- [#173],[#190] Better renaming +- [#129], [#153] Better deobfuscation +- [#180] better error handling +- [#185],[#186] better displaying and exporting onclip actions + +### Fixed +- [#123] Better context menu integration +- [#136] FLA export - text sizes +- [#137],[#179] foreach issues (hasNext) +- [#144] Plain text export - empty line fix +- [#144] Not displaying texts +- [#164] DefineMorphShape issues +- [#167] Sprite tag appearing twice in export filename +- [#170] AS3 Try in loop +- [#172] loop detection fix +- [#175] use empty namespace +- [#178] AS subtract with negate +- [#181] AS3 missing quotes in object field +- [#182] missing namespace imports +- [#183] wrong stage size +- [#184] wrong video link +- [#189] Fixed three dots in tree +- [#191] Focalgradient fill fix +- [#195] AS2 issues +- [#196],[#197] switch issues +- [#198] DefineFont2 empty check +- [#200] DefineBitsLossLess fix +- [#201] Nonworking main window in Linux/MacOS (due toAssociation) + +## [1.6.4 update 1] - 2013-06-30 +### Fixed +- [#166] For loops detection +- [#165] AS3:direct lookupswitch support + +## [1.6.4] - 2013-06-30 +### Added +- [#63] Globally rename identifier +- [#67] Deobfuscation - rename identifiers according to type +- [#117] Drag & Drop SWF file to main window opens it +- [#123] Context menu integration on Windows +- [#127] Drag & Drop items from tree outside of application +- [#134] AS3: Find document class +- [#144] New lines in plain text export +- [#155] Remembering window size + splitbar positions between runs + +### Changed +- [#142] Using exportassets tag for tag names +- [#146] Display AS2 classes as tree of packages +- Better loop detection + +### Fixed +- [#129] AS1/2: not refreshing decompiled after rename +- [#130] Renaming SymbolClass identifiers too +- [#132] Renaming identifiers renamed strings +- [#136] Invalid text positions in FLA export +- [#145] Unicode support +- [#147] Escape filenames during obfuscated AS3 export +- [#148] Better package vs classname handling +- [#152] Empty if branches not inverted +- [#156] Better search handling (not freezing) +- [#157] AS3: Try statements in loops +- [#158] Graph repaint problem +- [#159] AS3: Improper rest parameter handling +- [#160] Commandline binaryData export +- [#162] DefineBitsJPEG2 image replacing +- [#163] Closing SWF file after loading +- other minor fixes + +## [1.6.3 update 2] - 2013-06-21 +### Changed +- [#149] Ifs with empty onTrue branches now inverted + +### Fixed +- [#150] Long line restriction removed + +## [1.6.3 update 1] - 2013-06-21 +### Fixed +- Memory limit decreased - FFDec was not working on 32 bit JVM. + +## [1.6.3] - 2013-06-20 +### Changed +- Parallel SpeedUp can be disabled in menu +- Better loop detection + +### Fixed +- [#119] Replacements file not found issue +- [#101] AS1/2 postincrement fix +- [#114],[#116],[#135],[#141] Fixed loop detection +- [#102] Fixed loop highlighting in export +- [#124] Flash player file path detection +- [#128] Improved imports +- [#135] CommentItem fix +- [#129],[#131] Better deobfuscation +- [#104] AS3 inc/dec local deobfuscation fix +- [#113],[#133],[#140] Memory limit increased + +## [1.6.2] - 2013-06-09 +### Added +- New loop detection algorithm + +### Changed +- [#108] - Faster loading and decompiling (Parallelism) +- Improved Internal flash viewer - shapes and morphshapes + +### Fixed +- Ternar operator fix +- [#102] Fixed Shapes to FLA export +- AS1/2 class detection fix +- [#105],[#104],[#101] fixed via new loop detection + +## [1.6.1] - 2013-06-03 +### Added +- Internal Flash Viewer - preview of flash parts (shapes,sprites,frames) without need of Flash Player. (Used on nonWindows platforms by default) +- [#109], [#106], [#107] some code improvements + +### Changed +- Application needs Java 1.7 to run + +### Removed +- Support for Java before 1.7 + +### Fixed +- [#102], [#110] AS3: Class highlight fix +- [#103] AS3:Fixed setslot handling +- [#104] AS3:Inc/Declocal nullpointer fix +- [#104] Multiple conditions in loop fix +- [#111] AS3:Object literal truncates line +- [#105] Better do while..break handling +- loop fixes + +## [1.6.0 update 1] - 2013-05-25 +### Added +- better FLA export + +### Fixed +- Many FLA export related bugs (like [#96]) +- [#98] Empty initializers do not cause empty lines now +- [#99] small logging issues +- [#100] large obfuscated code support + +## [1.6.0] - 2013-05-20 +### Added +- Export to FLA (Experimental BETA!) +- [#85] Search text in all ActionScripts +- SWF 11 support + +### Fixed +- [#79] ActionStartDrag constraint fix +- [#92] Inversed GreaterThan/LessThan +- [#93] AS1/2 fixed switch detection +- [#94] AS1/2 ActionTry - register cast fix +- [#95] Better script end handling + +## [1.5.2] - 2013-05-05 +### Added +- Improved automatic update system (changes log). +- Handling script traits as separate objects. +- [#86] open/save file dialog now accepts absolute paths in quotes + +### Fixed +- [#87] Not displaying image changes in DefineBitsLossLess1 & 2 +- [#88] Fixed graph building +- [#89] AS3: bracket in property name lead to missing dot +- [#82] printgraph issue + +## [1.5.1 update 1] - 2013-05-04 +### Added +- Exporting texts via commandline +- Exporting all via commandline + +### Fixed +- DefineText2 color parameter +- AS3 GetSlot,SetSlot +- [#78],[#81],[#82],[#84] Fixed deobfuscation, exceptions during printgraph,... +- [#83] Fixed images transparency (zlib fix) +- Fixed graphparts with only jump in it (obfuscators) +- MORPHGRADIENT FIX +- Trasparency in DefineBitsJPEG3 and 4 +- Displaying shapes,morphshapes and sprites with bitmaps + +## [1.5.1] - 2013-05-01 +### Added +- Support for larger switches (10+cases) +- Editing text tags +- [#65] Exporting text tags +- Removing sprites +- Replacing images + +### Fixed +- DefineMorphShape2 fix +- [#79] - AS1/2 class detection fix, wrong printgraph fix +- [#78] - script trait slots fix + +## [1.5.0 update 1] - 2013-04-21 +### Fixed +- Automatic deobfuscation config defaulted to Off for AS1/2. + +## [1.5.0] - 2013-04-20 +### Added +- Direct editing of ActionScript 1/2 code (Beta) +- AS1/2: ifFrameLoaded support +- Automatic deobfuscation can be disabled in the menu +- [#48] - Decompile only specified class (commandline option) +- [#53] - AS3: Displaying multiname indices in trait detail, displaying method indices +- [#66] - Decompressing LZMA via commandline +- [#68] - Exporting DefineBinaryData tags, assigning class names to characters (SymbolClass tag) +- [#69] - DoABC vs DoABCDefine tags decompilation +- [#75] - Comma separator in while/do..while conditions, better if..return handling +- AS1/2: parsing NaN,Infinity value (Fix for [#73]) + +### Changed +- New icons (edit/save/cancel and main menu) + +### Fixed +- [#62] - Errors on not defined character tags (import tag) +- [#72] - First ternary operator expression was always true +- Fixed many deobfuscation related bugs + +## [1.4.3 update 2] - 2013-04-10 +### Fixed +- [#64] - AS1/2 Resolving registers in ActionDefineFunction2 (super,this,...and parameters shown as registerxx) +- Try to fix lib/FlashPlayer.exe issue + +## [1.4.3 update 1] - 2013-04-06 +### Fixed +- [#38] - Indentation in const/var initializers, missing semicolon +- [#56] - Test output left in last release +- [#57] - Unknown instructions now do not log an exception (obfuscators do this) +- [#58] - Index out of bounds exception fix on methodinfo indices in imports detection. +- AS3 loops fix +- While true fix + +## [1.4.3] - 2013-04-04 +### Added +- AS1/2 Better deobfuscation + +### Fixed +- [#45] - Unicode characters fix +- [#50] - AS1/2 Function body deobfuscation fix +- [#51] - Displaying java class names instead of expressions +- [#52] - AS1/2 Better constantpool detection (deobfuscation) +- [#38] - AS3 indentation in initialized const/var value for newobject +- Fixed ImportAssets2 tag id + +## [1.4.2 update 1] - 2013-03-25 +### Fixed +- [#47] - wrong AS3 deobfuscation +- AS3 deobfuscation issues +- AS3 switch + +## [1.4.2] - 2013-03-24 +### Added +- [#42] - Displaying code as hex +- AS1/2: Renaming identifiers (deobfuscation) +- AS1/2,AS3: Better deobfuscation +- Storing configuration to user home +- Installer for Windows systems + +### Changed +- Graph button changed to icon. + +### Fixed +- [#39] - AS1/2 NewMethod..Pop fix +- [#40] - No logging + For..in..return decompilation +- [#44] - DefineFont2 fix +- [#36] - Multiname with invalid index +- [#43] - Ternary operator and more +- [#46] - Ifs with empty branches got ignored +- [#3] - Ignoring unknown opcodes +- Logging exceptions during export + +## [1.4.1] - 2013-03-10 +### Added +- Exporting sounds +- Better AS1/2 deobfuscation (disassembly & decompilation) + +### Fixed +- Exporting only first 1000 frames of the movie +- Decompiled code was not refreshed on AS1/2 changes +- Application no longer creates empty directories on export + +## [1.4.0 update 1] - 2013-03-04 +### Fixed +- [#37] - AS3: Reversed loop conditions + +## [1.4.0] - 2013-03-03 +### Added +- AS3: ignoring return void at the end of methods +- New icons - Silk icons +- AS3: Traits list sort button +- Better Graph display +- Frames view +- Exporting of movies (No audio) +- Some AS3 related Tests +- Homepage & Donate link in the menu + +### Changed +- Tree view instead of tabs +- AS1/2 and AS3 now share same decompiling method. + +### Fixed +- [#34] - Reversed loop conditions +- [#35] - Fixed unicode strings (Japanese) + +## [1.3.1] - 2013-02-23 +### Changed +- Flash player no longer uses SWT library + +### Fixed +- [#32] - AS2: Action255 bug +- [#31] - Erorrneous tags are now ignored +- DefineBitsLossLess 1&2 on 8bit colormapped images + +## [1.3.0] - 2013-02-17 +### Added +- Decompilation is more resistant to obfuscation +- Shapes SVG export +- AS2: Decompiling classes & interfaces +- Click&go feature - clicking actionscript source displays appropriate P-code instruction and vice-versa (both AS1/2 and AS3) +- AS3: Deobfuscation menu +- Graph button for displaying code flow Graph + +### Changed +- Complete new decompiling method in both AS1/2 and AS3 +- Application renamed from "JP ActionScript Decompiler" to "JPEXS Free Flash Decompiler". +- To edit source, Edit button must be pressed first (Due to click&go feature) + +### Fixed +- AS3: Method info editor fixed +- Edittext & Button displaying + +## [1.2.0] - 2013-01-19 +### Added +- Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). +- Images display and export +- AS2: Exporting selection +- Progressbar during loading + +### Changed +- One merged window for AS1/2 and 3. +- Updated icons + +### Fixed +- AS3: xml attrib, switch in anonymous function (in AS2 too) + +## [1.1.0] - 2013-01-02 +### Added +- Checking for updates +- AS2: Exporting +- AS3: Decompiling whole scripts instead of just classes +- AS3: Exporting selected scripts +- AS3: Script search bar +- AS3: List of DoABCTags now has default "- all -" item +- AS3: Better imports, use namespaces +- AS3: XML related instructions +- AS3: Anonymous functions with names +- AS3: Better initialization of const values +- Logging exceptions to log.txt file + +### Fixed +- AS3: set_local..get_local, dup, chained assignments, highlighting, callsupervoid, typenames, with statement, loops + +## [1.0.1] - 2012-12-26 +### Added +- AS3: Runtime namespace resolving +- AS3: Arguments variable +- AS3: Better recognizing Pre/Post Increments/Decrements +- AS3: Better declarations + +### Fixed +- AS3: Fixed static variables + +## [1.0.0] - 2012-12-24 +### Added +- Support for LZMA compressed files +- AS3: Detecting local register types for declaration. +- AS3: Displaying inline functions +- AS3: Last save/open dir is remembered +- AS3: Better usage detection for multinames +- AS3: Commandline arguments for exporting +- AS3: Better chained assignments +- AS2: FSCommand2 instruction support +- Proxy: Mimetype application/octet-stream added +- Added executable for Windows users. + +### Changed +- AS3: GUI - Constants tab moved to the top +- AS3: Deobfuscation is now optional, can be accessed via menu + +### Fixed +- AS3: rest parameter, for..in, fail on large classes (due to sub limiter) +- Other minor fixes + +## [beta 1] - 2011-07-30 +### Added +- AS3: Automatic computing method body parameters (EXPERIMENTAL) +- AS3: Editing return type of methods +- AS3: Editing type and default value for variables/constants (Slot/Const traits) +- AS1/2: Few enhancements +- About dialog + +### Changed +- Gui: Updated Icons + +### Fixed +- AS 1/2: Fixed large bug causing Ifs to not decompile properly +- Proxy: Some minor fixes + +## [alpha 10] - 2011-07-13 +### Added +- AS3:Highlighting actual line +- AS3:Completing instruction names via Ctrl+Space +- AS3:Editing method parameters, method body parameters via tab panel +- AS3:ByteCode minor_version 17 supported - decimal datatypes +- AS3:Local variables and method parameters take name from debug information if present +- AS3:Automatic renaming of classes/methods when obfuscated names +- AS3:Better error messages (When cannot decompile obfuscated code) + +### Fixed +- AS3:Fixed Vector datatypes (TypeName multiname, applytype instruction) +- AS3:Hilighting fixes +- AS3:Fixed decrement/increment statements decompilation +- AS3:Decompiler now adds variable declarations on the beginning of decompiled method +- AS3:Try/catch statements fixed when debug information present +- AS3:Fixed for each statements +- AS3:Other minor fixes + +## [alpha 9] - 2011-07-02 +### Added +- AS3: Added disassembling of some new types of instructions +- AS3: Exporting source as PCode + +### Fixed +- AS3: Many other bugfixes... + +## [alpha 8] - 2010-09-19 +### Added +- AS3: Editing exceptions +- AS3: Finding usage of multinames from constant table + +### Changed +- AS1/2: Better GUI +- AS1/2: Better decompiling of Ifs, For..in + +## [alpha 7] - 2010-09-04 +### Added +- Initial public release + +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 +[8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 +[8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 +[7.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.1...version7.1.2 +[7.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.0...version7.1.1 +[7.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.1...version7.1.0 +[7.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.0.0...version7.0.1 +[7.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.1...version7.0.0 +[6.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.1.0...version6.1.1 +[6.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.2...version6.1.0 +[6.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.1...version6.0.2 +[6.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version6.0.0...version6.0.1 +[6.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.3.0...version6.0.0 +[5.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.2.0...version5.3.0 +[5.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.1.0...version5.2.0 +[5.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.2...version5.1.0 +[5.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.1...version5.0.2 +[5.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version5.0.0...version5.0.1 +[5.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.1...version5.0.0 +[4.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.1.0...version4.1.1 +[4.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.5...version4.1.0 +[4.0.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.4...version4.0.5 +[4.0.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.3...version4.0.4 +[4.0.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.2...version4.0.3 +[4.0.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.1...version4.0.2 +[4.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version4.0.0...version4.0.1 +[4.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version3.0.0...version4.0.0 +[3.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.4...version3.0.0 +[2.1.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.3...version2.1.4 +[2.1.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.2...version2.1.3 +[2.1.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.1...version2.1.2 +[2.1.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u2...version2.1.1 +[2.1.0 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0u1...version2.1.0u2 +[2.1.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.1.0...version2.1.0u1 +[2.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u2...version2.1.0 +[2.0.1 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1u1...version2.0.1u2 +[2.0.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.1...version2.0.1u1 +[2.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version2.0.0...version2.0.1 +[2.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1u1...version2.0.0 +[1.8.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.1...version1.8.1u1 +[1.8.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0u1...version1.8.1 +[1.8.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.8.0...version1.8.0u1 +[1.8.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4u1...version1.8.0 +[1.7.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.4...version1.7.4u1 +[1.7.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u2...version1.7.4 +[1.7.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3u1...version1.7.3u2 +[1.7.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.3...version1.7.3u1 +[1.7.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u2...version1.7.3 +[1.7.2 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2u1...version1.7.2u2 +[1.7.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.2...version1.7.2u1 +[1.7.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.1...version1.7.2 +[1.7.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0u1...version1.7.1 +[1.7.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.7.0...version1.7.0u1 +[1.7.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.7...version1.7.0 +[1.6.7]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u2...version1.6.7 +[1.6.6 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6u1...version1.6.6u2 +[1.6.6 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.6...version1.6.6u1 +[1.6.6]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5u1...version1.6.6 +[1.6.5 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.5...version1.6.5u1 +[1.6.5]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4u1...version1.6.5 +[1.6.4 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.4...version1.6.4u1 +[1.6.4]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u2...version1.6.4 +[1.6.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3u1...version1.6.3u2 +[1.6.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.3...version1.6.3u1 +[1.6.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.2...version1.6.3 +[1.6.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.1...version1.6.2 +[1.6.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0u1...version1.6.1 +[1.6.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.6.0...version1.6.0u1 +[1.6.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.2...version1.6.0 +[1.5.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1u1...version1.5.2 +[1.5.1 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.1...version1.5.1u1 +[1.5.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0u1...version1.5.1 +[1.5.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.5.0...version1.5.0u1 +[1.5.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u2...version1.5.0 +[1.4.3 update 2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3u1...version1.4.3u2 +[1.4.3 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.3...version1.4.3u1 +[1.4.3]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2u1...version1.4.3 +[1.4.2 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.2...version1.4.2u1 +[1.4.2]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.1...version1.4.2 +[1.4.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0u1...version1.4.1 +[1.4.0 update 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.4.0...version1.4.0u1 +[1.4.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.1...version1.4.0 +[1.3.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.3.0...version1.3.1 +[1.3.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.2.0...version1.3.0 +[1.2.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.1.0...version1.2.0 +[1.1.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.1...version1.1.0 +[1.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version1.0.0...version1.0.1 +[1.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/beta1...version1.0.0 +[beta 1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha10...beta1 +[alpha 10]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha9...alpha10 +[alpha 9]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha8...alpha9 +[alpha 8]: https://github.com/jindrapetrik/jpexs-decompiler/compare/alpha7...alpha8 +[alpha 7]: https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/alpha7 +[#1156]: https://www.free-decompiler.com/flash/issues/1156 +[#1171]: https://www.free-decompiler.com/flash/issues/1171 +[#1170]: https://www.free-decompiler.com/flash/issues/1170 +[#1241]: https://www.free-decompiler.com/flash/issues/1241 +[#1162]: https://www.free-decompiler.com/flash/issues/1162 +[#1199]: https://www.free-decompiler.com/flash/issues/1199 +[#1151]: https://www.free-decompiler.com/flash/issues/1151 +[#1128]: https://www.free-decompiler.com/flash/issues/1128 +[#1163]: https://www.free-decompiler.com/flash/issues/1163 +[#1172]: https://www.free-decompiler.com/flash/issues/1172 +[#1174]: https://www.free-decompiler.com/flash/issues/1174 +[#1183]: https://www.free-decompiler.com/flash/issues/1183 +[#1193]: https://www.free-decompiler.com/flash/issues/1193 +[#1200]: https://www.free-decompiler.com/flash/issues/1200 +[#1198]: https://www.free-decompiler.com/flash/issues/1198 +[#1205]: https://www.free-decompiler.com/flash/issues/1205 +[#1194]: https://www.free-decompiler.com/flash/issues/1194 +[#1210]: https://www.free-decompiler.com/flash/issues/1210 +[#1217]: https://www.free-decompiler.com/flash/issues/1217 +[#1244]: https://www.free-decompiler.com/flash/issues/1244 +[#1247]: https://www.free-decompiler.com/flash/issues/1247 +[#1236]: https://www.free-decompiler.com/flash/issues/1236 +[#1251]: https://www.free-decompiler.com/flash/issues/1251 +[#1265]: https://www.free-decompiler.com/flash/issues/1265 +[#1268]: https://www.free-decompiler.com/flash/issues/1268 +[#1161]: https://www.free-decompiler.com/flash/issues/1161 +[#1118]: https://www.free-decompiler.com/flash/issues/1118 +[#409]: https://www.free-decompiler.com/flash/issues/409 +[#1132]: https://www.free-decompiler.com/flash/issues/1132 +[#1134]: https://www.free-decompiler.com/flash/issues/1134 +[#1121]: https://www.free-decompiler.com/flash/issues/1121 +[#1052]: https://www.free-decompiler.com/flash/issues/1052 +[#1145]: https://www.free-decompiler.com/flash/issues/1145 +[#758]: https://www.free-decompiler.com/flash/issues/758 +[#1096]: https://www.free-decompiler.com/flash/issues/1096 +[#1104]: https://www.free-decompiler.com/flash/issues/1104 +[#1107]: https://www.free-decompiler.com/flash/issues/1107 +[#1106]: https://www.free-decompiler.com/flash/issues/1106 +[#1113]: https://www.free-decompiler.com/flash/issues/1113 +[#1075]: https://www.free-decompiler.com/flash/issues/1075 +[#1127]: https://www.free-decompiler.com/flash/issues/1127 +[#1103]: https://www.free-decompiler.com/flash/issues/1103 +[#1133]: https://www.free-decompiler.com/flash/issues/1133 +[#1135]: https://www.free-decompiler.com/flash/issues/1135 +[#1138]: https://www.free-decompiler.com/flash/issues/1138 +[#1139]: https://www.free-decompiler.com/flash/issues/1139 +[#930]: https://www.free-decompiler.com/flash/issues/930 +[#1137]: https://www.free-decompiler.com/flash/issues/1137 +[#1144]: https://www.free-decompiler.com/flash/issues/1144 +[#1147]: https://www.free-decompiler.com/flash/issues/1147 +[#1148]: https://www.free-decompiler.com/flash/issues/1148 +[#1152]: https://www.free-decompiler.com/flash/issues/1152 +[#1154]: https://www.free-decompiler.com/flash/issues/1154 +[#116]: https://www.free-decompiler.com/flash/issues/116 +[#1070]: https://www.free-decompiler.com/flash/issues/1070 +[#1098]: https://www.free-decompiler.com/flash/issues/1098 +[#1033]: https://www.free-decompiler.com/flash/issues/1033 +[#1083]: https://www.free-decompiler.com/flash/issues/1083 +[#1091]: https://www.free-decompiler.com/flash/issues/1091 +[#1076]: https://www.free-decompiler.com/flash/issues/1076 +[#1068]: https://www.free-decompiler.com/flash/issues/1068 +[#1063]: https://www.free-decompiler.com/flash/issues/1063 +[#1019]: https://www.free-decompiler.com/flash/issues/1019 +[#1016]: https://www.free-decompiler.com/flash/issues/1016 +[#1010]: https://www.free-decompiler.com/flash/issues/1010 +[#1008]: https://www.free-decompiler.com/flash/issues/1008 +[#1004]: https://www.free-decompiler.com/flash/issues/1004 +[#933]: https://www.free-decompiler.com/flash/issues/933 +[#1062]: https://www.free-decompiler.com/flash/issues/1062 +[#418]: https://www.free-decompiler.com/flash/issues/418 +[#1047]: https://www.free-decompiler.com/flash/issues/1047 +[#812]: https://www.free-decompiler.com/flash/issues/812 +[#1056]: https://www.free-decompiler.com/flash/issues/1056 +[#1057]: https://www.free-decompiler.com/flash/issues/1057 +[#991]: https://www.free-decompiler.com/flash/issues/991 +[#689]: https://www.free-decompiler.com/flash/issues/689 +[#1060]: https://www.free-decompiler.com/flash/issues/1060 +[#1037]: https://www.free-decompiler.com/flash/issues/1037 +[#489]: https://www.free-decompiler.com/flash/issues/489 +[#1007]: https://www.free-decompiler.com/flash/issues/1007 +[#1044]: https://www.free-decompiler.com/flash/issues/1044 +[#947]: https://www.free-decompiler.com/flash/issues/947 +[#953]: https://www.free-decompiler.com/flash/issues/953 +[#954]: https://www.free-decompiler.com/flash/issues/954 +[#950]: https://www.free-decompiler.com/flash/issues/950 +[#945]: https://www.free-decompiler.com/flash/issues/945 +[#957]: https://www.free-decompiler.com/flash/issues/957 +[#956]: https://www.free-decompiler.com/flash/issues/956 +[#968]: https://www.free-decompiler.com/flash/issues/968 +[#978]: https://www.free-decompiler.com/flash/issues/978 +[#955]: https://www.free-decompiler.com/flash/issues/955 +[#966]: https://www.free-decompiler.com/flash/issues/966 +[#999]: https://www.free-decompiler.com/flash/issues/999 +[#1000]: https://www.free-decompiler.com/flash/issues/1000 +[#1017]: https://www.free-decompiler.com/flash/issues/1017 +[#1030]: https://www.free-decompiler.com/flash/issues/1030 +[#949]: https://www.free-decompiler.com/flash/issues/949 +[#944]: https://www.free-decompiler.com/flash/issues/944 +[#939]: https://www.free-decompiler.com/flash/issues/939 +[#942]: https://www.free-decompiler.com/flash/issues/942 +[#952]: https://www.free-decompiler.com/flash/issues/952 +[#858]: https://www.free-decompiler.com/flash/issues/858 +[#905]: https://www.free-decompiler.com/flash/issues/905 +[#920]: https://www.free-decompiler.com/flash/issues/920 +[#921]: https://www.free-decompiler.com/flash/issues/921 +[#924]: https://www.free-decompiler.com/flash/issues/924 +[#895]: https://www.free-decompiler.com/flash/issues/895 +[#884]: https://www.free-decompiler.com/flash/issues/884 +[#899]: https://www.free-decompiler.com/flash/issues/899 +[#903]: https://www.free-decompiler.com/flash/issues/903 +[#855]: https://www.free-decompiler.com/flash/issues/855 +[#850]: https://www.free-decompiler.com/flash/issues/850 +[#832]: https://www.free-decompiler.com/flash/issues/832 +[#904]: https://www.free-decompiler.com/flash/issues/904 +[#910]: https://www.free-decompiler.com/flash/issues/910 +[#922]: https://www.free-decompiler.com/flash/issues/922 +[#916]: https://www.free-decompiler.com/flash/issues/916 +[#938]: https://www.free-decompiler.com/flash/issues/938 +[#897]: https://www.free-decompiler.com/flash/issues/897 +[#470]: https://www.free-decompiler.com/flash/issues/470 +[#877]: https://www.free-decompiler.com/flash/issues/877 +[#878]: https://www.free-decompiler.com/flash/issues/878 +[#845]: https://www.free-decompiler.com/flash/issues/845 +[#883]: https://www.free-decompiler.com/flash/issues/883 +[#882]: https://www.free-decompiler.com/flash/issues/882 +[#760]: https://www.free-decompiler.com/flash/issues/760 +[#887]: https://www.free-decompiler.com/flash/issues/887 +[#842]: https://www.free-decompiler.com/flash/issues/842 +[#841]: https://www.free-decompiler.com/flash/issues/841 +[#772]: https://www.free-decompiler.com/flash/issues/772 +[#762]: https://www.free-decompiler.com/flash/issues/762 +[#862]: https://www.free-decompiler.com/flash/issues/862 +[#865]: https://www.free-decompiler.com/flash/issues/865 +[#613]: https://www.free-decompiler.com/flash/issues/613 +[#868]: https://www.free-decompiler.com/flash/issues/868 +[#713]: https://www.free-decompiler.com/flash/issues/713 +[#807]: https://www.free-decompiler.com/flash/issues/807 +[#728]: https://www.free-decompiler.com/flash/issues/728 +[#857]: https://www.free-decompiler.com/flash/issues/857 +[#860]: https://www.free-decompiler.com/flash/issues/860 +[#824]: https://www.free-decompiler.com/flash/issues/824 +[#809]: https://www.free-decompiler.com/flash/issues/809 +[#805]: https://www.free-decompiler.com/flash/issues/805 +[#825]: https://www.free-decompiler.com/flash/issues/825 +[#737]: https://www.free-decompiler.com/flash/issues/737 +[#350]: https://www.free-decompiler.com/flash/issues/350 +[#814]: https://www.free-decompiler.com/flash/issues/814 +[#816]: https://www.free-decompiler.com/flash/issues/816 +[#835]: https://www.free-decompiler.com/flash/issues/835 +[#836]: https://www.free-decompiler.com/flash/issues/836 +[#848]: https://www.free-decompiler.com/flash/issues/848 +[#817]: https://www.free-decompiler.com/flash/issues/817 +[#849]: https://www.free-decompiler.com/flash/issues/849 +[#852]: https://www.free-decompiler.com/flash/issues/852 +[#837]: https://www.free-decompiler.com/flash/issues/837 +[#811]: https://www.free-decompiler.com/flash/issues/811 +[#745]: https://www.free-decompiler.com/flash/issues/745 +[#803]: https://www.free-decompiler.com/flash/issues/803 +[#738]: https://www.free-decompiler.com/flash/issues/738 +[#742]: https://www.free-decompiler.com/flash/issues/742 +[#747]: https://www.free-decompiler.com/flash/issues/747 +[#749]: https://www.free-decompiler.com/flash/issues/749 +[#752]: https://www.free-decompiler.com/flash/issues/752 +[#753]: https://www.free-decompiler.com/flash/issues/753 +[#759]: https://www.free-decompiler.com/flash/issues/759 +[#766]: https://www.free-decompiler.com/flash/issues/766 +[#768]: https://www.free-decompiler.com/flash/issues/768 +[#773]: https://www.free-decompiler.com/flash/issues/773 +[#776]: https://www.free-decompiler.com/flash/issues/776 +[#783]: https://www.free-decompiler.com/flash/issues/783 +[#785]: https://www.free-decompiler.com/flash/issues/785 +[#787]: https://www.free-decompiler.com/flash/issues/787 +[#788]: https://www.free-decompiler.com/flash/issues/788 +[#790]: https://www.free-decompiler.com/flash/issues/790 +[#794]: https://www.free-decompiler.com/flash/issues/794 +[#798]: https://www.free-decompiler.com/flash/issues/798 +[#800]: https://www.free-decompiler.com/flash/issues/800 +[#676]: https://www.free-decompiler.com/flash/issues/676 +[#734]: https://www.free-decompiler.com/flash/issues/734 +[#687]: https://www.free-decompiler.com/flash/issues/687 +[#709]: https://www.free-decompiler.com/flash/issues/709 +[#732]: https://www.free-decompiler.com/flash/issues/732 +[#730]: https://www.free-decompiler.com/flash/issues/730 +[#735]: https://www.free-decompiler.com/flash/issues/735 +[#722]: https://www.free-decompiler.com/flash/issues/722 +[#725]: https://www.free-decompiler.com/flash/issues/725 +[#715]: https://www.free-decompiler.com/flash/issues/715 +[#635]: https://www.free-decompiler.com/flash/issues/635 +[#726]: https://www.free-decompiler.com/flash/issues/726 +[#716]: https://www.free-decompiler.com/flash/issues/716 +[#717]: https://www.free-decompiler.com/flash/issues/717 +[#718]: https://www.free-decompiler.com/flash/issues/718 +[#720]: https://www.free-decompiler.com/flash/issues/720 +[#719]: https://www.free-decompiler.com/flash/issues/719 +[#723]: https://www.free-decompiler.com/flash/issues/723 +[#288]: https://www.free-decompiler.com/flash/issues/288 +[#677]: https://www.free-decompiler.com/flash/issues/677 +[#389]: https://www.free-decompiler.com/flash/issues/389 +[#701]: https://www.free-decompiler.com/flash/issues/701 +[#707]: https://www.free-decompiler.com/flash/issues/707 +[#302]: https://www.free-decompiler.com/flash/issues/302 +[#685]: https://www.free-decompiler.com/flash/issues/685 +[#698]: https://www.free-decompiler.com/flash/issues/698 +[#710]: https://www.free-decompiler.com/flash/issues/710 +[#711]: https://www.free-decompiler.com/flash/issues/711 +[#681]: https://www.free-decompiler.com/flash/issues/681 +[#688]: https://www.free-decompiler.com/flash/issues/688 +[#691]: https://www.free-decompiler.com/flash/issues/691 +[#524]: https://www.free-decompiler.com/flash/issues/524 +[#663]: https://www.free-decompiler.com/flash/issues/663 +[#702]: https://www.free-decompiler.com/flash/issues/702 +[#539]: https://www.free-decompiler.com/flash/issues/539 +[#650]: https://www.free-decompiler.com/flash/issues/650 +[#680]: https://www.free-decompiler.com/flash/issues/680 +[#649]: https://www.free-decompiler.com/flash/issues/649 +[#656]: https://www.free-decompiler.com/flash/issues/656 +[#661]: https://www.free-decompiler.com/flash/issues/661 +[#664]: https://www.free-decompiler.com/flash/issues/664 +[#668]: https://www.free-decompiler.com/flash/issues/668 +[#674]: https://www.free-decompiler.com/flash/issues/674 +[#675]: https://www.free-decompiler.com/flash/issues/675 +[#632]: https://www.free-decompiler.com/flash/issues/632 +[#651]: https://www.free-decompiler.com/flash/issues/651 +[#678]: https://www.free-decompiler.com/flash/issues/678 +[#672]: https://www.free-decompiler.com/flash/issues/672 +[#684]: https://www.free-decompiler.com/flash/issues/684 +[#647]: https://www.free-decompiler.com/flash/issues/647 +[#648]: https://www.free-decompiler.com/flash/issues/648 +[#612]: https://www.free-decompiler.com/flash/issues/612 +[#623]: https://www.free-decompiler.com/flash/issues/623 +[#624]: https://www.free-decompiler.com/flash/issues/624 +[#627]: https://www.free-decompiler.com/flash/issues/627 +[#640]: https://www.free-decompiler.com/flash/issues/640 +[#595]: https://www.free-decompiler.com/flash/issues/595 +[#592]: https://www.free-decompiler.com/flash/issues/592 +[#585]: https://www.free-decompiler.com/flash/issues/585 +[#578]: https://www.free-decompiler.com/flash/issues/578 +[#501]: https://www.free-decompiler.com/flash/issues/501 +[#616]: https://www.free-decompiler.com/flash/issues/616 +[#559]: https://www.free-decompiler.com/flash/issues/559 +[#401]: https://www.free-decompiler.com/flash/issues/401 +[#593]: https://www.free-decompiler.com/flash/issues/593 +[#594]: https://www.free-decompiler.com/flash/issues/594 +[#579]: https://www.free-decompiler.com/flash/issues/579 +[#428]: https://www.free-decompiler.com/flash/issues/428 +[#337]: https://www.free-decompiler.com/flash/issues/337 +[#584]: https://www.free-decompiler.com/flash/issues/584 +[#576]: https://www.free-decompiler.com/flash/issues/576 +[#250]: https://www.free-decompiler.com/flash/issues/250 +[#580]: https://www.free-decompiler.com/flash/issues/580 +[#510]: https://www.free-decompiler.com/flash/issues/510 +[#583]: https://www.free-decompiler.com/flash/issues/583 +[#586]: https://www.free-decompiler.com/flash/issues/586 +[#574]: https://www.free-decompiler.com/flash/issues/574 +[#570]: https://www.free-decompiler.com/flash/issues/570 +[#563]: https://www.free-decompiler.com/flash/issues/563 +[#561]: https://www.free-decompiler.com/flash/issues/561 +[#509]: https://www.free-decompiler.com/flash/issues/509 +[#433]: https://www.free-decompiler.com/flash/issues/433 +[#557]: https://www.free-decompiler.com/flash/issues/557 +[#556]: https://www.free-decompiler.com/flash/issues/556 +[#504]: https://www.free-decompiler.com/flash/issues/504 +[#529]: https://www.free-decompiler.com/flash/issues/529 +[#538]: https://www.free-decompiler.com/flash/issues/538 +[#537]: https://www.free-decompiler.com/flash/issues/537 +[#540]: https://www.free-decompiler.com/flash/issues/540 +[#387]: https://www.free-decompiler.com/flash/issues/387 +[#552]: https://www.free-decompiler.com/flash/issues/552 +[#494]: https://www.free-decompiler.com/flash/issues/494 +[#513]: https://www.free-decompiler.com/flash/issues/513 +[#262]: https://www.free-decompiler.com/flash/issues/262 +[#499]: https://www.free-decompiler.com/flash/issues/499 +[#508]: https://www.free-decompiler.com/flash/issues/508 +[#305]: https://www.free-decompiler.com/flash/issues/305 +[#312]: https://www.free-decompiler.com/flash/issues/312 +[#503]: https://www.free-decompiler.com/flash/issues/503 +[#304]: https://www.free-decompiler.com/flash/issues/304 +[#306]: https://www.free-decompiler.com/flash/issues/306 +[#507]: https://www.free-decompiler.com/flash/issues/507 +[#424]: https://www.free-decompiler.com/flash/issues/424 +[#425]: https://www.free-decompiler.com/flash/issues/425 +[#478]: https://www.free-decompiler.com/flash/issues/478 +[#485]: https://www.free-decompiler.com/flash/issues/485 +[#517]: https://www.free-decompiler.com/flash/issues/517 +[#518]: https://www.free-decompiler.com/flash/issues/518 +[#361]: https://www.free-decompiler.com/flash/issues/361 +[#392]: https://www.free-decompiler.com/flash/issues/392 +[#516]: https://www.free-decompiler.com/flash/issues/516 +[#495]: https://www.free-decompiler.com/flash/issues/495 +[#496]: https://www.free-decompiler.com/flash/issues/496 +[#299]: https://www.free-decompiler.com/flash/issues/299 +[#303]: https://www.free-decompiler.com/flash/issues/303 +[#324]: https://www.free-decompiler.com/flash/issues/324 +[#346]: https://www.free-decompiler.com/flash/issues/346 +[#371]: https://www.free-decompiler.com/flash/issues/371 +[#426]: https://www.free-decompiler.com/flash/issues/426 +[#457]: https://www.free-decompiler.com/flash/issues/457 +[#458]: https://www.free-decompiler.com/flash/issues/458 +[#460]: https://www.free-decompiler.com/flash/issues/460 +[#462]: https://www.free-decompiler.com/flash/issues/462 +[#463]: https://www.free-decompiler.com/flash/issues/463 +[#465]: https://www.free-decompiler.com/flash/issues/465 +[#466]: https://www.free-decompiler.com/flash/issues/466 +[#369]: https://www.free-decompiler.com/flash/issues/369 +[#390]: https://www.free-decompiler.com/flash/issues/390 +[#453]: https://www.free-decompiler.com/flash/issues/453 +[#459]: https://www.free-decompiler.com/flash/issues/459 +[#461]: https://www.free-decompiler.com/flash/issues/461 +[#451]: https://www.free-decompiler.com/flash/issues/451 +[#454]: https://www.free-decompiler.com/flash/issues/454 +[#455]: https://www.free-decompiler.com/flash/issues/455 +[#474]: https://www.free-decompiler.com/flash/issues/474 +[#477]: https://www.free-decompiler.com/flash/issues/477 +[#481]: https://www.free-decompiler.com/flash/issues/481 +[#484]: https://www.free-decompiler.com/flash/issues/484 +[#493]: https://www.free-decompiler.com/flash/issues/493 +[#365]: https://www.free-decompiler.com/flash/issues/365 +[#366]: https://www.free-decompiler.com/flash/issues/366 +[#429]: https://www.free-decompiler.com/flash/issues/429 +[#447]: https://www.free-decompiler.com/flash/issues/447 +[#354]: https://www.free-decompiler.com/flash/issues/354 +[#438]: https://www.free-decompiler.com/flash/issues/438 +[#436]: https://www.free-decompiler.com/flash/issues/436 +[#446]: https://www.free-decompiler.com/flash/issues/446 +[#427]: https://www.free-decompiler.com/flash/issues/427 +[#405]: https://www.free-decompiler.com/flash/issues/405 +[#420]: https://www.free-decompiler.com/flash/issues/420 +[#421]: https://www.free-decompiler.com/flash/issues/421 +[#430]: https://www.free-decompiler.com/flash/issues/430 +[#397]: https://www.free-decompiler.com/flash/issues/397 +[#431]: https://www.free-decompiler.com/flash/issues/431 +[#169]: https://www.free-decompiler.com/flash/issues/169 +[#335]: https://www.free-decompiler.com/flash/issues/335 +[#404]: https://www.free-decompiler.com/flash/issues/404 +[#407]: https://www.free-decompiler.com/flash/issues/407 +[#399]: https://www.free-decompiler.com/flash/issues/399 +[#400]: https://www.free-decompiler.com/flash/issues/400 +[#398]: https://www.free-decompiler.com/flash/issues/398 +[#382]: https://www.free-decompiler.com/flash/issues/382 +[#396]: https://www.free-decompiler.com/flash/issues/396 +[#357]: https://www.free-decompiler.com/flash/issues/357 +[#391]: https://www.free-decompiler.com/flash/issues/391 +[#395]: https://www.free-decompiler.com/flash/issues/395 +[#334]: https://www.free-decompiler.com/flash/issues/334 +[#301]: https://www.free-decompiler.com/flash/issues/301 +[#383]: https://www.free-decompiler.com/flash/issues/383 +[#386]: https://www.free-decompiler.com/flash/issues/386 +[#367]: https://www.free-decompiler.com/flash/issues/367 +[#380]: https://www.free-decompiler.com/flash/issues/380 +[#292]: https://www.free-decompiler.com/flash/issues/292 +[#375]: https://www.free-decompiler.com/flash/issues/375 +[#378]: https://www.free-decompiler.com/flash/issues/378 +[#325]: https://www.free-decompiler.com/flash/issues/325 +[#210]: https://www.free-decompiler.com/flash/issues/210 +[#355]: https://www.free-decompiler.com/flash/issues/355 +[#313]: https://www.free-decompiler.com/flash/issues/313 +[#330]: https://www.free-decompiler.com/flash/issues/330 +[#332]: https://www.free-decompiler.com/flash/issues/332 +[#344]: https://www.free-decompiler.com/flash/issues/344 +[#295]: https://www.free-decompiler.com/flash/issues/295 +[#297]: https://www.free-decompiler.com/flash/issues/297 +[#307]: https://www.free-decompiler.com/flash/issues/307 +[#309]: https://www.free-decompiler.com/flash/issues/309 +[#310]: https://www.free-decompiler.com/flash/issues/310 +[#311]: https://www.free-decompiler.com/flash/issues/311 +[#327]: https://www.free-decompiler.com/flash/issues/327 +[#328]: https://www.free-decompiler.com/flash/issues/328 +[#333]: https://www.free-decompiler.com/flash/issues/333 +[#336]: https://www.free-decompiler.com/flash/issues/336 +[#338]: https://www.free-decompiler.com/flash/issues/338 +[#315]: https://www.free-decompiler.com/flash/issues/315 +[#123]: https://www.free-decompiler.com/flash/issues/123 +[#243]: https://www.free-decompiler.com/flash/issues/243 +[#326]: https://www.free-decompiler.com/flash/issues/326 +[#287]: https://www.free-decompiler.com/flash/issues/287 +[#290]: https://www.free-decompiler.com/flash/issues/290 +[#291]: https://www.free-decompiler.com/flash/issues/291 +[#294]: https://www.free-decompiler.com/flash/issues/294 +[#298]: https://www.free-decompiler.com/flash/issues/298 +[#296]: https://www.free-decompiler.com/flash/issues/296 +[#314]: https://www.free-decompiler.com/flash/issues/314 +[#316]: https://www.free-decompiler.com/flash/issues/316 +[#318]: https://www.free-decompiler.com/flash/issues/318 +[#319]: https://www.free-decompiler.com/flash/issues/319 +[#323]: https://www.free-decompiler.com/flash/issues/323 +[#223]: https://www.free-decompiler.com/flash/issues/223 +[#261]: https://www.free-decompiler.com/flash/issues/261 +[#269]: https://www.free-decompiler.com/flash/issues/269 +[#274]: https://www.free-decompiler.com/flash/issues/274 +[#275]: https://www.free-decompiler.com/flash/issues/275 +[#258]: https://www.free-decompiler.com/flash/issues/258 +[#267]: https://www.free-decompiler.com/flash/issues/267 +[#286]: https://www.free-decompiler.com/flash/issues/286 +[#233]: https://www.free-decompiler.com/flash/issues/233 +[#235]: https://www.free-decompiler.com/flash/issues/235 +[#263]: https://www.free-decompiler.com/flash/issues/263 +[#264]: https://www.free-decompiler.com/flash/issues/264 +[#265]: https://www.free-decompiler.com/flash/issues/265 +[#266]: https://www.free-decompiler.com/flash/issues/266 +[#281]: https://www.free-decompiler.com/flash/issues/281 +[#251]: https://www.free-decompiler.com/flash/issues/251 +[#257]: https://www.free-decompiler.com/flash/issues/257 +[#259]: https://www.free-decompiler.com/flash/issues/259 +[#260]: https://www.free-decompiler.com/flash/issues/260 +[#268]: https://www.free-decompiler.com/flash/issues/268 +[#272]: https://www.free-decompiler.com/flash/issues/272 +[#276]: https://www.free-decompiler.com/flash/issues/276 +[#220]: https://www.free-decompiler.com/flash/issues/220 +[#284]: https://www.free-decompiler.com/flash/issues/284 +[#232]: https://www.free-decompiler.com/flash/issues/232 +[#253]: https://www.free-decompiler.com/flash/issues/253 +[#137]: https://www.free-decompiler.com/flash/issues/137 +[#242]: https://www.free-decompiler.com/flash/issues/242 +[#244]: https://www.free-decompiler.com/flash/issues/244 +[#203]: https://www.free-decompiler.com/flash/issues/203 +[#225]: https://www.free-decompiler.com/flash/issues/225 +[#236]: https://www.free-decompiler.com/flash/issues/236 +[#245]: https://www.free-decompiler.com/flash/issues/245 +[#247]: https://www.free-decompiler.com/flash/issues/247 +[#248]: https://www.free-decompiler.com/flash/issues/248 +[#254]: https://www.free-decompiler.com/flash/issues/254 +[#255]: https://www.free-decompiler.com/flash/issues/255 +[#256]: https://www.free-decompiler.com/flash/issues/256 +[#241]: https://www.free-decompiler.com/flash/issues/241 +[#238]: https://www.free-decompiler.com/flash/issues/238 +[#239]: https://www.free-decompiler.com/flash/issues/239 +[#240]: https://www.free-decompiler.com/flash/issues/240 +[#237]: https://www.free-decompiler.com/flash/issues/237 +[#217]: https://www.free-decompiler.com/flash/issues/217 +[#219]: https://www.free-decompiler.com/flash/issues/219 +[#224]: https://www.free-decompiler.com/flash/issues/224 +[#121]: https://www.free-decompiler.com/flash/issues/121 +[#207]: https://www.free-decompiler.com/flash/issues/207 +[#151]: https://www.free-decompiler.com/flash/issues/151 +[#171]: https://www.free-decompiler.com/flash/issues/171 +[#206]: https://www.free-decompiler.com/flash/issues/206 +[#208]: https://www.free-decompiler.com/flash/issues/208 +[#209]: https://www.free-decompiler.com/flash/issues/209 +[#229]: https://www.free-decompiler.com/flash/issues/229 +[#213]: https://www.free-decompiler.com/flash/issues/213 +[#221]: https://www.free-decompiler.com/flash/issues/221 +[#226]: https://www.free-decompiler.com/flash/issues/226 +[#227]: https://www.free-decompiler.com/flash/issues/227 +[#230]: https://www.free-decompiler.com/flash/issues/230 +[#172]: https://www.free-decompiler.com/flash/issues/172 +[#174]: https://www.free-decompiler.com/flash/issues/174 +[#175]: https://www.free-decompiler.com/flash/issues/175 +[#212]: https://www.free-decompiler.com/flash/issues/212 +[#185]: https://www.free-decompiler.com/flash/issues/185 +[#186]: https://www.free-decompiler.com/flash/issues/186 +[#197]: https://www.free-decompiler.com/flash/issues/197 +[#216]: https://www.free-decompiler.com/flash/issues/216 +[#168]: https://www.free-decompiler.com/flash/issues/168 +[#176]: https://www.free-decompiler.com/flash/issues/176 +[#177]: https://www.free-decompiler.com/flash/issues/177 +[#202]: https://www.free-decompiler.com/flash/issues/202 +[#173]: https://www.free-decompiler.com/flash/issues/173 +[#190]: https://www.free-decompiler.com/flash/issues/190 +[#129]: https://www.free-decompiler.com/flash/issues/129 +[#153]: https://www.free-decompiler.com/flash/issues/153 +[#180]: https://www.free-decompiler.com/flash/issues/180 +[#136]: https://www.free-decompiler.com/flash/issues/136 +[#179]: https://www.free-decompiler.com/flash/issues/179 +[#144]: https://www.free-decompiler.com/flash/issues/144 +[#164]: https://www.free-decompiler.com/flash/issues/164 +[#167]: https://www.free-decompiler.com/flash/issues/167 +[#170]: https://www.free-decompiler.com/flash/issues/170 +[#178]: https://www.free-decompiler.com/flash/issues/178 +[#181]: https://www.free-decompiler.com/flash/issues/181 +[#182]: https://www.free-decompiler.com/flash/issues/182 +[#183]: https://www.free-decompiler.com/flash/issues/183 +[#184]: https://www.free-decompiler.com/flash/issues/184 +[#189]: https://www.free-decompiler.com/flash/issues/189 +[#191]: https://www.free-decompiler.com/flash/issues/191 +[#195]: https://www.free-decompiler.com/flash/issues/195 +[#196]: https://www.free-decompiler.com/flash/issues/196 +[#198]: https://www.free-decompiler.com/flash/issues/198 +[#200]: https://www.free-decompiler.com/flash/issues/200 +[#201]: https://www.free-decompiler.com/flash/issues/201 +[#166]: https://www.free-decompiler.com/flash/issues/166 +[#165]: https://www.free-decompiler.com/flash/issues/165 +[#63]: https://www.free-decompiler.com/flash/issues/63 +[#67]: https://www.free-decompiler.com/flash/issues/67 +[#117]: https://www.free-decompiler.com/flash/issues/117 +[#127]: https://www.free-decompiler.com/flash/issues/127 +[#134]: https://www.free-decompiler.com/flash/issues/134 +[#155]: https://www.free-decompiler.com/flash/issues/155 +[#142]: https://www.free-decompiler.com/flash/issues/142 +[#146]: https://www.free-decompiler.com/flash/issues/146 +[#130]: https://www.free-decompiler.com/flash/issues/130 +[#132]: https://www.free-decompiler.com/flash/issues/132 +[#145]: https://www.free-decompiler.com/flash/issues/145 +[#147]: https://www.free-decompiler.com/flash/issues/147 +[#148]: https://www.free-decompiler.com/flash/issues/148 +[#152]: https://www.free-decompiler.com/flash/issues/152 +[#156]: https://www.free-decompiler.com/flash/issues/156 +[#157]: https://www.free-decompiler.com/flash/issues/157 +[#158]: https://www.free-decompiler.com/flash/issues/158 +[#159]: https://www.free-decompiler.com/flash/issues/159 +[#160]: https://www.free-decompiler.com/flash/issues/160 +[#162]: https://www.free-decompiler.com/flash/issues/162 +[#163]: https://www.free-decompiler.com/flash/issues/163 +[#149]: https://www.free-decompiler.com/flash/issues/149 +[#150]: https://www.free-decompiler.com/flash/issues/150 +[#119]: https://www.free-decompiler.com/flash/issues/119 +[#101]: https://www.free-decompiler.com/flash/issues/101 +[#114]: https://www.free-decompiler.com/flash/issues/114 +[#135]: https://www.free-decompiler.com/flash/issues/135 +[#141]: https://www.free-decompiler.com/flash/issues/141 +[#102]: https://www.free-decompiler.com/flash/issues/102 +[#124]: https://www.free-decompiler.com/flash/issues/124 +[#128]: https://www.free-decompiler.com/flash/issues/128 +[#131]: https://www.free-decompiler.com/flash/issues/131 +[#104]: https://www.free-decompiler.com/flash/issues/104 +[#113]: https://www.free-decompiler.com/flash/issues/113 +[#133]: https://www.free-decompiler.com/flash/issues/133 +[#140]: https://www.free-decompiler.com/flash/issues/140 +[#108]: https://www.free-decompiler.com/flash/issues/108 +[#105]: https://www.free-decompiler.com/flash/issues/105 +[#109]: https://www.free-decompiler.com/flash/issues/109 +[#106]: https://www.free-decompiler.com/flash/issues/106 +[#107]: https://www.free-decompiler.com/flash/issues/107 +[#110]: https://www.free-decompiler.com/flash/issues/110 +[#103]: https://www.free-decompiler.com/flash/issues/103 +[#111]: https://www.free-decompiler.com/flash/issues/111 +[#96]: https://www.free-decompiler.com/flash/issues/96 +[#98]: https://www.free-decompiler.com/flash/issues/98 +[#99]: https://www.free-decompiler.com/flash/issues/99 +[#100]: https://www.free-decompiler.com/flash/issues/100 +[#85]: https://www.free-decompiler.com/flash/issues/85 +[#79]: https://www.free-decompiler.com/flash/issues/79 +[#92]: https://www.free-decompiler.com/flash/issues/92 +[#93]: https://www.free-decompiler.com/flash/issues/93 +[#94]: https://www.free-decompiler.com/flash/issues/94 +[#95]: https://www.free-decompiler.com/flash/issues/95 +[#86]: https://www.free-decompiler.com/flash/issues/86 +[#87]: https://www.free-decompiler.com/flash/issues/87 +[#88]: https://www.free-decompiler.com/flash/issues/88 +[#89]: https://www.free-decompiler.com/flash/issues/89 +[#82]: https://www.free-decompiler.com/flash/issues/82 +[#78]: https://www.free-decompiler.com/flash/issues/78 +[#81]: https://www.free-decompiler.com/flash/issues/81 +[#84]: https://www.free-decompiler.com/flash/issues/84 +[#83]: https://www.free-decompiler.com/flash/issues/83 +[#65]: https://www.free-decompiler.com/flash/issues/65 +[#48]: https://www.free-decompiler.com/flash/issues/48 +[#53]: https://www.free-decompiler.com/flash/issues/53 +[#66]: https://www.free-decompiler.com/flash/issues/66 +[#68]: https://www.free-decompiler.com/flash/issues/68 +[#69]: https://www.free-decompiler.com/flash/issues/69 +[#75]: https://www.free-decompiler.com/flash/issues/75 +[#73]: https://www.free-decompiler.com/flash/issues/73 +[#62]: https://www.free-decompiler.com/flash/issues/62 +[#72]: https://www.free-decompiler.com/flash/issues/72 +[#64]: https://www.free-decompiler.com/flash/issues/64 +[#38]: https://www.free-decompiler.com/flash/issues/38 +[#56]: https://www.free-decompiler.com/flash/issues/56 +[#57]: https://www.free-decompiler.com/flash/issues/57 +[#58]: https://www.free-decompiler.com/flash/issues/58 +[#45]: https://www.free-decompiler.com/flash/issues/45 +[#50]: https://www.free-decompiler.com/flash/issues/50 +[#51]: https://www.free-decompiler.com/flash/issues/51 +[#52]: https://www.free-decompiler.com/flash/issues/52 +[#47]: https://www.free-decompiler.com/flash/issues/47 +[#42]: https://www.free-decompiler.com/flash/issues/42 +[#39]: https://www.free-decompiler.com/flash/issues/39 +[#40]: https://www.free-decompiler.com/flash/issues/40 +[#44]: https://www.free-decompiler.com/flash/issues/44 +[#36]: https://www.free-decompiler.com/flash/issues/36 +[#43]: https://www.free-decompiler.com/flash/issues/43 +[#46]: https://www.free-decompiler.com/flash/issues/46 +[#3]: https://www.free-decompiler.com/flash/issues/3 +[#37]: https://www.free-decompiler.com/flash/issues/37 +[#34]: https://www.free-decompiler.com/flash/issues/34 +[#35]: https://www.free-decompiler.com/flash/issues/35 +[#32]: https://www.free-decompiler.com/flash/issues/32 [#31]: https://www.free-decompiler.com/flash/issues/31 \ No newline at end of file diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index fc81cf0ee..34b7473ff 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -1,2418 +1,2418 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui; - -import com.jpexs.debugger.flash.Debugger; -import com.jpexs.debugger.flash.DebuggerCommands; -import com.jpexs.debugger.flash.Variable; -import com.jpexs.debugger.flash.VariableType; -import com.jpexs.debugger.flash.messages.in.InCallFunction; -import com.jpexs.decompiler.flash.ApplicationInfo; -import com.jpexs.decompiler.flash.EventListener; -import com.jpexs.decompiler.flash.SWF; -import com.jpexs.decompiler.flash.SWFBundle; -import com.jpexs.decompiler.flash.SWFSourceInfo; -import com.jpexs.decompiler.flash.SearchMode; -import com.jpexs.decompiler.flash.SwfOpenException; -import com.jpexs.decompiler.flash.UrlResolver; -import com.jpexs.decompiler.flash.Version; -import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; -import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; -import com.jpexs.decompiler.flash.console.CommandLineArgumentParser; -import com.jpexs.decompiler.flash.console.ContextMenuTools; -import com.jpexs.decompiler.flash.exporters.modes.ExeExportMode; -import com.jpexs.decompiler.flash.gui.debugger.DebugListener; -import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; -import com.jpexs.decompiler.flash.gui.pipes.FirstInstance; -import com.jpexs.decompiler.flash.gui.proxy.ProxyFrame; -import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; -import com.jpexs.decompiler.flash.tags.Tag; -import com.jpexs.decompiler.flash.tags.base.FontTag; -import com.jpexs.decompiler.flash.tags.base.ImportTag; -import com.jpexs.decompiler.flash.treeitems.SWFList; -import com.jpexs.helpers.Cache; -import com.jpexs.helpers.CancellableWorker; -import com.jpexs.helpers.Helper; -import com.jpexs.helpers.Path; -import com.jpexs.helpers.ProgressListener; -import com.jpexs.helpers.Stopwatch; -import com.jpexs.helpers.streams.SeekableInputStream; -import com.sun.jna.Platform; -import com.sun.jna.platform.win32.Advapi32Util; -import com.sun.jna.platform.win32.Kernel32; -import com.sun.jna.platform.win32.WinReg; -import java.awt.AWTException; -import java.awt.Frame; -import java.awt.GraphicsEnvironment; -import java.awt.MenuItem; -import java.awt.PopupMenu; -import java.awt.SystemTray; -import java.awt.TrayIcon; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FilenameFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.lang.reflect.Field; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.URL; -import java.net.URLConnection; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.logging.ConsoleHandler; -import java.util.logging.FileHandler; -import java.util.logging.Formatter; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.JFileChooser; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.SwingWorker; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; -import javax.swing.filechooser.FileFilter; -import org.pushingpixels.substance.api.SubstanceLookAndFeel; - -/** - * Main executable class - * - * @author JPEXS - */ -public class Main { - - protected static ProxyFrame proxyFrame; - - private static List sourceInfos = new ArrayList<>(); - - public static LoadingDialog loadingDialog; - - private static boolean working = false; - - private static TrayIcon trayIcon; - - private static MenuItem stopMenuItem; - - private static volatile MainFrame mainFrame; - - public static final int UPDATE_SYSTEM_MAJOR = 1; - - public static final int UPDATE_SYSTEM_MINOR = 3; - - private static LoadFromMemoryFrame loadFromMemoryFrame; - - private static LoadFromCacheFrame loadFromCacheFrame; - - private static final Logger logger = Logger.getLogger(Main.class.getName()); - - public static DebugLogDialog debugDialog; - - public static boolean shouldCloseWhenClosingLoadingDialog; - - private static Debugger flashDebugger; - - private static DebuggerHandler debugHandler = null; - - //private static int ip = 0; - //private static String ipClass = null; - private static Process runProcess; - - private static boolean runProcessDebug; - - private static boolean runProcessDebugPCode; - - private static boolean inited = false; - - private static File runTempFile; - - private static List runTempFiles = new ArrayList<>(); - - public static void freeRun() { - synchronized (Main.class) { - if (runTempFile != null) { - runTempFile.delete(); - runTempFile = null; - } - for (File f : runTempFiles) { - f.delete(); - } - runTempFiles.clear(); - - runProcess = null; - } - if (mainFrame != null && mainFrame.getPanel() != null) { - mainFrame.getPanel().clearDebuggerColors(); - } - if (runProcessDebug) { - Main.getDebugHandler().disconnect(); - } - } - - public static synchronized boolean isDebugPaused() { - return runProcess != null && runProcessDebug && getDebugHandler().isPaused(); - } - - public static synchronized boolean isDebugRunning() { - return runProcess != null && runProcessDebug; - } - - public static synchronized boolean isDebugPCode() { - return runProcessDebugPCode; - } - - public static synchronized boolean isDebugConnected() { - return getDebugHandler().isConnected(); - } - - public static synchronized boolean isRunning() { - return runProcess != null && !runProcessDebug; - } - - /** - * FIXME! - * - * @param v - */ - public static synchronized void dumpBytes(Variable v) { - InCallFunction icf; - try { - long objectId = 0l; - if ((v.vType == VariableType.OBJECT || v.vType == VariableType.MOVIECLIP)) { - objectId = (Long) v.value; - } - Object oldPos = getDebugHandler().getVariable(objectId, "position", true).parent.value; - getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, 0); - icf = getDebugHandler().callFunction(false, "readUTF", v, new ArrayList<>()); - System.out.println("Result=" + icf.variables.get(0).value); - getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, oldPos); - } catch (DebuggerHandler.ActionScriptException ex) { - Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); - } - - } - - public static synchronized boolean addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { - DebuggerCommands.Watch w = getDebugHandler().addWatch(v, v_id, watchRead, watchWrite); - return w != null; - } - - public static void runPlayer(String title, final String exePath, String file, String flashVars) { - if (!new File(file).exists()) { - return; - } - if (flashVars != null && !flashVars.isEmpty()) { - file += "?" + flashVars; - } - final String ffile = file; - - CancellableWorker runWorker = new CancellableWorker() { - @Override - protected Object doInBackground() throws Exception { - Process proc; - try { - proc = Runtime.getRuntime().exec(new String[]{exePath, ffile}); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - return null; - } - boolean isDebug; - - synchronized (Main.class) { - runProcess = proc; - isDebug = runProcessDebug; - } - if (isDebug) { - mainFrame.getMenu().hilightPath("/debugging"); - } - mainFrame.getMenu().updateComponents(); - try { - if (proc != null) { - proc.waitFor(); - } - } catch (InterruptedException ex) { - if (proc != null) { - try { - proc.destroy(); - } catch (Exception ex2) { - //ignore - } - } - } - freeRun(); - stopDebugger(); - mainFrame.getMenu().updateComponents(); - return null; - } - - @Override - protected void done() { - Main.stopWork(); - } - - @Override - public void workerCancelled() { - Main.stopWork(); - synchronized (Main.class) { - if (runProcess != null) { - try { - runProcess.destroy(); - } catch (Exception ex) { - - } - } - } - freeRun(); - mainFrame.getMenu().updateComponents(); - } - }; - - mainFrame.getMenu().updateComponents(); - Main.startWork(title + "...", runWorker); - runWorker.execute(); - } - - public static void stopRun() { - - synchronized (Main.class) { - if (runProcess != null) { - runProcess.destroy(); - } - } - freeRun(); - stopDebugger(); - mainFrame.getMenu().updateComponents(); - } - - private static interface SwfPreparation { - - public SWF prepare(SWF swf); - } - - private static class SwfRunPrepare implements SwfPreparation { - - @Override - public SWF prepare(SWF swf) { - if (Configuration.autoOpenLoadedSWFs.get()) { - if (!DebuggerTools.hasDebugger(swf)) { - DebuggerTools.switchDebugger(swf); - } - DebuggerTools.injectDebugLoader(swf); - } - return swf; - } - } - - private static class SwfDebugPrepare extends SwfRunPrepare { - - private boolean doPCode; - - public SwfDebugPrepare(boolean doPCode) { - this.doPCode = doPCode; - } - - @Override - public SWF prepare(SWF instrSWF) { - instrSWF = super.prepare(instrSWF); - try { - File fTempFile = new File(instrSWF.getFile()); - instrSWF.enableDebugging(true, new File("."), true, doPCode); - FileOutputStream fos = new FileOutputStream(fTempFile); - instrSWF.saveTo(fos); - fos.close(); - if (!instrSWF.isAS3()) { - //Read again, because line file offsets changed with adding debug tags - //TODO: handle somehow without rereading? - instrSWF = null; - try (FileInputStream fis = new FileInputStream(fTempFile)) { - instrSWF = new SWF(fis, false, false); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } - if (instrSWF != null) { - String swfFileName = fTempFile.getAbsolutePath(); - if (swfFileName.toLowerCase().endsWith(".swf")) { - swfFileName = swfFileName.substring(0, swfFileName.length() - 4) + ".swd"; - } else { - swfFileName = swfFileName + ".swd"; - } - File swdFile = new File(swfFileName); - if (doPCode) { - instrSWF.generatePCodeSwdFile(swdFile, getPackBreakPoints(true)); - } else { - instrSWF.generateSwdFile(swdFile, getPackBreakPoints(true)); - } - } - } - } catch (IOException ex) { - //ignore, return instrSWF - } - return instrSWF; - } - } - - private static void prepareSwf(SwfPreparation prep, File toPrepareFile, File origFile, List tempFiles) throws IOException { - SWF instrSWF = null; - try (FileInputStream fis = new FileInputStream(toPrepareFile)) { - instrSWF = new SWF(fis, toPrepareFile.getAbsolutePath(), origFile.getName(), false); - } catch (InterruptedException ex) { - logger.log(Level.SEVERE, null, ex); - } - if (instrSWF != null) { - for (Tag t : instrSWF.getLocalTags()) { - if (t instanceof ImportTag) { - ImportTag it = (ImportTag) t; - String url = it.getUrl(); - File importedFile = new File(origFile.getParentFile(), url); - if (importedFile.exists()) { - File newTempFile = File.createTempFile("ffdec_run_import_", ".swf"); - it.setUrl("./" + newTempFile.getName()); - byte[] impData = Helper.readFile(importedFile.getAbsolutePath()); - Helper.writeFile(newTempFile.getAbsolutePath(), impData); - tempFiles.add(newTempFile); - prepareSwf(prep, newTempFile, importedFile, tempFiles); - } - } - } - if (prep != null) { - instrSWF = prep.prepare(instrSWF); - } - try (FileOutputStream fos = new FileOutputStream(toPrepareFile)) { - instrSWF.saveTo(fos); - } - } - } - - public static void run(SWF swf) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - advancedSettings("paths"); - return; - } - if (swf == null) { - return; - } - File tempFile; - List tempFiles = new ArrayList<>(); - try { - tempFile = File.createTempFile("ffdec_run_", ".swf"); - - try (FileOutputStream fos = new FileOutputStream(tempFile)) { - swf.saveTo(fos); - } - - prepareSwf(new SwfRunPrepare(), tempFile, new File(swf.getFile()), tempFiles); - - } catch (IOException ex) { - return; - - } - if (tempFile != null) { - synchronized (Main.class) { - runTempFile = tempFile; - runTempFiles = tempFiles; - runProcessDebug = false; - } - runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); - } - } - - public static void runDebug(SWF swf, final boolean doPCode) { - String flashVars = "";//key=val&key2=val2 - String playerLocation = Configuration.playerDebugLocation.get(); - if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { - View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); - Main.advancedSettings("paths"); - return; - } - if (swf == null) { - return; - } - File tempFile = null; - - try { - tempFile = File.createTempFile("ffdec_debug_", ".swf"); - } catch (Exception ex) { - - } - - if (tempFile != null) { - final File fTempFile = tempFile; - final List tempFiles = new ArrayList<>(); - CancellableWorker instrumentWorker = new CancellableWorker() { - @Override - protected Object doInBackground() throws Exception { - - try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { - swf.saveTo(fos); - } - prepareSwf(new SwfDebugPrepare(doPCode), fTempFile, new File(swf.getFile()), tempFiles); - return null; - } - - @Override - public void workerCancelled() { - Main.stopWork(); - } - - @Override - protected void done() { - synchronized (Main.class) { - runTempFile = fTempFile; - runProcessDebug = true; - runProcessDebugPCode = doPCode; - runTempFiles = tempFiles; - } - Main.stopWork(); - Main.startDebugger(); - runPlayer(AppStrings.translate("work.debugging.wait"), playerLocation, fTempFile.getAbsolutePath(), flashVars); - } - }; - - Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); - instrumentWorker.execute(); - } - } - - /* public static void debuggerNotSuspended() { - - }*/ - public static boolean isDebugging() { - return isDebugRunning(); - } - - public synchronized static int getIp(Object pack) { - return getDebugHandler().getBreakIp(); - } - - public synchronized static String getIpClass() { - return getDebugHandler().getBreakScriptName(); - } - - public static synchronized boolean isBreakPointValid(String scriptName, int line) { - return !getDebugHandler().isBreakpointInvalid(scriptName, line); - } - - public synchronized static void addBreakPoint(String scriptName, int line) { - getDebugHandler().addBreakPoint(scriptName, line); - } - - public synchronized static void removeBreakPoint(String scriptName, int line) { - getDebugHandler().removeBreakPoint(scriptName, line); - } - - public synchronized static boolean toggleBreakPoint(String scriptName, int line) { - if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line) || getDebugHandler().isBreakpointInvalid(scriptName, line)) { - getDebugHandler().removeBreakPoint(scriptName, line); - return false; - } else { - getDebugHandler().addBreakPoint(scriptName, line); - return true; - } - } - - public synchronized static Map> getPackBreakPoints(boolean validOnly) { - return getDebugHandler().getAllBreakPoints(validOnly); - } - - public synchronized static Set getScriptBreakPoints(String pack, boolean onlyValid) { - return getDebugHandler().getBreakPoints(pack, onlyValid); - } - - public static DebuggerHandler getDebugHandler() { - return debugHandler; - } - - public static void ensureMainFrame() { - if (mainFrame == null) { - synchronized (Main.class) { - if (mainFrame == null) { - MainFrame frame; - if (Configuration.useRibbonInterface.get()) { - frame = new MainFrameRibbon(); - } else { - frame = new MainFrameClassic(); - } - frame.getPanel().setErrorState(ErrorLogFrame.getInstance().getErrorState()); - mainFrame = frame; - } - } - } - } - - public static MainFrame getMainFrame() { - return mainFrame; - } - - public static void loadFromCache() { - if (loadFromCacheFrame == null) { - loadFromCacheFrame = new LoadFromCacheFrame(); - } - loadFromCacheFrame.setVisible(true); - } - - public static void loadFromMemory() { - if (loadFromMemoryFrame == null) { - loadFromMemoryFrame = new LoadFromMemoryFrame(mainFrame); - } - loadFromMemoryFrame.setVisible(true); - } - - public static void setVariable(long parentId, String varName, int valueType, Object value) { - getDebugHandler().setVariable(parentId, varName, valueType, value); - } - - public static void setSubLimiter(boolean value) { - if (value) { - AVM2Code.toSourceLimit = Configuration.sublimiter.get(); - } else { - AVM2Code.toSourceLimit = -1; - } - } - - public synchronized static boolean isInited() { - return inited; - } - - public synchronized static void setSessionLoaded(boolean v) { - inited = v; - } - - public static boolean isWorking() { - return working; - } - - public static void startProxy(int port) { - if (proxyFrame == null) { - proxyFrame = new ProxyFrame(mainFrame); - } - - proxyFrame.setPort(port); - addTrayIcon(); - switchProxy(); - } - - public static void showProxy() { - if (proxyFrame == null) { - proxyFrame = new ProxyFrame(mainFrame); - } - proxyFrame.setVisible(true); - proxyFrame.setState(Frame.NORMAL); - } - - public static void startWork(String name, CancellableWorker worker) { - startWork(name, -1, worker); - } - - public static void startWork(final String name, final int percent, final CancellableWorker worker) { - working = true; - View.execInEventDispatchLater(() -> { - if (mainFrame != null) { - mainFrame.getPanel().setWorkStatus(name, worker); - if (percent == -1) { - mainFrame.getPanel().hidePercent(); - } else { - mainFrame.getPanel().setPercent(percent); - } - } - if (loadingDialog != null) { - loadingDialog.setDetail(name); - loadingDialog.setPercent(percent); - } - if (CommandLineArgumentParser.isCommandLineMode()) { - System.out.println(name); - } - }); - } - - public static void stopWork() { - working = false; - View.execInEventDispatchLater(() -> { - if (mainFrame != null) { - mainFrame.getPanel().setWorkStatus("", null); - } - if (loadingDialog != null) { - loadingDialog.setDetail(""); - } - }); - } - - public static SWFList parseSWF(SWFSourceInfo sourceInfo) throws Exception { - SWFList result = new SWFList(); - - InputStream inputStream = sourceInfo.getInputStream(); - SWFBundle bundle = null; - FileInputStream fis = null; - if (inputStream == null) { - inputStream = new BufferedInputStream(fis = new FileInputStream(sourceInfo.getFile())); - bundle = sourceInfo.getBundle(false, SearchMode.ALL); - logger.log(Level.INFO, "Load file: {0}", sourceInfo.getFile()); - } else if (inputStream instanceof SeekableInputStream - || inputStream instanceof BufferedInputStream) { - try { - inputStream.reset(); - } catch (IOException ex) { - logger.log(Level.SEVERE, null, ex); - } - logger.log(Level.INFO, "Load stream: {0}", sourceInfo.getFileTitle()); - } - - Stopwatch sw = Stopwatch.startNew(); - if (bundle != null) { - result.bundle = bundle; - result.name = new File(sourceInfo.getFileTitleOrName()).getName(); - for (Entry streamEntry : bundle.getAll().entrySet()) { - InputStream stream = streamEntry.getValue(); - stream.reset(); - CancellableWorker worker = new CancellableWorker() { - @Override - public SWF doInBackground() throws Exception { - final CancellableWorker worker = this; - SWF swf = new SWF(stream, null, streamEntry.getKey(), new ProgressListener() { - @Override - public void progress(int p) { - startWork(AppStrings.translate("work.reading.swf"), p, worker); - } - }, Configuration.parallelSpeedUp.get()); - return swf; - } - }; - loadingDialog.setWroker(worker); - worker.execute(); - - try { - result.add(worker.get()); - } catch (CancellationException ex) { - logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", streamEntry.getKey()); - } - } - } else { - InputStream fInputStream = inputStream; - - final String[] yesno = new String[]{AppStrings.translate("button.yes"), AppStrings.translate("button.no"), AppStrings.translate("button.yes.all"), AppStrings.translate("button.no.all")}; - - CancellableWorker worker = new CancellableWorker() { - private boolean yestoall = false; - - private boolean notoall = false; - - private SWF open(InputStream is, String file, String fileTitle) throws IOException, InterruptedException { - final CancellableWorker worker = this; - - SWF swf = new SWF(is, file, fileTitle, new ProgressListener() { - @Override - public void progress(int p) { - startWork(AppStrings.translate("work.reading.swf"), p, worker); - } - }, Configuration.parallelSpeedUp.get(), false, true, new UrlResolver() { - @Override - public SWF resolveUrl(final String url) { - int opt = -1; - if (!(yestoall || notoall)) { - opt = View.showOptionDialog(null, AppStrings.translate("message.imported.swf").replace("%url%", url), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, yesno, AppStrings.translate("button.yes")); - if (opt == 2) { - yestoall = true; - } - if (opt == 3) { - notoall = true; - } - } - - if (yestoall) { - opt = 0; // yes - } else if (notoall) { - opt = 1; // no - } - - if (opt == 1) //no - { - return null; - } - - if (url.startsWith("http://") || url.startsWith("https://")) { - try { - URL u = new URL(url); - return open(u.openStream(), null, url); //? - } catch (Exception ex) { - //ignore - } - } else { - File f = new File(new File(file).getParentFile(), url); - if (f.exists()) { - try { - return open(new FileInputStream(f), f.getAbsolutePath(), f.getName()); - } catch (Exception ex) { - //ignore - } - } - } - Reference ret = new Reference<>(null); - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - - while (JOptionPane.YES_OPTION == View.showConfirmDialog(null, AppStrings.translate("message.imported.swf.manually").replace("%url%", url), AppStrings.translate("error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)) { - - JFileChooser fc = new JFileChooser(); - fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); - FileFilter allSupportedFilter = new FileFilter() { - private final String[] supportedExtensions = new String[]{".swf", ".gfx"}; - - @Override - public boolean accept(File f) { - String name = f.getName().toLowerCase(); - for (String ext : supportedExtensions) { - if (name.endsWith(ext)) { - return true; - } - } - return f.isDirectory(); - } - - @Override - public String getDescription() { - String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); - return AppStrings.translate("filter.supported") + " (" + exts + ")"; - } - }; - fc.setFileFilter(allSupportedFilter); - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - fc.addChoosableFileFilter(swfFilter); - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - fc.addChoosableFileFilter(gfxFilter); - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - int returnVal = fc.showOpenDialog(f); - if (returnVal == JFileChooser.APPROVE_OPTION) { - Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); - File selFile = Helper.fixDialogFile(fc.getSelectedFile()); - try { - ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); - break; - } catch (Exception ex) { - //ignore; - } - } else { - break; - } - } - } - }); - return ret.getVal(); - } - }); - return swf; - } - - @Override - public SWF doInBackground() throws Exception { - return open(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle()); - } - }; - if (loadingDialog != null) { - loadingDialog.setWroker(worker); - } - worker.execute(); - - try { - result.add(worker.get()); - } catch (CancellationException ex) { - logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", sourceInfo.getFileTitleOrName()); - } - } - - if (fis != null) { - logger.log(Level.INFO, "File loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); - fis.close(); - } else { - logger.log(Level.INFO, "Stream loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); - } - - result.sourceInfo = sourceInfo; - for (SWF swf : result) { - logger.log(Level.INFO, ""); - logger.log(Level.INFO, "== File information =="); - logger.log(Level.INFO, "Size: {0}", Helper.formatFileSize(swf.fileSize)); - logger.log(Level.INFO, "Flash version: {0}", swf.version); - int width = (int) ((swf.displayRect.Xmax - swf.displayRect.Xmin) / SWF.unitDivisor); - int height = (int) ((swf.displayRect.Ymax - swf.displayRect.Ymin) / SWF.unitDivisor); - logger.log(Level.INFO, "Width: {0}", width); - logger.log(Level.INFO, "Height: {0}", height); - - swf.swfList = result; - swf.addEventListener(new EventListener() { - @Override - public void handleExportingEvent(String type, int index, int count, Object data) { - String text = AppStrings.translate("work.exporting"); - if (type != null && type.length() > 0) { - text += " " + type; - } - - startWork(text + " " + index + "/" + count + " " + data, null); - } - - @Override - public void handleExportedEvent(String type, int index, int count, Object data) { - String text = AppStrings.translate("work.exported"); - if (type != null && type.length() > 0) { - text += " " + type; - } - - startWork(text + " " + index + "/" + count + " " + data, null); - } - - @Override - public void handleEvent(String event, Object data) { - if (event.equals("exporting") || event.equals("exported")) { - throw new Error("Event is not supported by this handler."); - } - if (event.equals("getVariables")) { - startWork(AppStrings.translate("work.gettingvariables") + "..." + (String) data, null); - } - if (event.equals("deobfuscate")) { - startWork(AppStrings.translate("work.deobfuscating") + "..." + (String) data, null); - } - if (event.equals("rename")) { - startWork(AppStrings.translate("work.renaming") + "..." + (String) data, null); - } - } - }); - } - - return result; - } - - public static void saveFile(SWF swf, String outfile) throws IOException { - saveFile(swf, outfile, SaveFileMode.SAVE, null); - } - - public static void saveFile(SWF swf, String outfile, SaveFileMode mode, ExeExportMode exeExportMode) throws IOException { - if (mode == SaveFileMode.SAVEAS && !swf.swfList.isBundle()) { - swf.setFile(outfile); - swf.swfList.sourceInfo.setFile(outfile); - } - File outfileF = new File(outfile); - File tmpFile = new File(outfile + ".tmp"); - try (FileOutputStream fos = new FileOutputStream(tmpFile); - BufferedOutputStream bos = new BufferedOutputStream(fos)) { - if (mode == SaveFileMode.EXE) { - switch (exeExportMode) { - case WRAPPER: - InputStream exeStream = View.class.getClassLoader().getResourceAsStream("com/jpexs/helpers/resource/Swf2Exe.bin"); - Helper.copyStream(exeStream, bos); - int width = swf.displayRect.Xmax - swf.displayRect.Xmin; - int height = swf.displayRect.Ymax - swf.displayRect.Ymin; - bos.write(width & 0xff); - bos.write((width >> 8) & 0xff); - bos.write((width >> 16) & 0xff); - bos.write((width >> 24) & 0xff); - bos.write(height & 0xff); - bos.write((height >> 8) & 0xff); - bos.write((height >> 16) & 0xff); - bos.write((height >> 24) & 0xff); - bos.write(Configuration.saveAsExeScaleMode.get()); - break; - case PROJECTOR_WIN: - case PROJECTOR_MAC: - case PROJECTOR_LINUX: - File projectorFile = Configuration.getProjectorFile(exeExportMode); - if (projectorFile == null) { - String message = "Projector not found, please place it to " + Configuration.getProjectorPath(); - logger.log(Level.SEVERE, message); - throw new IOException(message); - } - Helper.copyStream(new FileInputStream(projectorFile), bos); - bos.flush(); - break; - } - } - - long pos = fos.getChannel().position(); - swf.saveTo(bos); - - if (mode == SaveFileMode.EXE) { - switch (exeExportMode) { - case PROJECTOR_WIN: - case PROJECTOR_MAC: - case PROJECTOR_LINUX: - bos.flush(); - int swfSize = (int) (fos.getChannel().position() - pos); - - // write magic number - bos.write(0x56); - bos.write(0x34); - bos.write(0x12); - bos.write(0xfa); - - bos.write(swfSize & 0xff); - bos.write((swfSize >> 8) & 0xff); - bos.write((swfSize >> 16) & 0xff); - bos.write((swfSize >> 24) & 0xff); - } - } - } - if (tmpFile.exists()) { - if (tmpFile.length() > 0) { - outfileF.delete(); - if (!tmpFile.renameTo(outfileF)) { - tmpFile.delete(); - throw new IOException("Cannot access " + outfile); - } - } else { - throw new IOException("Output is empty"); - } - } else { - throw new IOException("Output not found"); - } - } - - private static class OpenFileWorker extends SwingWorker { - - private final SWFSourceInfo[] sourceInfos; - - private final Runnable executeAfterOpen; - - private final int[] reloadIndices; - - public OpenFileWorker(SWFSourceInfo sourceInfo) { - this(sourceInfo, -1); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, int reloadIndex) { - this(sourceInfo, null, reloadIndex); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { - this(sourceInfo, executeAfterOpen, -1); - } - - public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { - this.sourceInfos = new SWFSourceInfo[]{sourceInfo}; - this.executeAfterOpen = executeAfterOpen; - this.reloadIndices = new int[]{reloadIndex}; - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos) { - this(sourceInfos, null, null); - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen) { - this(sourceInfos, executeAfterOpen, null); - } - - public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { - this.sourceInfos = sourceInfos; - this.executeAfterOpen = executeAfterOpen; - int[] indices = new int[sourceInfos.length]; - for (int i = 0; i < indices.length; i++) { - indices[i] = -1; - } - this.reloadIndices = reloadIndices == null ? indices : reloadIndices; - } - - @Override - protected Object doInBackground() throws Exception { - boolean first = true; - SWF firstSWF = null; - for (int index = 0; index < sourceInfos.length; index++) { - SWFSourceInfo sourceInfo = sourceInfos[index]; - SWFList swfs = null; - try { - Main.startWork(AppStrings.translate("work.reading.swf") + "...", null); - try { - swfs = parseSWF(sourceInfo); - } catch (ExecutionException ex) { - Throwable cause = ex.getCause(); - if (cause instanceof SwfOpenException) { - throw (SwfOpenException) cause; - } - - throw ex; - } - } catch (OutOfMemoryError ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, "Cannot load SWF file. Out of memory."); - continue; - } catch (SwfOpenException ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, ex.getMessage()); - continue; - } catch (Exception ex) { - logger.log(Level.SEVERE, null, ex); - View.showMessageDialog(null, "Cannot load SWF file."); - continue; - } - - final SWFList swfs1 = swfs; - final boolean first1 = first; - first = false; - if (firstSWF == null && swfs1.size() > 0) { - firstSWF = swfs1.get(0); - } - - final int findex = index; - try { - View.execInEventDispatch(() -> { - Main.startWork(AppStrings.translate("work.creatingwindow") + "...", null); - ensureMainFrame(); - if (reloadIndices[findex] > -1) { - mainFrame.getPanel().loadSwfAtPos(swfs1, reloadIndices[findex]); - } else { - mainFrame.getPanel().load(swfs1, first1); - } - }); - } catch (Exception ex) { - logger.log(Level.SEVERE, null, ex); - } - } - - loadingDialog.setVisible(false); - shouldCloseWhenClosingLoadingDialog = false; - - final SWF fswf = firstSWF; - View.execInEventDispatch(() -> { - if (mainFrame != null) { - mainFrame.setVisible(true); - } - - Main.stopWork(); - - if (mainFrame != null && Configuration.gotoMainClassOnStartup.get()) { - mainFrame.getPanel().gotoDocumentClass(fswf); - } - - if (mainFrame != null && fswf != null) { - SwfSpecificConfiguration swfConf = Configuration.getSwfSpecificConfiguration(fswf.getShortFileName()); - if (swfConf != null) { - String pathStr = swfConf.lastSelectedPath; - mainFrame.getPanel().tagTree.setSelectionPathString(pathStr); - } - } - - if (executeAfterOpen != null) { - executeAfterOpen.run(); - } - }); - - return true; - } - } - - public static boolean reloadSWFs() { - CancellableWorker.cancelBackgroundThreads(); - if (Main.sourceInfos.isEmpty()) { - Helper.freeMem(); - showModeFrame(); - return true; - } else { - SWFSourceInfo[] sourceInfosCopy = new SWFSourceInfo[sourceInfos.size()]; - sourceInfos.toArray(sourceInfosCopy); - sourceInfos.clear(); - openFile(sourceInfosCopy); - return true; - } - } - - public static void reloadApp() { - if (debugDialog != null) { - debugDialog.setVisible(false); - debugDialog.dispose(); - debugDialog = null; - } - if (loadingDialog != null) { - synchronized (Main.class) { - if (loadingDialog != null) { - loadingDialog.setVisible(false); - loadingDialog.dispose(); - loadingDialog = null; - } - } - } - if (proxyFrame != null) { - proxyFrame.setVisible(false); - proxyFrame.dispose(); - proxyFrame = null; - } - if (loadFromMemoryFrame != null) { - loadFromMemoryFrame.setVisible(false); - loadFromMemoryFrame.dispose(); - loadFromMemoryFrame = null; - } - if (loadFromCacheFrame != null) { - loadFromCacheFrame.setVisible(false); - loadFromCacheFrame.dispose(); - loadFromCacheFrame = null; - } - if (mainFrame != null) { - mainFrame.setVisible(false); - mainFrame.getPanel().closeAll(false); - mainFrame.dispose(); - mainFrame = null; - } - FontTag.reload(); - Cache.clearAll(); - initGui(); - reloadSWFs(); - } - - public static OpenFileResult openFile(String swfFile, String fileTitle) { - View.checkAccess(); - - return openFile(swfFile, fileTitle, null); - } - - public static OpenFileResult openFile(String swfFile, String fileTitle, Runnable executeAfterOpen) { - View.checkAccess(); - - try { - File file = new File(swfFile); - if (!file.exists()) { - View.showMessageDialog(null, AppStrings.translate("open.error.fileNotFound"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); - return OpenFileResult.NOT_FOUND; - } - swfFile = file.getCanonicalPath(); - SWFSourceInfo sourceInfo = new SWFSourceInfo(null, swfFile, fileTitle); - OpenFileResult openResult = openFile(sourceInfo); - return openResult; - } catch (IOException ex) { - View.showMessageDialog(null, AppStrings.translate("open.error.cannotOpen"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); - return OpenFileResult.ERROR; - } - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}); - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen); - } - - public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { - View.checkAccess(); - - return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen, new int[]{reloadIndex}); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos) { - View.checkAccess(); - - return openFile(newSourceInfos, null); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen) { - View.checkAccess(); - - return openFile(newSourceInfos, executeAfterOpen, null); - } - - public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { - View.checkAccess(); - - if (mainFrame != null && !Configuration.openMultipleFiles.get()) { - sourceInfos.clear(); - mainFrame.getPanel().closeAll(false); - mainFrame.setVisible(false); - Helper.freeMem(); - reloadIndices = null; - } - - loadingDialog.setVisible(true); - - for (int i = 0; i < newSourceInfos.length; i++) { - SWFSourceInfo si = newSourceInfos[i]; - String fileName = si.getFile(); - if (fileName != null) { - Configuration.addRecentFile(fileName); - } - } - - OpenFileWorker wrk = new OpenFileWorker(newSourceInfos, executeAfterOpen, reloadIndices); - wrk.execute(); - if (reloadIndices == null) { - sourceInfos.addAll(Arrays.asList(newSourceInfos)); - } else { - for (int i = 0; i < reloadIndices.length; i++) { - sourceInfos.set(reloadIndices[i], newSourceInfos[i]); - } - } - return OpenFileResult.OK; - } - - public static void closeFile(SWFList swf) { - View.checkAccess(); - - sourceInfos.remove(swf.sourceInfo); - mainFrame.getPanel().close(swf); - } - - public static void reloadFile(SWFList swf) { - View.checkAccess(); - - openFile(swf.sourceInfo, null, sourceInfos.indexOf(swf.sourceInfo)); - } - - public static boolean closeAll() { - View.checkAccess(); - - boolean closeResult = mainFrame.getPanel().closeAll(true); - if (closeResult) { - sourceInfos.clear(); - } - - return closeResult; - } - - public static boolean saveFileDialog(SWF swf, final SaveFileMode mode) { - JFileChooser fc = new JFileChooser(); - fc.setCurrentDirectory(new File(Configuration.lastSaveDir.get())); - String ext = ".swf"; - switch (mode) { - case SAVE: - case SAVEAS: - if (swf.getFile() != null) { - ext = Path.getExtension(swf.getFile()); - } - break; - case EXE: - ext = ".exe"; - break; - } - - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - - ExeExportMode exeExportMode = null; - if (mode == SaveFileMode.EXE) { - exeExportMode = Configuration.exeExportMode.get(); - if (exeExportMode == null) { - exeExportMode = ExeExportMode.WRAPPER; - } - String filterDescription = null; - switch (exeExportMode) { - case WRAPPER: - case PROJECTOR_WIN: - ext = ".exe"; - filterDescription = "filter.exe"; - break; - case PROJECTOR_MAC: - ext = ".dmg"; - filterDescription = "filter.dmg"; - break; - case PROJECTOR_LINUX: - // linux projector is compressed with tar.gz - // todo: decompress - ext = ""; - filterDescription = "filter.linuxExe"; - break; - } - - String fext = ext; - String ffilterDescription = filterDescription; - FileFilter exeFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(fext)) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate(ffilterDescription); - } - }; - fc.setFileFilter(exeFilter); - } else if (swf.gfx) { - fc.addChoosableFileFilter(swfFilter); - fc.setFileFilter(gfxFilter); - } else { - fc.setFileFilter(swfFilter); - fc.addChoosableFileFilter(gfxFilter); - } - final String extension = ext; - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) { - File file = Helper.fixDialogFile(fc.getSelectedFile()); - FileFilter selFilter = fc.getFileFilter(); - try { - String fileName = file.getAbsolutePath(); - if (selFilter == swfFilter) { - if (!fileName.toLowerCase().endsWith(extension)) { - fileName += extension; - } - swf.gfx = false; - } - if (selFilter == gfxFilter) { - if (!fileName.toLowerCase().endsWith(".gfx")) { - fileName += ".gfx"; - } - swf.gfx = true; - } - Main.saveFile(swf, fileName, mode, exeExportMode); - Configuration.lastSaveDir.set(file.getParentFile().getAbsolutePath()); - return true; - } catch (IOException ex) { - View.showMessageDialog(null, AppStrings.translate("error.file.write")); - } - } - return false; - } - - public static boolean openFileDialog() { - View.checkAccess(); - - JFileChooser fc = new JFileChooser(); - if (Configuration.openMultipleFiles.get()) { - fc.setMultiSelectionEnabled(true); - } - fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); - FileFilter allSupportedFilter = new FileFilter() { - private final String[] supportedExtensions = new String[]{".swf", ".gfx", ".swc", ".zip", ".iggy"}; - - @Override - public boolean accept(File f) { - String name = f.getName().toLowerCase(); - for (String ext : supportedExtensions) { - if (name.endsWith(ext)) { - return true; - } - } - return f.isDirectory(); - } - - @Override - public String getDescription() { - String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); - return AppStrings.translate("filter.supported") + " (" + exts + ")"; - } - }; - fc.setFileFilter(allSupportedFilter); - FileFilter swfFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swf"); - } - }; - fc.addChoosableFileFilter(swfFilter); - - FileFilter swcFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".swc")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.swc"); - } - }; - fc.addChoosableFileFilter(swcFilter); - - FileFilter gfxFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.gfx"); - } - }; - fc.addChoosableFileFilter(gfxFilter); - - FileFilter iggyFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".iggy")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.iggy"); - } - }; - fc.addChoosableFileFilter(iggyFilter); - - FileFilter zipFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return (f.getName().toLowerCase().endsWith(".zip")) || (f.isDirectory()); - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.zip"); - } - }; - fc.addChoosableFileFilter(zipFilter); - - FileFilter binaryFilter = new FileFilter() { - @Override - public boolean accept(File f) { - return true; - } - - @Override - public String getDescription() { - return AppStrings.translate("filter.binary"); - } - }; - fc.addChoosableFileFilter(binaryFilter); - - fc.setAcceptAllFileFilterUsed(false); - JFrame f = new JFrame(); - View.setWindowIcon(f); - int returnVal = fc.showOpenDialog(f); - if (returnVal == JFileChooser.APPROVE_OPTION) { - Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); - File[] selFiles = fc.getSelectedFiles(); - for (File file : selFiles) { - File selfile = Helper.fixDialogFile(file); - Main.openFile(selfile.getAbsolutePath(), null); - } - return true; - } else { - return false; - } - } - - public static void displayErrorFrame() { - ErrorLogFrame.getInstance().setVisible(true); - } - - private static String md5(byte data[]) { - try { - java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); - byte[] array = md.digest(data); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < array.length; ++i) { - sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); - } - return sb.toString(); - } catch (java.security.NoSuchAlgorithmException e) { - } - return null; - } - - private static void initGui() { - if (GraphicsEnvironment.isHeadless()) { - System.err.println("Error: Your system does not support Graphic User Interface"); - exit(); - } - - System.setProperty("sun.java2d.d3d", "false"); - System.setProperty("sun.java2d.noddraw", "true"); - - if (Configuration.hwAcceleratedGraphics.get()) { - System.setProperty("sun.java2d.opengl", Configuration._debugMode.get() ? "True" : "true"); - } else { - System.setProperty("sun.java2d.opengl", "false"); - } - - initUiLang(); - - if (Configuration.useRibbonInterface.get()) { - View.setLookAndFeel(); - } else { - try { - UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, null); - UIManager.put("Tree.expandedIcon", null); - UIManager.put("Tree.collapsedIcon", null); - UIManager.put("ColorChooserUI", null); - UIManager.put("ColorChooser.swatchesRecentSwatchSize", null); - UIManager.put("ColorChooser.swatchesSwatchSize", null); - UIManager.put("RibbonApplicationMenuPopupPanelUI", null); - UIManager.put("RibbonApplicationMenuButtonUI", null); - UIManager.put("ProgressBarUI", null); - UIManager.put("TextField.background", null); - UIManager.put("FormattedTextField.background", null); - UIManager.put("CommandButtonUI", null); - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { - logger.log(Level.SEVERE, null, ex); - } - } - - View.execInEventDispatch(() -> { - ErrorLogFrame.createNewInstance(); - - autoCheckForUpdates(); - offerAssociation(); - loadingDialog = new LoadingDialog(); - - DebuggerTools.initDebugger().addMessageListener(new DebugListener() { - @Override - public void onMessage(String clientId, String msg) { - } - - @Override - public void onLoaderURL(String clientId, String url) { - } - - @Override - public void onLoaderBytes(String clientId, byte[] data) { - String hash = md5(data); - for (SWFList sl : Main.getMainFrame().getPanel().getSwfs()) { - for (int s = 0; s < sl.size(); s++) { - String t = sl.get(s).getFileTitle(); - if (t == null) { - t = ""; - } - if (t.endsWith(":" + hash)) { //this one is already opened - return; - } - } - } - SWF swf = Main.getMainFrame().getPanel().getCurrentSwf(); - - String title = swf == null ? "?" : swf.getFileTitle(); - final String titleWithHash = title + ":" + hash; - try { - final String tfile = tempFile(titleWithHash); - Helper.writeFile(tfile, data); - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - openFile(new SWFSourceInfo(null, tfile, titleWithHash)); - } - }); - } catch (IOException ex) { - logger.log(Level.SEVERE, "Cannot create tempfile"); - } - } - - @Override - public void onFinish(String clientId) { - } - }); - - try { - flashDebugger = new Debugger(); - debugHandler = new DebuggerHandler(); - debugHandler.addBreakListener(new DebuggerHandler.BreakListener() { - @Override - public void doContinue() { - mainFrame.getPanel().clearDebuggerColors(); - } - - @Override - public void breakAt(String scriptName, int line, final int classIndex, final int traitIndex, final int methodIndex) { - View.execInEventDispatch(new Runnable() { - @Override - public void run() { - mainFrame.getPanel().gotoScriptLine(getMainFrame().getPanel().getCurrentSwf(), scriptName, line, classIndex, traitIndex, methodIndex); - } - }); - } - }); - debugHandler.addConnectionListener(new DebuggerHandler.ConnectionListener() { - @Override - public void connected() { - Main.mainFrame.getMenu().updateComponents(); - } - - @Override - public void disconnected() { - if (Main.mainFrame != null && Main.mainFrame.getPanel() != null) { - Main.mainFrame.getPanel().refreshBreakPoints(); - } - } - }); - flashDebugger.addConnectionListener(debugHandler); - } catch (IOException ex) { - logger.log(Level.SEVERE, "eeex", ex); - } - }); - } - - public static void startDebugger() { - flashDebugger.startDebugger(); - } - - public static void stopDebugger() { - flashDebugger.stopDebugger(); - } - - public static void showModeFrame() { - ensureMainFrame(); - mainFrame.setVisible(true); - } - - private static void offerAssociation() { - boolean offered = Configuration.offeredAssociation.get(); - if (!offered) { - if (Platform.isWindows()) { - if ((!ContextMenuTools.isAddedToContextMenu()) && View.showConfirmDialog(null, "Do you want to add FFDec to context menu of SWF files?\n(Can be changed later from main menu)", "Context menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { - ContextMenuTools.addToContextMenu(true, false); - } - } - - Configuration.offeredAssociation.set(true); - } - } - - public static void initUiLang() { - if (GraphicsEnvironment.isHeadless()) { //No GUI in OS - return; - } - try { - Class cl = Class.forName("org.pushingpixels.substance.api.SubstanceLookAndFeel"); - Field field = cl.getDeclaredField("LABEL_BUNDLE"); - field.setAccessible(true); - field.set(null, null); - } catch (Throwable ex) { - logger.log(Level.SEVERE, null, ex); - } - - UIManager.put("OptionPane.okButtonText", AppStrings.translate("button.ok")); - UIManager.put("OptionPane.yesButtonText", AppStrings.translate("button.yes")); - UIManager.put("OptionPane.noButtonText", AppStrings.translate("button.no")); - UIManager.put("OptionPane.cancelButtonText", AppStrings.translate("button.cancel")); - UIManager.put("OptionPane.messageDialogTitle", AppStrings.translate("dialog.message.title")); - UIManager.put("OptionPane.titleText", AppStrings.translate("dialog.select.title")); - - UIManager.put("FileChooser.acceptAllFileFilterText", AppStrings.translate("FileChooser.acceptAllFileFilterText")); - UIManager.put("FileChooser.lookInLabelText", AppStrings.translate("FileChooser.lookInLabelText")); - UIManager.put("FileChooser.cancelButtonText", AppStrings.translate("button.cancel")); - UIManager.put("FileChooser.cancelButtonToolTipText", AppStrings.translate("button.cancel")); - UIManager.put("FileChooser.openButtonText", AppStrings.translate("FileChooser.openButtonText")); - UIManager.put("FileChooser.openButtonToolTipText", AppStrings.translate("FileChooser.openButtonToolTipText")); - UIManager.put("FileChooser.filesOfTypeLabelText", AppStrings.translate("FileChooser.filesOfTypeLabelText")); - UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); - UIManager.put("FileChooser.listViewButtonToolTipText", AppStrings.translate("FileChooser.listViewButtonToolTipText")); - UIManager.put("FileChooser.listViewButtonAccessibleName", AppStrings.translate("FileChooser.listViewButtonAccessibleName")); - UIManager.put("FileChooser.detailsViewButtonToolTipText", AppStrings.translate("FileChooser.detailsViewButtonToolTipText")); - UIManager.put("FileChooser.detailsViewButtonAccessibleName", AppStrings.translate("FileChooser.detailsViewButtonAccessibleName")); - UIManager.put("FileChooser.upFolderToolTipText", AppStrings.translate("FileChooser.upFolderToolTipText")); - UIManager.put("FileChooser.upFolderAccessibleName", AppStrings.translate("FileChooser.upFolderAccessibleName")); - UIManager.put("FileChooser.homeFolderToolTipText", AppStrings.translate("FileChooser.homeFolderToolTipText")); - UIManager.put("FileChooser.homeFolderAccessibleName", AppStrings.translate("FileChooser.homeFolderAccessibleName")); - UIManager.put("FileChooser.fileNameHeaderText", AppStrings.translate("FileChooser.fileNameHeaderText")); - UIManager.put("FileChooser.fileSizeHeaderText", AppStrings.translate("FileChooser.fileSizeHeaderText")); - UIManager.put("FileChooser.fileTypeHeaderText", AppStrings.translate("FileChooser.fileTypeHeaderText")); - UIManager.put("FileChooser.fileDateHeaderText", AppStrings.translate("FileChooser.fileDateHeaderText")); - UIManager.put("FileChooser.fileAttrHeaderText", AppStrings.translate("FileChooser.fileAttrHeaderText")); - UIManager.put("FileChooser.openDialogTitleText", AppStrings.translate("FileChooser.openDialogTitleText")); - UIManager.put("FileChooser.directoryDescriptionText", AppStrings.translate("FileChooser.directoryDescriptionText")); - UIManager.put("FileChooser.directoryOpenButtonText", AppStrings.translate("FileChooser.directoryOpenButtonText")); - UIManager.put("FileChooser.directoryOpenButtonToolTipText", AppStrings.translate("FileChooser.directoryOpenButtonToolTipText")); - UIManager.put("FileChooser.fileDescriptionText", AppStrings.translate("FileChooser.fileDescriptionText")); - UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); - UIManager.put("FileChooser.helpButtonText", AppStrings.translate("FileChooser.helpButtonText")); - UIManager.put("FileChooser.helpButtonToolTipText", AppStrings.translate("FileChooser.helpButtonToolTipText")); - UIManager.put("FileChooser.newFolderAccessibleName", AppStrings.translate("FileChooser.newFolderAccessibleName")); - UIManager.put("FileChooser.newFolderErrorText", AppStrings.translate("FileChooser.newFolderErrorText")); - UIManager.put("FileChooser.newFolderToolTipText", AppStrings.translate("FileChooser.newFolderToolTipText")); - UIManager.put("FileChooser.other.newFolder", AppStrings.translate("FileChooser.other.newFolder")); - UIManager.put("FileChooser.other.newFolder.subsequent", AppStrings.translate("FileChooser.other.newFolder.subsequent")); - UIManager.put("FileChooser.win32.newFolder", AppStrings.translate("FileChooser.win32.newFolder")); - UIManager.put("FileChooser.win32.newFolder.subsequent", AppStrings.translate("FileChooser.win32.newFolder.subsequent")); - UIManager.put("FileChooser.saveButtonText", AppStrings.translate("FileChooser.saveButtonText")); - UIManager.put("FileChooser.saveButtonToolTipText", AppStrings.translate("FileChooser.saveButtonToolTipText")); - UIManager.put("FileChooser.saveDialogTitleText", AppStrings.translate("FileChooser.saveDialogTitleText")); - UIManager.put("FileChooser.saveInLabelText", AppStrings.translate("FileChooser.saveInLabelText")); - UIManager.put("FileChooser.updateButtonText", AppStrings.translate("FileChooser.updateButtonText")); - UIManager.put("FileChooser.updateButtonToolTipText", AppStrings.translate("FileChooser.updateButtonToolTipText")); - - UIManager.put("FileChooser.detailsViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.detailsViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewButtonToolTip.textAndMnemonic")); - UIManager.put("FileChooser.fileAttrHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileAttrHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileDateHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileDateHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileNameHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileNameHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.fileNameLabel.textAndMnemonic")); - UIManager.put("FileChooser.fileSizeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileSizeHeader.textAndMnemonic")); - UIManager.put("FileChooser.fileTypeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileTypeHeader.textAndMnemonic")); - UIManager.put("FileChooser.filesOfTypeLabel.textAndMnemonic", AppStrings.translate("FileChooser.filesOfTypeLabel.textAndMnemonic")); - UIManager.put("FileChooser.folderNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.folderNameLabel.textAndMnemonic")); - UIManager.put("FileChooser.homeFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.homeFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.listViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.listViewActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.listViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.listViewButtonToolTip.textAndMnemonic")); - UIManager.put("FileChooser.lookInLabel.textAndMnemonic", AppStrings.translate("FileChooser.lookInLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.newFolderActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.newFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.refreshActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.refreshActionLabel.textAndMnemonic")); - UIManager.put("FileChooser.saveInLabel.textAndMnemonic", AppStrings.translate("FileChooser.saveInLabel.textAndMnemonic")); - UIManager.put("FileChooser.upFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.upFolderToolTip.textAndMnemonic")); - UIManager.put("FileChooser.viewMenuButtonAccessibleName", AppStrings.translate("FileChooser.viewMenuButtonAccessibleName")); - UIManager.put("FileChooser.viewMenuButtonToolTipText", AppStrings.translate("FileChooser.viewMenuButtonToolTipText")); - UIManager.put("FileChooser.viewMenuLabel.textAndMnemonic", AppStrings.translate("FileChooser.viewMenuLabel.textAndMnemonic")); - UIManager.put("FileChooser.newFolderActionLabelText", AppStrings.translate("FileChooser.newFolderActionLabelText")); - UIManager.put("FileChooser.listViewActionLabelText", AppStrings.translate("FileChooser.listViewActionLabelText")); - UIManager.put("FileChooser.detailsViewActionLabelText", AppStrings.translate("FileChooser.detailsViewActionLabelText")); - UIManager.put("FileChooser.refreshActionLabelText", AppStrings.translate("FileChooser.refreshActionLabelText")); - UIManager.put("FileChooser.sortMenuLabelText", AppStrings.translate("FileChooser.sortMenuLabelText")); - UIManager.put("FileChooser.viewMenuLabelText", AppStrings.translate("FileChooser.viewMenuLabelText")); - UIManager.put("FileChooser.fileSizeKiloBytes", AppStrings.translate("FileChooser.fileSizeKiloBytes")); - UIManager.put("FileChooser.fileSizeMegaBytes", AppStrings.translate("FileChooser.fileSizeMegaBytes")); - UIManager.put("FileChooser.fileSizeGigaBytes", AppStrings.translate("FileChooser.fileSizeGigaBytes")); - UIManager.put("FileChooser.folderNameLabelText", AppStrings.translate("FileChooser.folderNameLabelText")); - - UIManager.put("ColorChooser.okText", AppStrings.translate("ColorChooser.okText")); - UIManager.put("ColorChooser.cancelText", AppStrings.translate("ColorChooser.cancelText")); - UIManager.put("ColorChooser.resetText", AppStrings.translate("ColorChooser.resetText")); - UIManager.put("ColorChooser.previewText", AppStrings.translate("ColorChooser.previewText")); - UIManager.put("ColorChooser.swatchesNameText", AppStrings.translate("ColorChooser.swatchesNameText")); - UIManager.put("ColorChooser.swatchesRecentText", AppStrings.translate("ColorChooser.swatchesRecentText")); - UIManager.put("ColorChooser.sampleText", AppStrings.translate("ColorChooser.sampleText")); - - } - - public static void initLang() { - if (!Configuration.locale.hasValue()) { - if (Platform.isWindows()) { - //Load from Installer - String uninstKey = "{E618D276-6596-41F4-8A98-447D442A77DB}_is1"; - uninstKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstKey; - try { - if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey)) { - if (Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language")) { - String installedLoc = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language"); - int lcid = Integer.parseInt(installedLoc); - char[] buf = new char[9]; - int cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO639LANGNAME, buf, 9); - String langCode = new String(buf, 0, cnt).trim().toLowerCase(); - - cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO3166CTRYNAME, buf, 9); - String countryCode = new String(buf, 0, cnt).trim().toLowerCase(); - - List langs = Arrays.asList(SelectLanguageDialog.getAvailableLanguages()); - for (int i = 0; i < langs.size(); i++) { - langs.set(i, langs.get(i).toLowerCase()); - } - - String selectedLang = null; - - if (langs.contains(langCode + "-" + countryCode)) { - selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode + "-" + countryCode)]; - } else if (langs.contains(langCode)) { - selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode)]; - } - if (selectedLang != null) { - Configuration.locale.set(selectedLang); - } - } - } - } catch (Exception ex) { - //ignore - } - } - } - Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); - AppStrings.updateLanguage(); - - Helper.decompilationErrorAdd = AppStrings.translate(Configuration.autoDeobfuscate.get() ? "deobfuscation.comment.failed" : "deobfuscation.comment.tryenable"); - } - - /** - * Clear old FFDec/JavactiveX temp files - */ - private static void clearTemp() { - String tempDirPath = System.getProperty("java.io.tmpdir"); - if (tempDirPath == null) { - return; - } - File tempDir = new File(tempDirPath); - if (!tempDir.exists()) { - return; - } - File[] delFiles = tempDir.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return name.matches("ffdec_cache.*\\.tmp") || name.matches("javactivex_.*\\.exe") || name.matches("temp[0-9]+\\.swf") || name.matches("ffdec_view_.*\\.swf"); - } - }); - - if (delFiles != null) { - for (File f : delFiles) { - try { - f.delete(); - } catch (Exception ex) { - //ignore - } - } - } - } - - /** - * @param args the command line arguments - * @throws IOException On error - */ - public static void main(String[] args) throws IOException { - setSessionLoaded(false); - - clearTemp(); - - try { - SWFDecompilerPlugin.loadPlugins(); - } catch (Throwable ex) { - logger.log(Level.SEVERE, "Failed to load plugins", ex); - } - - AppStrings.setResourceClass(MainFrame.class); - initLogging(Configuration._debugMode.get()); - - initLang(); - - if (Configuration.cacheOnDisk.get()) { - Cache.setStorageType(Cache.STORAGE_FILES); - } else { - Cache.setStorageType(Cache.STORAGE_MEMORY); - } - - if (args.length == 0) { - initGui(); - checkLibraryVersion(); - View.execInEventDispatch(() -> { - if (Configuration.allowOnlyOneInstance.get() && FirstInstance.focus()) { //Try to focus first instance - Main.exit(); - } else { - showModeFrame(); - reloadLastSession(); - } - }); - } else { - checkLibraryVersion(); - setSessionLoaded(true); - String[] filesToOpen = CommandLineArgumentParser.parseArguments(args); - if (filesToOpen != null && filesToOpen.length > 0) { - View.execInEventDispatch(() -> { - initGui(); - shouldCloseWhenClosingLoadingDialog = true; - if (Configuration.allowOnlyOneInstance.get() && FirstInstance.openFiles(Arrays.asList(filesToOpen))) { //Try to open in first instance - Main.exit(); - } else { - for (String fileToOpen : filesToOpen) { - openFile(fileToOpen, null); - } - } - }); - } - } - } - - private static void checkLibraryVersion() { - if (!ApplicationInfo.version.equals("unknown") && !ApplicationInfo.libraryVersion.equals("unknown") - && !Objects.equals(ApplicationInfo.version, ApplicationInfo.libraryVersion)) { - logger.log(Level.WARNING, "Application version is different from library version. FFDec may not work properly."); - } - } - - private static void reloadLastSession() { - boolean openingFiles = false; - if (Configuration.saveSessionOnExit.get()) { - String lastSession = Configuration.lastSessionFiles.get(); - if (lastSession != null && lastSession.length() > 0) { - String[] filesToOpen = lastSession.split(File.pathSeparator, -1); - List exfiles = new ArrayList<>(); - List extitles = new ArrayList<>(); - String lastSessionTitles = Configuration.lastSessionFileTitles.get(); - String[] fileTitles = new String[0]; - if (lastSessionTitles != null && !lastSessionTitles.isEmpty()) { - fileTitles = lastSessionTitles.split(File.pathSeparator, -1); - } - for (int i = 0; i < filesToOpen.length; i++) { - if (new File(filesToOpen[i]).exists()) { - exfiles.add(filesToOpen[i]); - if (fileTitles.length > i) { - extitles.add(fileTitles[i]); - } else { - extitles.add(null); - } - } - } - SWFSourceInfo[] sourceInfos = new SWFSourceInfo[exfiles.size()]; - for (int i = 0; i < exfiles.size(); i++) { - String extitle = extitles.get(i); - sourceInfos[i] = new SWFSourceInfo(null, exfiles.get(i), extitle == null || extitle.isEmpty() ? null : extitle); - } - if (sourceInfos.length > 0) { - openingFiles = true; - openFile(sourceInfos, () -> { - mainFrame.getPanel().tagTree.setSelectionPathString(Configuration.lastSessionSelection.get()); - setSessionLoaded(true); - }); - } - } - } - - if (!openingFiles) { - setSessionLoaded(true); - } - } - - public static String tempFile(String url) throws IOException { - File f = new File(Configuration.getFFDecHome() + "saved" + File.separator); - Path.createDirectorySafe(f); - return Configuration.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp"; - } - - public static void removeTrayIcon() { - if (SystemTray.isSupported()) { - SystemTray tray = SystemTray.getSystemTray(); - if (trayIcon != null) { - tray.remove(trayIcon); - trayIcon = null; - } - } - } - - public static void switchProxy() { - proxyFrame.switchState(); - if (stopMenuItem != null) { - if (proxyFrame.isRunning()) { - stopMenuItem.setLabel(AppStrings.translate("proxy.stop")); - } else { - stopMenuItem.setLabel(AppStrings.translate("proxy.start")); - } - } - } - - public static void addTrayIcon() { - if (trayIcon != null) { - return; - } - if (SystemTray.isSupported()) { - SystemTray tray = SystemTray.getSystemTray(); - trayIcon = new TrayIcon(View.loadImage("proxy16"), ApplicationInfo.VENDOR + " " + ApplicationInfo.SHORT_APPLICATION_NAME + " " + AppStrings.translate("proxy")); - trayIcon.setImageAutoSize(true); - PopupMenu trayPopup = new PopupMenu(); - - ActionListener trayListener = new ActionListener() { - /** - * Invoked when an action occurs. - */ - @Override - public void actionPerformed(ActionEvent e) { - if (e.getActionCommand().equals("EXIT")) { - Main.exit(); - } - if (e.getActionCommand().equals("SHOW")) { - Main.showProxy(); - } - if (e.getActionCommand().equals("SWITCH")) { - Main.switchProxy(); - } - } - }; - - MenuItem showMenuItem = new MenuItem(AppStrings.translate("proxy.show")); - showMenuItem.setActionCommand("SHOW"); - showMenuItem.addActionListener(trayListener); - trayPopup.add(showMenuItem); - stopMenuItem = new MenuItem(AppStrings.translate("proxy.start")); - stopMenuItem.setActionCommand("SWITCH"); - stopMenuItem.addActionListener(trayListener); - trayPopup.add(stopMenuItem); - trayPopup.addSeparator(); - MenuItem exitMenuItem = new MenuItem(AppStrings.translate("exit")); - exitMenuItem.setActionCommand("EXIT"); - exitMenuItem.addActionListener(trayListener); - trayPopup.add(exitMenuItem); - - trayIcon.setPopupMenu(trayPopup); - trayIcon.addMouseListener(new MouseAdapter() { - /** - * {@inheritDoc} - */ - @Override - public void mouseClicked(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1) { - Main.showProxy(); - } - } - }); - try { - tray.add(trayIcon); - } catch (AWTException ex) { - } - } - } - - public static void exit() { - Configuration.saveConfig(); - if (mainFrame != null && mainFrame.getPanel() != null) { - mainFrame.getPanel().unloadFlashPlayer(); - mainFrame.dispose(); - } - if (fileTxt != null) { - try { - fileTxt.flush(); - fileTxt.close(); - } catch (Exception ex) { - //ignore - } - } - System.exit(0); - } - - public static void about() { - (new AboutDialog()).setVisible(true); - } - - public static void advancedSettings() { - advancedSettings(null); - } - - public static void advancedSettings(String category) { - (new AdvancedSettingsDialog(category)).setVisible(true); - } - - public static void autoCheckForUpdates() { - if (Configuration.checkForUpdatesAuto.get()) { - Calendar lastUpdatesCheckDate = Configuration.lastUpdatesCheckDate.get(); - if ((lastUpdatesCheckDate == null) || (lastUpdatesCheckDate.getTime().getTime() < Calendar.getInstance().getTime().getTime() - Configuration.checkForUpdatesDelay.get())) { - new SwingWorker() { - @Override - protected Object doInBackground() throws Exception { - checkForUpdates(); - return null; - } - }.execute(); - } - } - } - - public static boolean checkForUpdates() { - String currentVersion = ApplicationInfo.version; - if (currentVersion.equals("unknown")) { - // sometimes during development the version information is not available - return false; - } - - List accepted = new ArrayList<>(); - if (Configuration.checkForUpdatesStable.get()) { - accepted.add("stable"); - } - if (Configuration.checkForUpdatesNightly.get()) { - accepted.add("nightly"); - } - - if (accepted.isEmpty()) { - return false; - } - - String acceptVersions = String.join(",", accepted); - try { - String proxyAddress = Configuration.updateProxyAddress.get(); - URL url = new URL(ApplicationInfo.updateCheckUrl); - - URLConnection uc; - if (proxyAddress != null && !proxyAddress.isEmpty()) { - int port = 8080; - if (proxyAddress.contains(":")) { - String[] parts = proxyAddress.split(":"); - port = Integer.parseInt(parts[1]); - proxyAddress = parts[0]; - } - - uc = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress, port))); - } else { - uc = url.openConnection(); - } - uc.setRequestProperty("X-Accept-Versions", acceptVersions); - uc.setRequestProperty("X-Update-Major", "" + UPDATE_SYSTEM_MAJOR); - uc.setRequestProperty("X-Update-Minor", "" + UPDATE_SYSTEM_MINOR); - uc.setRequestProperty("User-Agent", ApplicationInfo.shortApplicationVerName); - String currentLoc = Configuration.locale.get("en"); - uc.setRequestProperty("Accept-Language", currentLoc + ("en".equals(currentLoc) ? "" : ", en;q=0.8")); - - uc.connect(); - - BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); - String s; - final java.util.List versions = new ArrayList<>(); - String header = ""; - Pattern headerPat = Pattern.compile("\\[([a-zA-Z0-9]+)\\]"); - int updateMajor; - int updateMinor; - Version ver = null; - while ((s = br.readLine()) != null) { - - Matcher m = headerPat.matcher(s); - if (m.matches()) { - header = m.group(1); - if (header.equals("version")) { - ver = new Version(); - versions.add(ver); - } - if (header.equals("noversion")) { - break; - } - } else if (s.contains("=")) { - String key = s.substring(0, s.indexOf('=')); - String val = s.substring(s.indexOf('=') + 1); - if ("updateSystem".equals(header)) { - if (key.equals("majorVersion")) { - updateMajor = Integer.parseInt(val); - if (updateMajor > UPDATE_SYSTEM_MAJOR) { - break; - } - } - if (key.equals("minorVersion")) { - updateMinor = Integer.parseInt(val); - } - } - if ("version".equals(header) && (ver != null)) { - if (key.equals("versionId")) { - ver.versionId = Integer.parseInt(val); - } - if (key.equals("versionName")) { - ver.versionName = val; - } - if (key.equals("nightly")) { - ver.nightly = val.equals("true"); - } - if (key.equals("revision")) { - ver.revision = val; - } - if (key.equals("build")) { - ver.build = Integer.parseInt(val); - } - if (key.equals("major")) { - ver.major = Integer.parseInt(val); - } - if (key.equals("minor")) { - ver.minor = Integer.parseInt(val); - } - if (key.equals("release")) { - ver.release = Integer.parseInt(val); - } - if (key.equals("longVersionName")) { - ver.longVersionName = val; - } - if (key.equals("releaseDate")) { - ver.releaseDate = val; - } - if (key.equals("appName")) { - ver.appName = val; - } - if (key.equals("appFullName")) { - ver.appFullName = val; - } - if (key.equals("updateLink")) { - ver.updateLink = val; - } - if (key.equals("change[]")) { - String changeType = val.substring(0, val.indexOf('|')); - String change = val.substring(val.indexOf('|') + 1); - if (!ver.changes.containsKey(changeType)) { - ver.changes.put(changeType, new ArrayList<>()); - } - List chlist = ver.changes.get(changeType); - chlist.add(change); - } - } - } - } - - if (!versions.isEmpty()) { - View.execInEventDispatch(() -> { - NewVersionDialog newVersionDialog = new NewVersionDialog(versions); - newVersionDialog.setVisible(true); - Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); - }); - - return true; - } - } catch (IOException | NumberFormatException ex) { - return false; - } - Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); - return false; - } - - private static FileHandler fileTxt; - - public static void clearLogFile() { - Logger logger = Logger.getLogger(""); - - FileHandler oldFileTxt = fileTxt; - fileTxt = null; - if (oldFileTxt != null) { - logger.removeHandler(fileTxt); - oldFileTxt.flush(); - oldFileTxt.close(); - } - - String fileName = null; - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); - - try { - fileName = Configuration.getFFDecHome() + "logs" + File.separator; - if (Configuration.useDetailedLogging.get()) { - fileName += "log-" + sdf.format(new Date()) + ".txt"; - } else { - fileName += "log.txt"; - } - File f = new File(fileName).getParentFile(); - if (!f.exists()) { - f.mkdir(); - } - fileTxt = new FileHandler(fileName); - } catch (IOException | SecurityException ex) { - //cannot get lock error - if (ex.getMessage().contains("lock for")) { - //remove all old log files and their .lck - for (int i = 0; i <= 100; i++) { - File flog = new File(fileName + (i == 0 ? "" : "." + i)); - File flog_lock = new File(fileName + (i == 0 ? "" : "." + i) + ".lck"); - flog.delete(); - flog_lock.delete(); - } - try { - fileTxt = new FileHandler(fileName); - } catch (IOException | SecurityException ex1) { - logger.log(Level.SEVERE, "Cannot initialize logging", ex); - } - } else { - logger.log(Level.SEVERE, "Cannot initialize logging", ex); - } - } - - Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread t, Throwable e) { - logger.log(Level.SEVERE, "Uncaught exception in thread: " + t.getName(), e); - if (e instanceof OutOfMemoryError && !Helper.is64BitJre() && Helper.is64BitOs()) { - View.showMessageDialog(null, AppStrings.translate("message.warning.outOfMemory32BitJre"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE); - } - } - }); - - Formatter formatterTxt = new LogFormatter(); - if (fileTxt != null) { - fileTxt.setFormatter(formatterTxt); - logger.addHandler(fileTxt); - } - - if (!GraphicsEnvironment.isHeadless() && ErrorLogFrame.hasInstance()) { - ErrorLogFrame.getInstance().clearErrorState(); - } - - sdf = new SimpleDateFormat("yyyy-MM-dd"); - logger.log(Level.INFO, "Date: {0}", sdf.format(new Date())); - logger.log(Level.INFO, ApplicationInfo.applicationVerName); - logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ - System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")}); - logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ - System.getProperty("java.version"), System.getProperty("java.vendor"), System.getProperty("os.arch")}); - } - - public static void initLogging(boolean debug) { - try { - Logger logger = Logger.getLogger(""); - logger.setLevel(Configuration.logLevel); - - Handler[] handlers = logger.getHandlers(); - for (int i = handlers.length - 1; i >= 0; i--) { - logger.removeHandler(handlers[i]); - } - - ConsoleHandler conHan = new ConsoleHandler(); - conHan.setLevel(debug ? Level.CONFIG : Level.WARNING); - SimpleFormatter formatterTxt = new SimpleFormatter(); - conHan.setFormatter(formatterTxt); - logger.addHandler(conHan); - clearLogFile(); - - } catch (Exception ex) { - throw new RuntimeException("Problems with creating the log files"); - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui; + +import com.jpexs.debugger.flash.Debugger; +import com.jpexs.debugger.flash.DebuggerCommands; +import com.jpexs.debugger.flash.Variable; +import com.jpexs.debugger.flash.VariableType; +import com.jpexs.debugger.flash.messages.in.InCallFunction; +import com.jpexs.decompiler.flash.ApplicationInfo; +import com.jpexs.decompiler.flash.EventListener; +import com.jpexs.decompiler.flash.SWF; +import com.jpexs.decompiler.flash.SWFBundle; +import com.jpexs.decompiler.flash.SWFSourceInfo; +import com.jpexs.decompiler.flash.SearchMode; +import com.jpexs.decompiler.flash.SwfOpenException; +import com.jpexs.decompiler.flash.UrlResolver; +import com.jpexs.decompiler.flash.Version; +import com.jpexs.decompiler.flash.abc.avm2.AVM2Code; +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.configuration.SwfSpecificConfiguration; +import com.jpexs.decompiler.flash.console.CommandLineArgumentParser; +import com.jpexs.decompiler.flash.console.ContextMenuTools; +import com.jpexs.decompiler.flash.exporters.modes.ExeExportMode; +import com.jpexs.decompiler.flash.gui.debugger.DebugListener; +import com.jpexs.decompiler.flash.gui.debugger.DebuggerTools; +import com.jpexs.decompiler.flash.gui.pipes.FirstInstance; +import com.jpexs.decompiler.flash.gui.proxy.ProxyFrame; +import com.jpexs.decompiler.flash.helpers.SWFDecompilerPlugin; +import com.jpexs.decompiler.flash.tags.Tag; +import com.jpexs.decompiler.flash.tags.base.FontTag; +import com.jpexs.decompiler.flash.tags.base.ImportTag; +import com.jpexs.decompiler.flash.treeitems.SWFList; +import com.jpexs.helpers.Cache; +import com.jpexs.helpers.CancellableWorker; +import com.jpexs.helpers.Helper; +import com.jpexs.helpers.Path; +import com.jpexs.helpers.ProgressListener; +import com.jpexs.helpers.Stopwatch; +import com.jpexs.helpers.streams.SeekableInputStream; +import com.sun.jna.Platform; +import com.sun.jna.platform.win32.Advapi32Util; +import com.sun.jna.platform.win32.Kernel32; +import com.sun.jna.platform.win32.WinReg; +import java.awt.AWTException; +import java.awt.Frame; +import java.awt.GraphicsEnvironment; +import java.awt.MenuItem; +import java.awt.PopupMenu; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.net.Proxy; +import java.net.URL; +import java.net.URLConnection; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Formatter; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.SwingWorker; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import javax.swing.filechooser.FileFilter; +import org.pushingpixels.substance.api.SubstanceLookAndFeel; + +/** + * Main executable class + * + * @author JPEXS + */ +public class Main { + + protected static ProxyFrame proxyFrame; + + private static List sourceInfos = new ArrayList<>(); + + public static LoadingDialog loadingDialog; + + private static boolean working = false; + + private static TrayIcon trayIcon; + + private static MenuItem stopMenuItem; + + private static volatile MainFrame mainFrame; + + public static final int UPDATE_SYSTEM_MAJOR = 1; + + public static final int UPDATE_SYSTEM_MINOR = 3; + + private static LoadFromMemoryFrame loadFromMemoryFrame; + + private static LoadFromCacheFrame loadFromCacheFrame; + + private static final Logger logger = Logger.getLogger(Main.class.getName()); + + public static DebugLogDialog debugDialog; + + public static boolean shouldCloseWhenClosingLoadingDialog; + + private static Debugger flashDebugger; + + private static DebuggerHandler debugHandler = null; + + //private static int ip = 0; + //private static String ipClass = null; + private static Process runProcess; + + private static boolean runProcessDebug; + + private static boolean runProcessDebugPCode; + + private static boolean inited = false; + + private static File runTempFile; + + private static List runTempFiles = new ArrayList<>(); + + public static void freeRun() { + synchronized (Main.class) { + if (runTempFile != null) { + runTempFile.delete(); + runTempFile = null; + } + for (File f : runTempFiles) { + f.delete(); + } + runTempFiles.clear(); + + runProcess = null; + } + if (mainFrame != null && mainFrame.getPanel() != null) { + mainFrame.getPanel().clearDebuggerColors(); + } + if (runProcessDebug) { + Main.getDebugHandler().disconnect(); + } + } + + public static synchronized boolean isDebugPaused() { + return runProcess != null && runProcessDebug && getDebugHandler().isPaused(); + } + + public static synchronized boolean isDebugRunning() { + return runProcess != null && runProcessDebug; + } + + public static synchronized boolean isDebugPCode() { + return runProcessDebugPCode; + } + + public static synchronized boolean isDebugConnected() { + return getDebugHandler().isConnected(); + } + + public static synchronized boolean isRunning() { + return runProcess != null && !runProcessDebug; + } + + /** + * FIXME! + * + * @param v + */ + public static synchronized void dumpBytes(Variable v) { + InCallFunction icf; + try { + long objectId = 0l; + if ((v.vType == VariableType.OBJECT || v.vType == VariableType.MOVIECLIP)) { + objectId = (Long) v.value; + } + Object oldPos = getDebugHandler().getVariable(objectId, "position", true).parent.value; + getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, 0); + icf = getDebugHandler().callFunction(false, "readUTF", v, new ArrayList<>()); + System.out.println("Result=" + icf.variables.get(0).value); + getDebugHandler().setVariable(objectId, "position", VariableType.NUMBER, oldPos); + } catch (DebuggerHandler.ActionScriptException ex) { + Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); + } + + } + + public static synchronized boolean addWatch(Variable v, long v_id, boolean watchRead, boolean watchWrite) { + DebuggerCommands.Watch w = getDebugHandler().addWatch(v, v_id, watchRead, watchWrite); + return w != null; + } + + public static void runPlayer(String title, final String exePath, String file, String flashVars) { + if (!new File(file).exists()) { + return; + } + if (flashVars != null && !flashVars.isEmpty()) { + file += "?" + flashVars; + } + final String ffile = file; + + CancellableWorker runWorker = new CancellableWorker() { + @Override + protected Object doInBackground() throws Exception { + Process proc; + try { + proc = Runtime.getRuntime().exec(new String[]{exePath, ffile}); + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + return null; + } + boolean isDebug; + + synchronized (Main.class) { + runProcess = proc; + isDebug = runProcessDebug; + } + if (isDebug) { + mainFrame.getMenu().hilightPath("/debugging"); + } + mainFrame.getMenu().updateComponents(); + try { + if (proc != null) { + proc.waitFor(); + } + } catch (InterruptedException ex) { + if (proc != null) { + try { + proc.destroy(); + } catch (Exception ex2) { + //ignore + } + } + } + freeRun(); + stopDebugger(); + mainFrame.getMenu().updateComponents(); + return null; + } + + @Override + protected void done() { + Main.stopWork(); + } + + @Override + public void workerCancelled() { + Main.stopWork(); + synchronized (Main.class) { + if (runProcess != null) { + try { + runProcess.destroy(); + } catch (Exception ex) { + + } + } + } + freeRun(); + mainFrame.getMenu().updateComponents(); + } + }; + + mainFrame.getMenu().updateComponents(); + Main.startWork(title + "...", runWorker); + runWorker.execute(); + } + + public static void stopRun() { + + synchronized (Main.class) { + if (runProcess != null) { + runProcess.destroy(); + } + } + freeRun(); + stopDebugger(); + mainFrame.getMenu().updateComponents(); + } + + private static interface SwfPreparation { + + public SWF prepare(SWF swf); + } + + private static class SwfRunPrepare implements SwfPreparation { + + @Override + public SWF prepare(SWF swf) { + if (Configuration.autoOpenLoadedSWFs.get()) { + if (!DebuggerTools.hasDebugger(swf)) { + DebuggerTools.switchDebugger(swf); + } + DebuggerTools.injectDebugLoader(swf); + } + return swf; + } + } + + private static class SwfDebugPrepare extends SwfRunPrepare { + + private boolean doPCode; + + public SwfDebugPrepare(boolean doPCode) { + this.doPCode = doPCode; + } + + @Override + public SWF prepare(SWF instrSWF) { + instrSWF = super.prepare(instrSWF); + try { + File fTempFile = new File(instrSWF.getFile()); + instrSWF.enableDebugging(true, new File("."), true, doPCode); + FileOutputStream fos = new FileOutputStream(fTempFile); + instrSWF.saveTo(fos); + fos.close(); + if (!instrSWF.isAS3()) { + //Read again, because line file offsets changed with adding debug tags + //TODO: handle somehow without rereading? + instrSWF = null; + try (FileInputStream fis = new FileInputStream(fTempFile)) { + instrSWF = new SWF(fis, false, false); + } catch (InterruptedException ex) { + logger.log(Level.SEVERE, null, ex); + } + if (instrSWF != null) { + String swfFileName = fTempFile.getAbsolutePath(); + if (swfFileName.toLowerCase().endsWith(".swf")) { + swfFileName = swfFileName.substring(0, swfFileName.length() - 4) + ".swd"; + } else { + swfFileName = swfFileName + ".swd"; + } + File swdFile = new File(swfFileName); + if (doPCode) { + instrSWF.generatePCodeSwdFile(swdFile, getPackBreakPoints(true)); + } else { + instrSWF.generateSwdFile(swdFile, getPackBreakPoints(true)); + } + } + } + } catch (IOException ex) { + //ignore, return instrSWF + } + return instrSWF; + } + } + + private static void prepareSwf(SwfPreparation prep, File toPrepareFile, File origFile, List tempFiles) throws IOException { + SWF instrSWF = null; + try (FileInputStream fis = new FileInputStream(toPrepareFile)) { + instrSWF = new SWF(fis, toPrepareFile.getAbsolutePath(), origFile.getName(), false); + } catch (InterruptedException ex) { + logger.log(Level.SEVERE, null, ex); + } + if (instrSWF != null) { + for (Tag t : instrSWF.getLocalTags()) { + if (t instanceof ImportTag) { + ImportTag it = (ImportTag) t; + String url = it.getUrl(); + File importedFile = new File(origFile.getParentFile(), url); + if (importedFile.exists()) { + File newTempFile = File.createTempFile("ffdec_run_import_", ".swf"); + it.setUrl("./" + newTempFile.getName()); + byte[] impData = Helper.readFile(importedFile.getAbsolutePath()); + Helper.writeFile(newTempFile.getAbsolutePath(), impData); + tempFiles.add(newTempFile); + prepareSwf(prep, newTempFile, importedFile, tempFiles); + } + } + } + if (prep != null) { + instrSWF = prep.prepare(instrSWF); + } + try (FileOutputStream fos = new FileOutputStream(toPrepareFile)) { + instrSWF.saveTo(fos); + } + } + } + + public static void run(SWF swf) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + advancedSettings("paths"); + return; + } + if (swf == null) { + return; + } + File tempFile; + List tempFiles = new ArrayList<>(); + try { + tempFile = File.createTempFile("ffdec_run_", ".swf"); + + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + swf.saveTo(fos); + } + + prepareSwf(new SwfRunPrepare(), tempFile, new File(swf.getFile()), tempFiles); + + } catch (IOException ex) { + return; + + } + if (tempFile != null) { + synchronized (Main.class) { + runTempFile = tempFile; + runTempFiles = tempFiles; + runProcessDebug = false; + } + runPlayer(AppStrings.translate("work.running"), playerLocation, tempFile.getAbsolutePath(), flashVars); + } + } + + public static void runDebug(SWF swf, final boolean doPCode) { + String flashVars = "";//key=val&key2=val2 + String playerLocation = Configuration.playerDebugLocation.get(); + if (playerLocation.isEmpty() || (!new File(playerLocation).exists())) { + View.showMessageDialog(null, AppStrings.translate("message.playerpath.debug.notset"), AppStrings.translate("error"), JOptionPane.ERROR_MESSAGE); + Main.advancedSettings("paths"); + return; + } + if (swf == null) { + return; + } + File tempFile = null; + + try { + tempFile = File.createTempFile("ffdec_debug_", ".swf"); + } catch (Exception ex) { + + } + + if (tempFile != null) { + final File fTempFile = tempFile; + final List tempFiles = new ArrayList<>(); + CancellableWorker instrumentWorker = new CancellableWorker() { + @Override + protected Object doInBackground() throws Exception { + + try (OutputStream fos = new BufferedOutputStream(new FileOutputStream(fTempFile))) { + swf.saveTo(fos); + } + prepareSwf(new SwfDebugPrepare(doPCode), fTempFile, new File(swf.getFile()), tempFiles); + return null; + } + + @Override + public void workerCancelled() { + Main.stopWork(); + } + + @Override + protected void done() { + synchronized (Main.class) { + runTempFile = fTempFile; + runProcessDebug = true; + runProcessDebugPCode = doPCode; + runTempFiles = tempFiles; + } + Main.stopWork(); + Main.startDebugger(); + runPlayer(AppStrings.translate("work.debugging.wait"), playerLocation, fTempFile.getAbsolutePath(), flashVars); + } + }; + + Main.startWork(AppStrings.translate("work.debugging.instrumenting"), instrumentWorker); + instrumentWorker.execute(); + } + } + + /* public static void debuggerNotSuspended() { + + }*/ + public static boolean isDebugging() { + return isDebugRunning(); + } + + public synchronized static int getIp(Object pack) { + return getDebugHandler().getBreakIp(); + } + + public synchronized static String getIpClass() { + return getDebugHandler().getBreakScriptName(); + } + + public static synchronized boolean isBreakPointValid(String scriptName, int line) { + return !getDebugHandler().isBreakpointInvalid(scriptName, line); + } + + public synchronized static void addBreakPoint(String scriptName, int line) { + getDebugHandler().addBreakPoint(scriptName, line); + } + + public synchronized static void removeBreakPoint(String scriptName, int line) { + getDebugHandler().removeBreakPoint(scriptName, line); + } + + public synchronized static boolean toggleBreakPoint(String scriptName, int line) { + if (getDebugHandler().isBreakpointToAdd(scriptName, line) || getDebugHandler().isBreakpointConfirmed(scriptName, line) || getDebugHandler().isBreakpointInvalid(scriptName, line)) { + getDebugHandler().removeBreakPoint(scriptName, line); + return false; + } else { + getDebugHandler().addBreakPoint(scriptName, line); + return true; + } + } + + public synchronized static Map> getPackBreakPoints(boolean validOnly) { + return getDebugHandler().getAllBreakPoints(validOnly); + } + + public synchronized static Set getScriptBreakPoints(String pack, boolean onlyValid) { + return getDebugHandler().getBreakPoints(pack, onlyValid); + } + + public static DebuggerHandler getDebugHandler() { + return debugHandler; + } + + public static void ensureMainFrame() { + if (mainFrame == null) { + synchronized (Main.class) { + if (mainFrame == null) { + MainFrame frame; + if (Configuration.useRibbonInterface.get()) { + frame = new MainFrameRibbon(); + } else { + frame = new MainFrameClassic(); + } + frame.getPanel().setErrorState(ErrorLogFrame.getInstance().getErrorState()); + mainFrame = frame; + } + } + } + } + + public static MainFrame getMainFrame() { + return mainFrame; + } + + public static void loadFromCache() { + if (loadFromCacheFrame == null) { + loadFromCacheFrame = new LoadFromCacheFrame(); + } + loadFromCacheFrame.setVisible(true); + } + + public static void loadFromMemory() { + if (loadFromMemoryFrame == null) { + loadFromMemoryFrame = new LoadFromMemoryFrame(mainFrame); + } + loadFromMemoryFrame.setVisible(true); + } + + public static void setVariable(long parentId, String varName, int valueType, Object value) { + getDebugHandler().setVariable(parentId, varName, valueType, value); + } + + public static void setSubLimiter(boolean value) { + if (value) { + AVM2Code.toSourceLimit = Configuration.sublimiter.get(); + } else { + AVM2Code.toSourceLimit = -1; + } + } + + public synchronized static boolean isInited() { + return inited; + } + + public synchronized static void setSessionLoaded(boolean v) { + inited = v; + } + + public static boolean isWorking() { + return working; + } + + public static void startProxy(int port) { + if (proxyFrame == null) { + proxyFrame = new ProxyFrame(mainFrame); + } + + proxyFrame.setPort(port); + addTrayIcon(); + switchProxy(); + } + + public static void showProxy() { + if (proxyFrame == null) { + proxyFrame = new ProxyFrame(mainFrame); + } + proxyFrame.setVisible(true); + proxyFrame.setState(Frame.NORMAL); + } + + public static void startWork(String name, CancellableWorker worker) { + startWork(name, -1, worker); + } + + public static void startWork(final String name, final int percent, final CancellableWorker worker) { + working = true; + View.execInEventDispatchLater(() -> { + if (mainFrame != null) { + mainFrame.getPanel().setWorkStatus(name, worker); + if (percent == -1) { + mainFrame.getPanel().hidePercent(); + } else { + mainFrame.getPanel().setPercent(percent); + } + } + if (loadingDialog != null) { + loadingDialog.setDetail(name); + loadingDialog.setPercent(percent); + } + if (CommandLineArgumentParser.isCommandLineMode()) { + System.out.println(name); + } + }); + } + + public static void stopWork() { + working = false; + View.execInEventDispatchLater(() -> { + if (mainFrame != null) { + mainFrame.getPanel().setWorkStatus("", null); + } + if (loadingDialog != null) { + loadingDialog.setDetail(""); + } + }); + } + + public static SWFList parseSWF(SWFSourceInfo sourceInfo) throws Exception { + SWFList result = new SWFList(); + + InputStream inputStream = sourceInfo.getInputStream(); + SWFBundle bundle = null; + FileInputStream fis = null; + if (inputStream == null) { + inputStream = new BufferedInputStream(fis = new FileInputStream(sourceInfo.getFile())); + bundle = sourceInfo.getBundle(false, SearchMode.ALL); + logger.log(Level.INFO, "Load file: {0}", sourceInfo.getFile()); + } else if (inputStream instanceof SeekableInputStream + || inputStream instanceof BufferedInputStream) { + try { + inputStream.reset(); + } catch (IOException ex) { + logger.log(Level.SEVERE, null, ex); + } + logger.log(Level.INFO, "Load stream: {0}", sourceInfo.getFileTitle()); + } + + Stopwatch sw = Stopwatch.startNew(); + if (bundle != null) { + result.bundle = bundle; + result.name = new File(sourceInfo.getFileTitleOrName()).getName(); + for (Entry streamEntry : bundle.getAll().entrySet()) { + InputStream stream = streamEntry.getValue(); + stream.reset(); + CancellableWorker worker = new CancellableWorker() { + @Override + public SWF doInBackground() throws Exception { + final CancellableWorker worker = this; + SWF swf = new SWF(stream, null, streamEntry.getKey(), new ProgressListener() { + @Override + public void progress(int p) { + startWork(AppStrings.translate("work.reading.swf"), p, worker); + } + }, Configuration.parallelSpeedUp.get()); + return swf; + } + }; + loadingDialog.setWroker(worker); + worker.execute(); + + try { + result.add(worker.get()); + } catch (CancellationException ex) { + logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", streamEntry.getKey()); + } + } + } else { + InputStream fInputStream = inputStream; + + final String[] yesno = new String[]{AppStrings.translate("button.yes"), AppStrings.translate("button.no"), AppStrings.translate("button.yes.all"), AppStrings.translate("button.no.all")}; + + CancellableWorker worker = new CancellableWorker() { + private boolean yestoall = false; + + private boolean notoall = false; + + private SWF open(InputStream is, String file, String fileTitle) throws IOException, InterruptedException { + final CancellableWorker worker = this; + + SWF swf = new SWF(is, file, fileTitle, new ProgressListener() { + @Override + public void progress(int p) { + startWork(AppStrings.translate("work.reading.swf"), p, worker); + } + }, Configuration.parallelSpeedUp.get(), false, true, new UrlResolver() { + @Override + public SWF resolveUrl(final String url) { + int opt = -1; + if (!(yestoall || notoall)) { + opt = View.showOptionDialog(null, AppStrings.translate("message.imported.swf").replace("%url%", url), AppStrings.translate("message.warning"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, yesno, AppStrings.translate("button.yes")); + if (opt == 2) { + yestoall = true; + } + if (opt == 3) { + notoall = true; + } + } + + if (yestoall) { + opt = 0; // yes + } else if (notoall) { + opt = 1; // no + } + + if (opt == 1) //no + { + return null; + } + + if (url.startsWith("http://") || url.startsWith("https://")) { + try { + URL u = new URL(url); + return open(u.openStream(), null, url); //? + } catch (Exception ex) { + //ignore + } + } else { + File f = new File(new File(file).getParentFile(), url); + if (f.exists()) { + try { + return open(new FileInputStream(f), f.getAbsolutePath(), f.getName()); + } catch (Exception ex) { + //ignore + } + } + } + Reference ret = new Reference<>(null); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + + while (JOptionPane.YES_OPTION == View.showConfirmDialog(null, AppStrings.translate("message.imported.swf.manually").replace("%url%", url), AppStrings.translate("error"), JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)) { + + JFileChooser fc = new JFileChooser(); + fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); + FileFilter allSupportedFilter = new FileFilter() { + private final String[] supportedExtensions = new String[]{".swf", ".gfx"}; + + @Override + public boolean accept(File f) { + String name = f.getName().toLowerCase(); + for (String ext : supportedExtensions) { + if (name.endsWith(ext)) { + return true; + } + } + return f.isDirectory(); + } + + @Override + public String getDescription() { + String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); + return AppStrings.translate("filter.supported") + " (" + exts + ")"; + } + }; + fc.setFileFilter(allSupportedFilter); + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + fc.addChoosableFileFilter(swfFilter); + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + fc.addChoosableFileFilter(gfxFilter); + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + int returnVal = fc.showOpenDialog(f); + if (returnVal == JFileChooser.APPROVE_OPTION) { + Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); + File selFile = Helper.fixDialogFile(fc.getSelectedFile()); + try { + ret.setVal(open(new FileInputStream(selFile), selFile.getAbsolutePath(), selFile.getName())); + break; + } catch (Exception ex) { + //ignore; + } + } else { + break; + } + } + } + }); + return ret.getVal(); + } + }); + return swf; + } + + @Override + public SWF doInBackground() throws Exception { + return open(fInputStream, sourceInfo.getFile(), sourceInfo.getFileTitle()); + } + }; + if (loadingDialog != null) { + loadingDialog.setWroker(worker); + } + worker.execute(); + + try { + result.add(worker.get()); + } catch (CancellationException ex) { + logger.log(Level.WARNING, "Loading SWF {0} was cancelled.", sourceInfo.getFileTitleOrName()); + } + } + + if (fis != null) { + logger.log(Level.INFO, "File loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); + fis.close(); + } else { + logger.log(Level.INFO, "Stream loaded in {0} seconds.", (sw.getElapsedMilliseconds() / 1000)); + } + + result.sourceInfo = sourceInfo; + for (SWF swf : result) { + logger.log(Level.INFO, ""); + logger.log(Level.INFO, "== File information =="); + logger.log(Level.INFO, "Size: {0}", Helper.formatFileSize(swf.fileSize)); + logger.log(Level.INFO, "Flash version: {0}", swf.version); + int width = (int) ((swf.displayRect.Xmax - swf.displayRect.Xmin) / SWF.unitDivisor); + int height = (int) ((swf.displayRect.Ymax - swf.displayRect.Ymin) / SWF.unitDivisor); + logger.log(Level.INFO, "Width: {0}", width); + logger.log(Level.INFO, "Height: {0}", height); + + swf.swfList = result; + swf.addEventListener(new EventListener() { + @Override + public void handleExportingEvent(String type, int index, int count, Object data) { + String text = AppStrings.translate("work.exporting"); + if (type != null && type.length() > 0) { + text += " " + type; + } + + startWork(text + " " + index + "/" + count + " " + data, null); + } + + @Override + public void handleExportedEvent(String type, int index, int count, Object data) { + String text = AppStrings.translate("work.exported"); + if (type != null && type.length() > 0) { + text += " " + type; + } + + startWork(text + " " + index + "/" + count + " " + data, null); + } + + @Override + public void handleEvent(String event, Object data) { + if (event.equals("exporting") || event.equals("exported")) { + throw new Error("Event is not supported by this handler."); + } + if (event.equals("getVariables")) { + startWork(AppStrings.translate("work.gettingvariables") + "..." + (String) data, null); + } + if (event.equals("deobfuscate")) { + startWork(AppStrings.translate("work.deobfuscating") + "..." + (String) data, null); + } + if (event.equals("rename")) { + startWork(AppStrings.translate("work.renaming") + "..." + (String) data, null); + } + } + }); + } + + return result; + } + + public static void saveFile(SWF swf, String outfile) throws IOException { + saveFile(swf, outfile, SaveFileMode.SAVE, null); + } + + public static void saveFile(SWF swf, String outfile, SaveFileMode mode, ExeExportMode exeExportMode) throws IOException { + if (mode == SaveFileMode.SAVEAS && !swf.swfList.isBundle()) { + swf.setFile(outfile); + swf.swfList.sourceInfo.setFile(outfile); + } + File outfileF = new File(outfile); + File tmpFile = new File(outfile + ".tmp"); + try (FileOutputStream fos = new FileOutputStream(tmpFile); + BufferedOutputStream bos = new BufferedOutputStream(fos)) { + if (mode == SaveFileMode.EXE) { + switch (exeExportMode) { + case WRAPPER: + InputStream exeStream = View.class.getClassLoader().getResourceAsStream("com/jpexs/helpers/resource/Swf2Exe.bin"); + Helper.copyStream(exeStream, bos); + int width = swf.displayRect.Xmax - swf.displayRect.Xmin; + int height = swf.displayRect.Ymax - swf.displayRect.Ymin; + bos.write(width & 0xff); + bos.write((width >> 8) & 0xff); + bos.write((width >> 16) & 0xff); + bos.write((width >> 24) & 0xff); + bos.write(height & 0xff); + bos.write((height >> 8) & 0xff); + bos.write((height >> 16) & 0xff); + bos.write((height >> 24) & 0xff); + bos.write(Configuration.saveAsExeScaleMode.get()); + break; + case PROJECTOR_WIN: + case PROJECTOR_MAC: + case PROJECTOR_LINUX: + File projectorFile = Configuration.getProjectorFile(exeExportMode); + if (projectorFile == null) { + String message = "Projector not found, please place it to " + Configuration.getProjectorPath(); + logger.log(Level.SEVERE, message); + throw new IOException(message); + } + Helper.copyStream(new FileInputStream(projectorFile), bos); + bos.flush(); + break; + } + } + + long pos = fos.getChannel().position(); + swf.saveTo(bos); + + if (mode == SaveFileMode.EXE) { + switch (exeExportMode) { + case PROJECTOR_WIN: + case PROJECTOR_MAC: + case PROJECTOR_LINUX: + bos.flush(); + int swfSize = (int) (fos.getChannel().position() - pos); + + // write magic number + bos.write(0x56); + bos.write(0x34); + bos.write(0x12); + bos.write(0xfa); + + bos.write(swfSize & 0xff); + bos.write((swfSize >> 8) & 0xff); + bos.write((swfSize >> 16) & 0xff); + bos.write((swfSize >> 24) & 0xff); + } + } + } + if (tmpFile.exists()) { + if (tmpFile.length() > 0) { + outfileF.delete(); + if (!tmpFile.renameTo(outfileF)) { + tmpFile.delete(); + throw new IOException("Cannot access " + outfile); + } + } else { + throw new IOException("Output is empty"); + } + } else { + throw new IOException("Output not found"); + } + } + + private static class OpenFileWorker extends SwingWorker { + + private final SWFSourceInfo[] sourceInfos; + + private final Runnable executeAfterOpen; + + private final int[] reloadIndices; + + public OpenFileWorker(SWFSourceInfo sourceInfo) { + this(sourceInfo, -1); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, int reloadIndex) { + this(sourceInfo, null, reloadIndex); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { + this(sourceInfo, executeAfterOpen, -1); + } + + public OpenFileWorker(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { + this.sourceInfos = new SWFSourceInfo[]{sourceInfo}; + this.executeAfterOpen = executeAfterOpen; + this.reloadIndices = new int[]{reloadIndex}; + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos) { + this(sourceInfos, null, null); + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen) { + this(sourceInfos, executeAfterOpen, null); + } + + public OpenFileWorker(SWFSourceInfo[] sourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { + this.sourceInfos = sourceInfos; + this.executeAfterOpen = executeAfterOpen; + int[] indices = new int[sourceInfos.length]; + for (int i = 0; i < indices.length; i++) { + indices[i] = -1; + } + this.reloadIndices = reloadIndices == null ? indices : reloadIndices; + } + + @Override + protected Object doInBackground() throws Exception { + boolean first = true; + SWF firstSWF = null; + for (int index = 0; index < sourceInfos.length; index++) { + SWFSourceInfo sourceInfo = sourceInfos[index]; + SWFList swfs = null; + try { + Main.startWork(AppStrings.translate("work.reading.swf") + "...", null); + try { + swfs = parseSWF(sourceInfo); + } catch (ExecutionException ex) { + Throwable cause = ex.getCause(); + if (cause instanceof SwfOpenException) { + throw (SwfOpenException) cause; + } + + throw ex; + } + } catch (OutOfMemoryError ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, "Cannot load SWF file. Out of memory."); + continue; + } catch (SwfOpenException ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, ex.getMessage()); + continue; + } catch (Exception ex) { + logger.log(Level.SEVERE, null, ex); + View.showMessageDialog(null, "Cannot load SWF file."); + continue; + } + + final SWFList swfs1 = swfs; + final boolean first1 = first; + first = false; + if (firstSWF == null && swfs1.size() > 0) { + firstSWF = swfs1.get(0); + } + + final int findex = index; + try { + View.execInEventDispatch(() -> { + Main.startWork(AppStrings.translate("work.creatingwindow") + "...", null); + ensureMainFrame(); + if (reloadIndices[findex] > -1) { + mainFrame.getPanel().loadSwfAtPos(swfs1, reloadIndices[findex]); + } else { + mainFrame.getPanel().load(swfs1, first1); + } + }); + } catch (Exception ex) { + logger.log(Level.SEVERE, null, ex); + } + } + + loadingDialog.setVisible(false); + shouldCloseWhenClosingLoadingDialog = false; + + final SWF fswf = firstSWF; + View.execInEventDispatch(() -> { + if (mainFrame != null) { + mainFrame.setVisible(true); + } + + Main.stopWork(); + + if (mainFrame != null && Configuration.gotoMainClassOnStartup.get()) { + mainFrame.getPanel().gotoDocumentClass(fswf); + } + + if (mainFrame != null && fswf != null) { + SwfSpecificConfiguration swfConf = Configuration.getSwfSpecificConfiguration(fswf.getShortFileName()); + if (swfConf != null) { + String pathStr = swfConf.lastSelectedPath; + mainFrame.getPanel().tagTree.setSelectionPathString(pathStr); + } + } + + if (executeAfterOpen != null) { + executeAfterOpen.run(); + } + }); + + return true; + } + } + + public static boolean reloadSWFs() { + CancellableWorker.cancelBackgroundThreads(); + if (Main.sourceInfos.isEmpty()) { + Helper.freeMem(); + showModeFrame(); + return true; + } else { + SWFSourceInfo[] sourceInfosCopy = new SWFSourceInfo[sourceInfos.size()]; + sourceInfos.toArray(sourceInfosCopy); + sourceInfos.clear(); + openFile(sourceInfosCopy); + return true; + } + } + + public static void reloadApp() { + if (debugDialog != null) { + debugDialog.setVisible(false); + debugDialog.dispose(); + debugDialog = null; + } + if (loadingDialog != null) { + synchronized (Main.class) { + if (loadingDialog != null) { + loadingDialog.setVisible(false); + loadingDialog.dispose(); + loadingDialog = null; + } + } + } + if (proxyFrame != null) { + proxyFrame.setVisible(false); + proxyFrame.dispose(); + proxyFrame = null; + } + if (loadFromMemoryFrame != null) { + loadFromMemoryFrame.setVisible(false); + loadFromMemoryFrame.dispose(); + loadFromMemoryFrame = null; + } + if (loadFromCacheFrame != null) { + loadFromCacheFrame.setVisible(false); + loadFromCacheFrame.dispose(); + loadFromCacheFrame = null; + } + if (mainFrame != null) { + mainFrame.setVisible(false); + mainFrame.getPanel().closeAll(false); + mainFrame.dispose(); + mainFrame = null; + } + FontTag.reload(); + Cache.clearAll(); + initGui(); + reloadSWFs(); + } + + public static OpenFileResult openFile(String swfFile, String fileTitle) { + View.checkAccess(); + + return openFile(swfFile, fileTitle, null); + } + + public static OpenFileResult openFile(String swfFile, String fileTitle, Runnable executeAfterOpen) { + View.checkAccess(); + + try { + File file = new File(swfFile); + if (!file.exists()) { + View.showMessageDialog(null, AppStrings.translate("open.error.fileNotFound"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); + return OpenFileResult.NOT_FOUND; + } + swfFile = file.getCanonicalPath(); + SWFSourceInfo sourceInfo = new SWFSourceInfo(null, swfFile, fileTitle); + OpenFileResult openResult = openFile(sourceInfo); + return openResult; + } catch (IOException ex) { + View.showMessageDialog(null, AppStrings.translate("open.error.cannotOpen"), AppStrings.translate("open.error"), JOptionPane.ERROR_MESSAGE); + return OpenFileResult.ERROR; + } + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}); + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen); + } + + public static OpenFileResult openFile(SWFSourceInfo sourceInfo, Runnable executeAfterOpen, int reloadIndex) { + View.checkAccess(); + + return openFile(new SWFSourceInfo[]{sourceInfo}, executeAfterOpen, new int[]{reloadIndex}); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos) { + View.checkAccess(); + + return openFile(newSourceInfos, null); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen) { + View.checkAccess(); + + return openFile(newSourceInfos, executeAfterOpen, null); + } + + public static OpenFileResult openFile(SWFSourceInfo[] newSourceInfos, Runnable executeAfterOpen, int[] reloadIndices) { + View.checkAccess(); + + if (mainFrame != null && !Configuration.openMultipleFiles.get()) { + sourceInfos.clear(); + mainFrame.getPanel().closeAll(false); + mainFrame.setVisible(false); + Helper.freeMem(); + reloadIndices = null; + } + + loadingDialog.setVisible(true); + + for (int i = 0; i < newSourceInfos.length; i++) { + SWFSourceInfo si = newSourceInfos[i]; + String fileName = si.getFile(); + if (fileName != null) { + Configuration.addRecentFile(fileName); + } + } + + OpenFileWorker wrk = new OpenFileWorker(newSourceInfos, executeAfterOpen, reloadIndices); + wrk.execute(); + if (reloadIndices == null) { + sourceInfos.addAll(Arrays.asList(newSourceInfos)); + } else { + for (int i = 0; i < reloadIndices.length; i++) { + sourceInfos.set(reloadIndices[i], newSourceInfos[i]); + } + } + return OpenFileResult.OK; + } + + public static void closeFile(SWFList swf) { + View.checkAccess(); + + sourceInfos.remove(swf.sourceInfo); + mainFrame.getPanel().close(swf); + } + + public static void reloadFile(SWFList swf) { + View.checkAccess(); + + openFile(swf.sourceInfo, null, sourceInfos.indexOf(swf.sourceInfo)); + } + + public static boolean closeAll() { + View.checkAccess(); + + boolean closeResult = mainFrame.getPanel().closeAll(true); + if (closeResult) { + sourceInfos.clear(); + } + + return closeResult; + } + + public static boolean saveFileDialog(SWF swf, final SaveFileMode mode) { + JFileChooser fc = new JFileChooser(); + fc.setCurrentDirectory(new File(Configuration.lastSaveDir.get())); + String ext = ".swf"; + switch (mode) { + case SAVE: + case SAVEAS: + if (swf.getFile() != null) { + ext = Path.getExtension(swf.getFile()); + } + break; + case EXE: + ext = ".exe"; + break; + } + + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + + ExeExportMode exeExportMode = null; + if (mode == SaveFileMode.EXE) { + exeExportMode = Configuration.exeExportMode.get(); + if (exeExportMode == null) { + exeExportMode = ExeExportMode.WRAPPER; + } + String filterDescription = null; + switch (exeExportMode) { + case WRAPPER: + case PROJECTOR_WIN: + ext = ".exe"; + filterDescription = "filter.exe"; + break; + case PROJECTOR_MAC: + ext = ".dmg"; + filterDescription = "filter.dmg"; + break; + case PROJECTOR_LINUX: + // linux projector is compressed with tar.gz + // todo: decompress + ext = ""; + filterDescription = "filter.linuxExe"; + break; + } + + String fext = ext; + String ffilterDescription = filterDescription; + FileFilter exeFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(fext)) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate(ffilterDescription); + } + }; + fc.setFileFilter(exeFilter); + } else if (swf.gfx) { + fc.addChoosableFileFilter(swfFilter); + fc.setFileFilter(gfxFilter); + } else { + fc.setFileFilter(swfFilter); + fc.addChoosableFileFilter(gfxFilter); + } + final String extension = ext; + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) { + File file = Helper.fixDialogFile(fc.getSelectedFile()); + FileFilter selFilter = fc.getFileFilter(); + try { + String fileName = file.getAbsolutePath(); + if (selFilter == swfFilter) { + if (!fileName.toLowerCase().endsWith(extension)) { + fileName += extension; + } + swf.gfx = false; + } + if (selFilter == gfxFilter) { + if (!fileName.toLowerCase().endsWith(".gfx")) { + fileName += ".gfx"; + } + swf.gfx = true; + } + Main.saveFile(swf, fileName, mode, exeExportMode); + Configuration.lastSaveDir.set(file.getParentFile().getAbsolutePath()); + return true; + } catch (IOException ex) { + View.showMessageDialog(null, AppStrings.translate("error.file.write")); + } + } + return false; + } + + public static boolean openFileDialog() { + View.checkAccess(); + + JFileChooser fc = new JFileChooser(); + if (Configuration.openMultipleFiles.get()) { + fc.setMultiSelectionEnabled(true); + } + fc.setCurrentDirectory(new File(Configuration.lastOpenDir.get())); + FileFilter allSupportedFilter = new FileFilter() { + private final String[] supportedExtensions = new String[]{".swf", ".gfx", ".swc", ".zip", ".iggy"}; + + @Override + public boolean accept(File f) { + String name = f.getName().toLowerCase(); + for (String ext : supportedExtensions) { + if (name.endsWith(ext)) { + return true; + } + } + return f.isDirectory(); + } + + @Override + public String getDescription() { + String exts = Helper.joinStrings(supportedExtensions, "*%s", "; "); + return AppStrings.translate("filter.supported") + " (" + exts + ")"; + } + }; + fc.setFileFilter(allSupportedFilter); + FileFilter swfFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swf")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swf"); + } + }; + fc.addChoosableFileFilter(swfFilter); + + FileFilter swcFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".swc")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.swc"); + } + }; + fc.addChoosableFileFilter(swcFilter); + + FileFilter gfxFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".gfx")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.gfx"); + } + }; + fc.addChoosableFileFilter(gfxFilter); + + FileFilter iggyFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".iggy")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.iggy"); + } + }; + fc.addChoosableFileFilter(iggyFilter); + + FileFilter zipFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return (f.getName().toLowerCase().endsWith(".zip")) || (f.isDirectory()); + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.zip"); + } + }; + fc.addChoosableFileFilter(zipFilter); + + FileFilter binaryFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return true; + } + + @Override + public String getDescription() { + return AppStrings.translate("filter.binary"); + } + }; + fc.addChoosableFileFilter(binaryFilter); + + fc.setAcceptAllFileFilterUsed(false); + JFrame f = new JFrame(); + View.setWindowIcon(f); + int returnVal = fc.showOpenDialog(f); + if (returnVal == JFileChooser.APPROVE_OPTION) { + Configuration.lastOpenDir.set(Helper.fixDialogFile(fc.getSelectedFile()).getParentFile().getAbsolutePath()); + File[] selFiles = fc.getSelectedFiles(); + for (File file : selFiles) { + File selfile = Helper.fixDialogFile(file); + Main.openFile(selfile.getAbsolutePath(), null); + } + return true; + } else { + return false; + } + } + + public static void displayErrorFrame() { + ErrorLogFrame.getInstance().setVisible(true); + } + + private static String md5(byte data[]) { + try { + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); + byte[] array = md.digest(data); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; ++i) { + sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString(); + } catch (java.security.NoSuchAlgorithmException e) { + } + return null; + } + + private static void initGui() { + if (GraphicsEnvironment.isHeadless()) { + System.err.println("Error: Your system does not support Graphic User Interface"); + exit(); + } + + System.setProperty("sun.java2d.d3d", "false"); + System.setProperty("sun.java2d.noddraw", "true"); + + if (Configuration.hwAcceleratedGraphics.get()) { + System.setProperty("sun.java2d.opengl", Configuration._debugMode.get() ? "True" : "true"); + } else { + System.setProperty("sun.java2d.opengl", "false"); + } + + initUiLang(); + + if (Configuration.useRibbonInterface.get()) { + View.setLookAndFeel(); + } else { + try { + UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, null); + UIManager.put("Tree.expandedIcon", null); + UIManager.put("Tree.collapsedIcon", null); + UIManager.put("ColorChooserUI", null); + UIManager.put("ColorChooser.swatchesRecentSwatchSize", null); + UIManager.put("ColorChooser.swatchesSwatchSize", null); + UIManager.put("RibbonApplicationMenuPopupPanelUI", null); + UIManager.put("RibbonApplicationMenuButtonUI", null); + UIManager.put("ProgressBarUI", null); + UIManager.put("TextField.background", null); + UIManager.put("FormattedTextField.background", null); + UIManager.put("CommandButtonUI", null); + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { + logger.log(Level.SEVERE, null, ex); + } + } + + View.execInEventDispatch(() -> { + ErrorLogFrame.createNewInstance(); + + autoCheckForUpdates(); + offerAssociation(); + loadingDialog = new LoadingDialog(); + + DebuggerTools.initDebugger().addMessageListener(new DebugListener() { + @Override + public void onMessage(String clientId, String msg) { + } + + @Override + public void onLoaderURL(String clientId, String url) { + } + + @Override + public void onLoaderBytes(String clientId, byte[] data) { + String hash = md5(data); + for (SWFList sl : Main.getMainFrame().getPanel().getSwfs()) { + for (int s = 0; s < sl.size(); s++) { + String t = sl.get(s).getFileTitle(); + if (t == null) { + t = ""; + } + if (t.endsWith(":" + hash)) { //this one is already opened + return; + } + } + } + SWF swf = Main.getMainFrame().getPanel().getCurrentSwf(); + + String title = swf == null ? "?" : swf.getFileTitle(); + final String titleWithHash = title + ":" + hash; + try { + final String tfile = tempFile(titleWithHash); + Helper.writeFile(tfile, data); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + openFile(new SWFSourceInfo(null, tfile, titleWithHash)); + } + }); + } catch (IOException ex) { + logger.log(Level.SEVERE, "Cannot create tempfile"); + } + } + + @Override + public void onFinish(String clientId) { + } + }); + + try { + flashDebugger = new Debugger(); + debugHandler = new DebuggerHandler(); + debugHandler.addBreakListener(new DebuggerHandler.BreakListener() { + @Override + public void doContinue() { + mainFrame.getPanel().clearDebuggerColors(); + } + + @Override + public void breakAt(String scriptName, int line, final int classIndex, final int traitIndex, final int methodIndex) { + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + mainFrame.getPanel().gotoScriptLine(getMainFrame().getPanel().getCurrentSwf(), scriptName, line, classIndex, traitIndex, methodIndex); + } + }); + } + }); + debugHandler.addConnectionListener(new DebuggerHandler.ConnectionListener() { + @Override + public void connected() { + Main.mainFrame.getMenu().updateComponents(); + } + + @Override + public void disconnected() { + if (Main.mainFrame != null && Main.mainFrame.getPanel() != null) { + Main.mainFrame.getPanel().refreshBreakPoints(); + } + } + }); + flashDebugger.addConnectionListener(debugHandler); + } catch (IOException ex) { + logger.log(Level.SEVERE, "eeex", ex); + } + }); + } + + public static void startDebugger() { + flashDebugger.startDebugger(); + } + + public static void stopDebugger() { + flashDebugger.stopDebugger(); + } + + public static void showModeFrame() { + ensureMainFrame(); + mainFrame.setVisible(true); + } + + private static void offerAssociation() { + boolean offered = Configuration.offeredAssociation.get(); + if (!offered) { + if (Platform.isWindows()) { + if ((!ContextMenuTools.isAddedToContextMenu()) && View.showConfirmDialog(null, "Do you want to add FFDec to context menu of SWF files?\n(Can be changed later from main menu)", "Context menu", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) { + ContextMenuTools.addToContextMenu(true, false); + } + } + + Configuration.offeredAssociation.set(true); + } + } + + public static void initUiLang() { + if (GraphicsEnvironment.isHeadless()) { //No GUI in OS + return; + } + try { + Class cl = Class.forName("org.pushingpixels.substance.api.SubstanceLookAndFeel"); + Field field = cl.getDeclaredField("LABEL_BUNDLE"); + field.setAccessible(true); + field.set(null, null); + } catch (Throwable ex) { + logger.log(Level.SEVERE, null, ex); + } + + UIManager.put("OptionPane.okButtonText", AppStrings.translate("button.ok")); + UIManager.put("OptionPane.yesButtonText", AppStrings.translate("button.yes")); + UIManager.put("OptionPane.noButtonText", AppStrings.translate("button.no")); + UIManager.put("OptionPane.cancelButtonText", AppStrings.translate("button.cancel")); + UIManager.put("OptionPane.messageDialogTitle", AppStrings.translate("dialog.message.title")); + UIManager.put("OptionPane.titleText", AppStrings.translate("dialog.select.title")); + + UIManager.put("FileChooser.acceptAllFileFilterText", AppStrings.translate("FileChooser.acceptAllFileFilterText")); + UIManager.put("FileChooser.lookInLabelText", AppStrings.translate("FileChooser.lookInLabelText")); + UIManager.put("FileChooser.cancelButtonText", AppStrings.translate("button.cancel")); + UIManager.put("FileChooser.cancelButtonToolTipText", AppStrings.translate("button.cancel")); + UIManager.put("FileChooser.openButtonText", AppStrings.translate("FileChooser.openButtonText")); + UIManager.put("FileChooser.openButtonToolTipText", AppStrings.translate("FileChooser.openButtonToolTipText")); + UIManager.put("FileChooser.filesOfTypeLabelText", AppStrings.translate("FileChooser.filesOfTypeLabelText")); + UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); + UIManager.put("FileChooser.listViewButtonToolTipText", AppStrings.translate("FileChooser.listViewButtonToolTipText")); + UIManager.put("FileChooser.listViewButtonAccessibleName", AppStrings.translate("FileChooser.listViewButtonAccessibleName")); + UIManager.put("FileChooser.detailsViewButtonToolTipText", AppStrings.translate("FileChooser.detailsViewButtonToolTipText")); + UIManager.put("FileChooser.detailsViewButtonAccessibleName", AppStrings.translate("FileChooser.detailsViewButtonAccessibleName")); + UIManager.put("FileChooser.upFolderToolTipText", AppStrings.translate("FileChooser.upFolderToolTipText")); + UIManager.put("FileChooser.upFolderAccessibleName", AppStrings.translate("FileChooser.upFolderAccessibleName")); + UIManager.put("FileChooser.homeFolderToolTipText", AppStrings.translate("FileChooser.homeFolderToolTipText")); + UIManager.put("FileChooser.homeFolderAccessibleName", AppStrings.translate("FileChooser.homeFolderAccessibleName")); + UIManager.put("FileChooser.fileNameHeaderText", AppStrings.translate("FileChooser.fileNameHeaderText")); + UIManager.put("FileChooser.fileSizeHeaderText", AppStrings.translate("FileChooser.fileSizeHeaderText")); + UIManager.put("FileChooser.fileTypeHeaderText", AppStrings.translate("FileChooser.fileTypeHeaderText")); + UIManager.put("FileChooser.fileDateHeaderText", AppStrings.translate("FileChooser.fileDateHeaderText")); + UIManager.put("FileChooser.fileAttrHeaderText", AppStrings.translate("FileChooser.fileAttrHeaderText")); + UIManager.put("FileChooser.openDialogTitleText", AppStrings.translate("FileChooser.openDialogTitleText")); + UIManager.put("FileChooser.directoryDescriptionText", AppStrings.translate("FileChooser.directoryDescriptionText")); + UIManager.put("FileChooser.directoryOpenButtonText", AppStrings.translate("FileChooser.directoryOpenButtonText")); + UIManager.put("FileChooser.directoryOpenButtonToolTipText", AppStrings.translate("FileChooser.directoryOpenButtonToolTipText")); + UIManager.put("FileChooser.fileDescriptionText", AppStrings.translate("FileChooser.fileDescriptionText")); + UIManager.put("FileChooser.fileNameLabelText", AppStrings.translate("FileChooser.fileNameLabelText")); + UIManager.put("FileChooser.helpButtonText", AppStrings.translate("FileChooser.helpButtonText")); + UIManager.put("FileChooser.helpButtonToolTipText", AppStrings.translate("FileChooser.helpButtonToolTipText")); + UIManager.put("FileChooser.newFolderAccessibleName", AppStrings.translate("FileChooser.newFolderAccessibleName")); + UIManager.put("FileChooser.newFolderErrorText", AppStrings.translate("FileChooser.newFolderErrorText")); + UIManager.put("FileChooser.newFolderToolTipText", AppStrings.translate("FileChooser.newFolderToolTipText")); + UIManager.put("FileChooser.other.newFolder", AppStrings.translate("FileChooser.other.newFolder")); + UIManager.put("FileChooser.other.newFolder.subsequent", AppStrings.translate("FileChooser.other.newFolder.subsequent")); + UIManager.put("FileChooser.win32.newFolder", AppStrings.translate("FileChooser.win32.newFolder")); + UIManager.put("FileChooser.win32.newFolder.subsequent", AppStrings.translate("FileChooser.win32.newFolder.subsequent")); + UIManager.put("FileChooser.saveButtonText", AppStrings.translate("FileChooser.saveButtonText")); + UIManager.put("FileChooser.saveButtonToolTipText", AppStrings.translate("FileChooser.saveButtonToolTipText")); + UIManager.put("FileChooser.saveDialogTitleText", AppStrings.translate("FileChooser.saveDialogTitleText")); + UIManager.put("FileChooser.saveInLabelText", AppStrings.translate("FileChooser.saveInLabelText")); + UIManager.put("FileChooser.updateButtonText", AppStrings.translate("FileChooser.updateButtonText")); + UIManager.put("FileChooser.updateButtonToolTipText", AppStrings.translate("FileChooser.updateButtonToolTipText")); + + UIManager.put("FileChooser.detailsViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.detailsViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.detailsViewButtonToolTip.textAndMnemonic")); + UIManager.put("FileChooser.fileAttrHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileAttrHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileDateHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileDateHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileNameHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileNameHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.fileNameLabel.textAndMnemonic")); + UIManager.put("FileChooser.fileSizeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileSizeHeader.textAndMnemonic")); + UIManager.put("FileChooser.fileTypeHeader.textAndMnemonic", AppStrings.translate("FileChooser.fileTypeHeader.textAndMnemonic")); + UIManager.put("FileChooser.filesOfTypeLabel.textAndMnemonic", AppStrings.translate("FileChooser.filesOfTypeLabel.textAndMnemonic")); + UIManager.put("FileChooser.folderNameLabel.textAndMnemonic", AppStrings.translate("FileChooser.folderNameLabel.textAndMnemonic")); + UIManager.put("FileChooser.homeFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.homeFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.listViewActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.listViewActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.listViewButtonToolTip.textAndMnemonic", AppStrings.translate("FileChooser.listViewButtonToolTip.textAndMnemonic")); + UIManager.put("FileChooser.lookInLabel.textAndMnemonic", AppStrings.translate("FileChooser.lookInLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.newFolderActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.newFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.refreshActionLabel.textAndMnemonic", AppStrings.translate("FileChooser.refreshActionLabel.textAndMnemonic")); + UIManager.put("FileChooser.saveInLabel.textAndMnemonic", AppStrings.translate("FileChooser.saveInLabel.textAndMnemonic")); + UIManager.put("FileChooser.upFolderToolTip.textAndMnemonic", AppStrings.translate("FileChooser.upFolderToolTip.textAndMnemonic")); + UIManager.put("FileChooser.viewMenuButtonAccessibleName", AppStrings.translate("FileChooser.viewMenuButtonAccessibleName")); + UIManager.put("FileChooser.viewMenuButtonToolTipText", AppStrings.translate("FileChooser.viewMenuButtonToolTipText")); + UIManager.put("FileChooser.viewMenuLabel.textAndMnemonic", AppStrings.translate("FileChooser.viewMenuLabel.textAndMnemonic")); + UIManager.put("FileChooser.newFolderActionLabelText", AppStrings.translate("FileChooser.newFolderActionLabelText")); + UIManager.put("FileChooser.listViewActionLabelText", AppStrings.translate("FileChooser.listViewActionLabelText")); + UIManager.put("FileChooser.detailsViewActionLabelText", AppStrings.translate("FileChooser.detailsViewActionLabelText")); + UIManager.put("FileChooser.refreshActionLabelText", AppStrings.translate("FileChooser.refreshActionLabelText")); + UIManager.put("FileChooser.sortMenuLabelText", AppStrings.translate("FileChooser.sortMenuLabelText")); + UIManager.put("FileChooser.viewMenuLabelText", AppStrings.translate("FileChooser.viewMenuLabelText")); + UIManager.put("FileChooser.fileSizeKiloBytes", AppStrings.translate("FileChooser.fileSizeKiloBytes")); + UIManager.put("FileChooser.fileSizeMegaBytes", AppStrings.translate("FileChooser.fileSizeMegaBytes")); + UIManager.put("FileChooser.fileSizeGigaBytes", AppStrings.translate("FileChooser.fileSizeGigaBytes")); + UIManager.put("FileChooser.folderNameLabelText", AppStrings.translate("FileChooser.folderNameLabelText")); + + UIManager.put("ColorChooser.okText", AppStrings.translate("ColorChooser.okText")); + UIManager.put("ColorChooser.cancelText", AppStrings.translate("ColorChooser.cancelText")); + UIManager.put("ColorChooser.resetText", AppStrings.translate("ColorChooser.resetText")); + UIManager.put("ColorChooser.previewText", AppStrings.translate("ColorChooser.previewText")); + UIManager.put("ColorChooser.swatchesNameText", AppStrings.translate("ColorChooser.swatchesNameText")); + UIManager.put("ColorChooser.swatchesRecentText", AppStrings.translate("ColorChooser.swatchesRecentText")); + UIManager.put("ColorChooser.sampleText", AppStrings.translate("ColorChooser.sampleText")); + + } + + public static void initLang() { + if (!Configuration.locale.hasValue()) { + if (Platform.isWindows()) { + //Load from Installer + String uninstKey = "{E618D276-6596-41F4-8A98-447D442A77DB}_is1"; + uninstKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\" + uninstKey; + try { + if (Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey)) { + if (Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language")) { + String installedLoc = Advapi32Util.registryGetStringValue(WinReg.HKEY_LOCAL_MACHINE, uninstKey, "NSIS: Language"); + int lcid = Integer.parseInt(installedLoc); + char[] buf = new char[9]; + int cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO639LANGNAME, buf, 9); + String langCode = new String(buf, 0, cnt).trim().toLowerCase(); + + cnt = Kernel32.INSTANCE.GetLocaleInfo(lcid, Kernel32.LOCALE_SISO3166CTRYNAME, buf, 9); + String countryCode = new String(buf, 0, cnt).trim().toLowerCase(); + + List langs = Arrays.asList(SelectLanguageDialog.getAvailableLanguages()); + for (int i = 0; i < langs.size(); i++) { + langs.set(i, langs.get(i).toLowerCase()); + } + + String selectedLang = null; + + if (langs.contains(langCode + "-" + countryCode)) { + selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode + "-" + countryCode)]; + } else if (langs.contains(langCode)) { + selectedLang = SelectLanguageDialog.getAvailableLanguages()[langs.indexOf(langCode)]; + } + if (selectedLang != null) { + Configuration.locale.set(selectedLang); + } + } + } + } catch (Exception ex) { + //ignore + } + } + } + Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get())); + AppStrings.updateLanguage(); + + Helper.decompilationErrorAdd = AppStrings.translate(Configuration.autoDeobfuscate.get() ? "deobfuscation.comment.failed" : "deobfuscation.comment.tryenable"); + } + + /** + * Clear old FFDec/JavactiveX temp files + */ + private static void clearTemp() { + String tempDirPath = System.getProperty("java.io.tmpdir"); + if (tempDirPath == null) { + return; + } + File tempDir = new File(tempDirPath); + if (!tempDir.exists()) { + return; + } + File[] delFiles = tempDir.listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.matches("ffdec_cache.*\\.tmp") || name.matches("javactivex_.*\\.exe") || name.matches("temp[0-9]+\\.swf") || name.matches("ffdec_view_.*\\.swf"); + } + }); + + if (delFiles != null) { + for (File f : delFiles) { + try { + f.delete(); + } catch (Exception ex) { + //ignore + } + } + } + } + + /** + * @param args the command line arguments + * @throws IOException On error + */ + public static void main(String[] args) throws IOException { + setSessionLoaded(false); + + clearTemp(); + + try { + SWFDecompilerPlugin.loadPlugins(); + } catch (Throwable ex) { + logger.log(Level.SEVERE, "Failed to load plugins", ex); + } + + AppStrings.setResourceClass(MainFrame.class); + initLogging(Configuration._debugMode.get()); + + initLang(); + + if (Configuration.cacheOnDisk.get()) { + Cache.setStorageType(Cache.STORAGE_FILES); + } else { + Cache.setStorageType(Cache.STORAGE_MEMORY); + } + + if (args.length == 0) { + initGui(); + checkLibraryVersion(); + View.execInEventDispatch(() -> { + if (Configuration.allowOnlyOneInstance.get() && FirstInstance.focus()) { //Try to focus first instance + Main.exit(); + } else { + showModeFrame(); + reloadLastSession(); + } + }); + } else { + checkLibraryVersion(); + setSessionLoaded(true); + String[] filesToOpen = CommandLineArgumentParser.parseArguments(args); + if (filesToOpen != null && filesToOpen.length > 0) { + View.execInEventDispatch(() -> { + initGui(); + shouldCloseWhenClosingLoadingDialog = true; + if (Configuration.allowOnlyOneInstance.get() && FirstInstance.openFiles(Arrays.asList(filesToOpen))) { //Try to open in first instance + Main.exit(); + } else { + for (String fileToOpen : filesToOpen) { + openFile(fileToOpen, null); + } + } + }); + } + } + } + + private static void checkLibraryVersion() { + if (!ApplicationInfo.version.equals("unknown") && !ApplicationInfo.libraryVersion.equals("unknown") + && !Objects.equals(ApplicationInfo.version, ApplicationInfo.libraryVersion)) { + logger.log(Level.WARNING, "Application version is different from library version. FFDec may not work properly."); + } + } + + private static void reloadLastSession() { + boolean openingFiles = false; + if (Configuration.saveSessionOnExit.get()) { + String lastSession = Configuration.lastSessionFiles.get(); + if (lastSession != null && lastSession.length() > 0) { + String[] filesToOpen = lastSession.split(File.pathSeparator, -1); + List exfiles = new ArrayList<>(); + List extitles = new ArrayList<>(); + String lastSessionTitles = Configuration.lastSessionFileTitles.get(); + String[] fileTitles = new String[0]; + if (lastSessionTitles != null && !lastSessionTitles.isEmpty()) { + fileTitles = lastSessionTitles.split(File.pathSeparator, -1); + } + for (int i = 0; i < filesToOpen.length; i++) { + if (new File(filesToOpen[i]).exists()) { + exfiles.add(filesToOpen[i]); + if (fileTitles.length > i) { + extitles.add(fileTitles[i]); + } else { + extitles.add(null); + } + } + } + SWFSourceInfo[] sourceInfos = new SWFSourceInfo[exfiles.size()]; + for (int i = 0; i < exfiles.size(); i++) { + String extitle = extitles.get(i); + sourceInfos[i] = new SWFSourceInfo(null, exfiles.get(i), extitle == null || extitle.isEmpty() ? null : extitle); + } + if (sourceInfos.length > 0) { + openingFiles = true; + openFile(sourceInfos, () -> { + mainFrame.getPanel().tagTree.setSelectionPathString(Configuration.lastSessionSelection.get()); + setSessionLoaded(true); + }); + } + } + } + + if (!openingFiles) { + setSessionLoaded(true); + } + } + + public static String tempFile(String url) throws IOException { + File f = new File(Configuration.getFFDecHome() + "saved" + File.separator); + Path.createDirectorySafe(f); + return Configuration.getFFDecHome() + "saved" + File.separator + "asdec_" + Integer.toHexString(url.hashCode()) + ".tmp"; + } + + public static void removeTrayIcon() { + if (SystemTray.isSupported()) { + SystemTray tray = SystemTray.getSystemTray(); + if (trayIcon != null) { + tray.remove(trayIcon); + trayIcon = null; + } + } + } + + public static void switchProxy() { + proxyFrame.switchState(); + if (stopMenuItem != null) { + if (proxyFrame.isRunning()) { + stopMenuItem.setLabel(AppStrings.translate("proxy.stop")); + } else { + stopMenuItem.setLabel(AppStrings.translate("proxy.start")); + } + } + } + + public static void addTrayIcon() { + if (trayIcon != null) { + return; + } + if (SystemTray.isSupported()) { + SystemTray tray = SystemTray.getSystemTray(); + trayIcon = new TrayIcon(View.loadImage("proxy16"), ApplicationInfo.VENDOR + " " + ApplicationInfo.SHORT_APPLICATION_NAME + " " + AppStrings.translate("proxy")); + trayIcon.setImageAutoSize(true); + PopupMenu trayPopup = new PopupMenu(); + + ActionListener trayListener = new ActionListener() { + /** + * Invoked when an action occurs. + */ + @Override + public void actionPerformed(ActionEvent e) { + if (e.getActionCommand().equals("EXIT")) { + Main.exit(); + } + if (e.getActionCommand().equals("SHOW")) { + Main.showProxy(); + } + if (e.getActionCommand().equals("SWITCH")) { + Main.switchProxy(); + } + } + }; + + MenuItem showMenuItem = new MenuItem(AppStrings.translate("proxy.show")); + showMenuItem.setActionCommand("SHOW"); + showMenuItem.addActionListener(trayListener); + trayPopup.add(showMenuItem); + stopMenuItem = new MenuItem(AppStrings.translate("proxy.start")); + stopMenuItem.setActionCommand("SWITCH"); + stopMenuItem.addActionListener(trayListener); + trayPopup.add(stopMenuItem); + trayPopup.addSeparator(); + MenuItem exitMenuItem = new MenuItem(AppStrings.translate("exit")); + exitMenuItem.setActionCommand("EXIT"); + exitMenuItem.addActionListener(trayListener); + trayPopup.add(exitMenuItem); + + trayIcon.setPopupMenu(trayPopup); + trayIcon.addMouseListener(new MouseAdapter() { + /** + * {@inheritDoc} + */ + @Override + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON1) { + Main.showProxy(); + } + } + }); + try { + tray.add(trayIcon); + } catch (AWTException ex) { + } + } + } + + public static void exit() { + Configuration.saveConfig(); + if (mainFrame != null && mainFrame.getPanel() != null) { + mainFrame.getPanel().unloadFlashPlayer(); + mainFrame.dispose(); + } + if (fileTxt != null) { + try { + fileTxt.flush(); + fileTxt.close(); + } catch (Exception ex) { + //ignore + } + } + System.exit(0); + } + + public static void about() { + (new AboutDialog()).setVisible(true); + } + + public static void advancedSettings() { + advancedSettings(null); + } + + public static void advancedSettings(String category) { + (new AdvancedSettingsDialog(category)).setVisible(true); + } + + public static void autoCheckForUpdates() { + if (Configuration.checkForUpdatesAuto.get()) { + Calendar lastUpdatesCheckDate = Configuration.lastUpdatesCheckDate.get(); + if ((lastUpdatesCheckDate == null) || (lastUpdatesCheckDate.getTime().getTime() < Calendar.getInstance().getTime().getTime() - Configuration.checkForUpdatesDelay.get())) { + new SwingWorker() { + @Override + protected Object doInBackground() throws Exception { + checkForUpdates(); + return null; + } + }.execute(); + } + } + } + + public static boolean checkForUpdates() { + String currentVersion = ApplicationInfo.version; + if (currentVersion.equals("unknown")) { + // sometimes during development the version information is not available + return false; + } + + List accepted = new ArrayList<>(); + if (Configuration.checkForUpdatesStable.get()) { + accepted.add("stable"); + } + if (Configuration.checkForUpdatesNightly.get()) { + accepted.add("nightly"); + } + + if (accepted.isEmpty()) { + return false; + } + + String acceptVersions = String.join(",", accepted); + try { + String proxyAddress = Configuration.updateProxyAddress.get(); + URL url = new URL(ApplicationInfo.updateCheckUrl); + + URLConnection uc; + if (proxyAddress != null && !proxyAddress.isEmpty()) { + int port = 8080; + if (proxyAddress.contains(":")) { + String[] parts = proxyAddress.split(":"); + port = Integer.parseInt(parts[1]); + proxyAddress = parts[0]; + } + + uc = url.openConnection(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyAddress, port))); + } else { + uc = url.openConnection(); + } + uc.setRequestProperty("X-Accept-Versions", acceptVersions); + uc.setRequestProperty("X-Update-Major", "" + UPDATE_SYSTEM_MAJOR); + uc.setRequestProperty("X-Update-Minor", "" + UPDATE_SYSTEM_MINOR); + uc.setRequestProperty("User-Agent", ApplicationInfo.shortApplicationVerName); + String currentLoc = Configuration.locale.get("en"); + uc.setRequestProperty("Accept-Language", currentLoc + ("en".equals(currentLoc) ? "" : ", en;q=0.8")); + + uc.connect(); + + BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); + String s; + final java.util.List versions = new ArrayList<>(); + String header = ""; + Pattern headerPat = Pattern.compile("\\[([a-zA-Z0-9]+)\\]"); + int updateMajor; + int updateMinor; + Version ver = null; + while ((s = br.readLine()) != null) { + + Matcher m = headerPat.matcher(s); + if (m.matches()) { + header = m.group(1); + if (header.equals("version")) { + ver = new Version(); + versions.add(ver); + } + if (header.equals("noversion")) { + break; + } + } else if (s.contains("=")) { + String key = s.substring(0, s.indexOf('=')); + String val = s.substring(s.indexOf('=') + 1); + if ("updateSystem".equals(header)) { + if (key.equals("majorVersion")) { + updateMajor = Integer.parseInt(val); + if (updateMajor > UPDATE_SYSTEM_MAJOR) { + break; + } + } + if (key.equals("minorVersion")) { + updateMinor = Integer.parseInt(val); + } + } + if ("version".equals(header) && (ver != null)) { + if (key.equals("versionId")) { + ver.versionId = Integer.parseInt(val); + } + if (key.equals("versionName")) { + ver.versionName = val; + } + if (key.equals("nightly")) { + ver.nightly = val.equals("true"); + } + if (key.equals("revision")) { + ver.revision = val; + } + if (key.equals("build")) { + ver.build = Integer.parseInt(val); + } + if (key.equals("major")) { + ver.major = Integer.parseInt(val); + } + if (key.equals("minor")) { + ver.minor = Integer.parseInt(val); + } + if (key.equals("release")) { + ver.release = Integer.parseInt(val); + } + if (key.equals("longVersionName")) { + ver.longVersionName = val; + } + if (key.equals("releaseDate")) { + ver.releaseDate = val; + } + if (key.equals("appName")) { + ver.appName = val; + } + if (key.equals("appFullName")) { + ver.appFullName = val; + } + if (key.equals("updateLink")) { + ver.updateLink = val; + } + if (key.equals("change[]")) { + String changeType = val.substring(0, val.indexOf('|')); + String change = val.substring(val.indexOf('|') + 1); + if (!ver.changes.containsKey(changeType)) { + ver.changes.put(changeType, new ArrayList<>()); + } + List chlist = ver.changes.get(changeType); + chlist.add(change); + } + } + } + } + + if (!versions.isEmpty()) { + View.execInEventDispatch(() -> { + NewVersionDialog newVersionDialog = new NewVersionDialog(versions); + newVersionDialog.setVisible(true); + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); + }); + + return true; + } + } catch (IOException | NumberFormatException ex) { + return false; + } + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); + return false; + } + + private static FileHandler fileTxt; + + public static void clearLogFile() { + Logger logger = Logger.getLogger(""); + + FileHandler oldFileTxt = fileTxt; + fileTxt = null; + if (oldFileTxt != null) { + logger.removeHandler(fileTxt); + oldFileTxt.flush(); + oldFileTxt.close(); + } + + String fileName = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss"); + + try { + fileName = Configuration.getFFDecHome() + "logs" + File.separator; + if (Configuration.useDetailedLogging.get()) { + fileName += "log-" + sdf.format(new Date()) + ".txt"; + } else { + fileName += "log.txt"; + } + File f = new File(fileName).getParentFile(); + if (!f.exists()) { + f.mkdir(); + } + fileTxt = new FileHandler(fileName); + } catch (IOException | SecurityException ex) { + //cannot get lock error + if (ex.getMessage().contains("lock for")) { + //remove all old log files and their .lck + for (int i = 0; i <= 100; i++) { + File flog = new File(fileName + (i == 0 ? "" : "." + i)); + File flog_lock = new File(fileName + (i == 0 ? "" : "." + i) + ".lck"); + flog.delete(); + flog_lock.delete(); + } + try { + fileTxt = new FileHandler(fileName); + } catch (IOException | SecurityException ex1) { + logger.log(Level.SEVERE, "Cannot initialize logging", ex); + } + } else { + logger.log(Level.SEVERE, "Cannot initialize logging", ex); + } + } + + Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread t, Throwable e) { + logger.log(Level.SEVERE, "Uncaught exception in thread: " + t.getName(), e); + if (e instanceof OutOfMemoryError && !Helper.is64BitJre() && Helper.is64BitOs()) { + View.showMessageDialog(null, AppStrings.translate("message.warning.outOfMemory32BitJre"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE); + } + } + }); + + Formatter formatterTxt = new LogFormatter(); + if (fileTxt != null) { + fileTxt.setFormatter(formatterTxt); + logger.addHandler(fileTxt); + } + + if (!GraphicsEnvironment.isHeadless() && ErrorLogFrame.hasInstance()) { + ErrorLogFrame.getInstance().clearErrorState(); + } + + sdf = new SimpleDateFormat("yyyy-MM-dd"); + logger.log(Level.INFO, "Date: {0}", sdf.format(new Date())); + logger.log(Level.INFO, ApplicationInfo.applicationVerName); + logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ + System.getProperty("os.name"), System.getProperty("os.version"), System.getProperty("os.arch")}); + logger.log(Level.INFO, "{0} {1} {2}", new Object[]{ + System.getProperty("java.version"), System.getProperty("java.vendor"), System.getProperty("os.arch")}); + } + + public static void initLogging(boolean debug) { + try { + Logger logger = Logger.getLogger(""); + logger.setLevel(Configuration.logLevel); + + Handler[] handlers = logger.getHandlers(); + for (int i = handlers.length - 1; i >= 0; i--) { + logger.removeHandler(handlers[i]); + } + + ConsoleHandler conHan = new ConsoleHandler(); + conHan.setLevel(debug ? Level.CONFIG : Level.WARNING); + SimpleFormatter formatterTxt = new SimpleFormatter(); + conHan.setFormatter(formatterTxt); + logger.addHandler(conHan); + clearLogFile(); + + } catch (Exception ex) { + throw new RuntimeException("Problems with creating the log files"); + } + } +} diff --git a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java index c947bfde1..eb020c8bd 100644 --- a/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java +++ b/src/com/jpexs/decompiler/flash/gui/editor/LineMarkedEditorPane.java @@ -1,693 +1,693 @@ -/* - * Copyright (C) 2010-2016 JPEXS - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.jpexs.decompiler.flash.gui.editor; - -import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; -import com.jpexs.decompiler.flash.configuration.Configuration; -import com.jpexs.decompiler.flash.gui.AppStrings; -import java.awt.Color; -import java.awt.Cursor; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.KeyEventPostProcessor; -import java.awt.KeyboardFocusManager; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.Shape; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.SortedSet; -import java.util.TreeSet; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.plaf.TextUI; -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; -import javax.swing.text.Document; -import javax.swing.text.Element; -import javax.swing.text.Highlighter.HighlightPainter; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.Segment; -import javax.swing.text.View; -import jsyntaxpane.SyntaxDocument; -import jsyntaxpane.SyntaxStyle; -import jsyntaxpane.Token; -import jsyntaxpane.actions.ActionUtils; - -/** - * - * @author JPEXS - */ -public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHandler { - - private static final int truncateLimit = 2 * 1024 * 1024; - - public static final Color BG_SELECTED_LINE = new Color(0xe9, 0xef, 0xf8); - - public static final Color BG_ERROR_LINE = new Color(255, 200, 200); - - private int lastLine = -1; - - private boolean error = false; - - private Token lastUnderlined = null; - - private static final HighlightPainter underLinePainter = new UnderLinePainter(new Color(0, 0, 255)); - - private LinkHandler linkHandler = this; - - public static class LineMarker implements Comparable { - - private final Color bgColor; - - private final Color color; - - private FgPainter fgPainter; - - //private int line; - private final int priority; - - public FgPainter getForegroundPainter() { - return fgPainter; - } - - @Override - public String toString() { - return bgColor.toString() + " priority:" + priority; - } - - public LineMarker(Color color, Color bgColor, int priority) { - this.bgColor = bgColor; - this.color = color; - this.priority = priority; - if (color != null) { - this.fgPainter = new FgPainter(color, bgColor); - } - } - - @Override - public int hashCode() { - int hash = 5; - hash = 17 * hash + Objects.hashCode(this.bgColor); - hash = 17 * hash + Objects.hashCode(this.color); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final LineMarker other = (LineMarker) obj; - if (!Objects.equals(this.bgColor, other.bgColor)) { - return false; - } - return (Objects.equals(this.color, other.color)); - } - - public Color getBgColor() { - return bgColor; - } - - public Color getColor() { - return color; - } - - @Override - public int compareTo(LineMarker o) { - return priority - o.priority; - } - } -//(Map>) - - private Map> lineMarkers = Collections.synchronizedMap(new HashMap>()); - - public void setLineMarkers(Map> colorMarkers) { - this.lineMarkers = colorMarkers; - } - - public void clearLineColors() { - lineMarkers.clear(); - repaint(); - } - - public boolean hasColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (lineMarkers.containsKey(line)) { - return lineMarkers.get(line).contains(lm); - } - return false; - } - - public void removeColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (lineMarkers.containsKey(line)) { - lineMarkers.get(line).remove(lm); - } - getParent().repaint(); - } - - public void removeColorMarkerOnAllLines(LineMarker lm) { - for (int line : lineMarkers.keySet()) { - line += firstLineOffset(); - removeColorMarker(line, lm); - } - } - - public int firstLineOffset() { - return 0; - } - - public void toggleColorMarker(int line, LineMarker lm) { - if (!lineMarkers.containsKey(line - firstLineOffset())) { - addColorMarker(line, lm); - } else if (lineMarkers.get(line - firstLineOffset()).contains(lm)) { - removeColorMarker(line, lm); - } else { - addColorMarker(line, lm); - } - getParent().repaint(); - } - - public void addColorMarker(int line, LineMarker lm) { - line -= firstLineOffset(); - if (!lineMarkers.containsKey(line)) { - lineMarkers.put(line, Collections.synchronizedSortedSet(new TreeSet<>())); - } - lineMarkers.get(line).add(lm); - getParent().repaint(); - } - - public int getLine() { - int caretPosition = getCaretPosition(); - Element root = getDocument().getDefaultRootElement(); - int currentLine = root.getElementIndex(caretPosition); - return currentLine; - } - - public void markError() { - error = true; - } - - public void gotoLine(int line) { - int pos = ActionUtils.getDocumentPosition(this, line, 0); - if (pos != -1) { - setCaretPosition(pos); - } - } - - public void gotoLineCol(int line, int column) { - int pos = ActionUtils.getDocumentPosition(this, line, column); - if (pos != -1) { - setCaretPosition(pos); - } - } - - public Point getLineLocation(int line) { - int pos = ActionUtils.getDocumentPosition(this, line + 1, 0); - if (pos < 0) { - return null; - } - try { - Rectangle r = modelToView(pos); - return new Point(r.x, r.y); - } catch (BadLocationException ex) { - return null; - } - } - - private void getLineBounds(int line, Reference lineStart, Reference lineEnd) { - Document d = getDocument(); - String text = ""; - try { - text = d.getText(0, d.getLength()); - } catch (BadLocationException ex) { - //ignore - } - int lineCnt = 0; - int lineStartVal = 0; - int lineEndVal = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '\n') { - lineCnt++; - if (lineCnt == line) { - lineStartVal = i + 1; - } - if (lineCnt == line + 1) { - lineEndVal = i; - } - } - } - if (lineCnt == 0) { - lineEndVal = text.length() - 1; - if (line > 0) { - lineStartVal = text.length() - 1; - } - } - lineEnd.setVal(lineEndVal); - lineStart.setVal(lineStartVal); - } - - public void selectLine(int line) { - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - getLineBounds(line, lineStart, lineEnd); - - select(lineStart.getVal(), lineEnd.getVal()); - requestFocus(); - } - - public String getCurrentLineText() { - return getLineText(getLine()); - } - - public String getLineText(int line) { - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - getLineBounds(line, lineStart, lineEnd); - try { - return getDocument().getText(lineStart.getVal(), lineEnd.getVal() - lineStart.getVal()); - } catch (BadLocationException ex) { - return null; - } - } - - public LineMarkedEditorPane() { - setOpaque(false); - addCaretListener(new CaretListener() { - @Override - public void caretUpdate(CaretEvent e) { - int caretPosition = getCaretPosition(); - Element root = getDocument().getDefaultRootElement(); - int currentLine = root.getElementIndex(caretPosition); - if (currentLine != lastLine) { - lastLine = currentLine; - error = false; - repaint(); - } - - } - }); - final LinkAdapter la = new LinkAdapter(); - addMouseMotionListener(la); - addMouseListener(la); - - //No standard AddKeyListener as we want to catch Ctrl globally no matter of focus - KeyboardFocusManager.getCurrentKeyboardFocusManager() - .addKeyEventPostProcessor(new KeyEventPostProcessor() { - @Override - public boolean postProcessKeyEvent(KeyEvent e) { - if (e.getID() == KeyEvent.KEY_PRESSED) { - la.keyPressed(e); - } - if (e.getID() == KeyEvent.KEY_RELEASED) { - la.keyReleased(e); - } - if (e.getID() == KeyEvent.KEY_TYPED) { - la.keyTyped(e); - } - return false; - } - }); - - } - - public Token tokenAtPos(Point lastPos) { - Document d = getDocument(); - if (d instanceof SyntaxDocument) { - SyntaxDocument sd = (SyntaxDocument) d; - - //correction of token last character - int pos = viewToModel(lastPos); - Rectangle r; - try { - r = modelToView(pos); - if (r != null) { - if (lastPos.x < r.x) { - pos--; - } - } - } catch (BadLocationException ex) { - //ignore - } - Token t = sd.getTokenAt(pos); - - //Correction of token of length 1 character - if (pos > 0 && pos < d.getLength() - 1 && t != null && t.length == 1) { - Token tprev = sd.getTokenAt(pos - 1); - if (tprev == t) { - t = sd.getTokenAt(pos + 1); - } - } - - return t; - } - return null; - } - - private class LinkAdapter extends MouseAdapter implements KeyListener { - - private Point lastPos = new Point(0, 0); - - private boolean ctrlDown = false; - - @Override - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) { - ctrlDown = true; - update(); - } - } - - @Override - public void keyTyped(KeyEvent e) { - - } - - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_CONTROL) { - ctrlDown = false; - update(); - } - } - - private void update() { - if (ctrlDown) { - Token t = tokenAtPos(lastPos); - - if (t != lastUnderlined) { - if (t == null || lastUnderlined == null || !t.equals(lastUnderlined)) { - MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); - - if (t != null && linkHandler.isLink(t)) { - lastUnderlined = t; - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - - } else { - lastUnderlined = null; - } - } else { - lastUnderlined = null; - } - } - - if (lastUnderlined != null) { - MyMarkers.markToken(LineMarkedEditorPane.this, lastUnderlined, underLinePainter); - } else { - setCursor(Cursor.getDefaultCursor()); - } - repaint(); - } else { - lastUnderlined = null; - MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); - setCursor(Cursor.getDefaultCursor()); - repaint(); - } - } - - @Override - public void mouseClicked(MouseEvent e) { - if (ctrlDown) { - Token t = tokenAtPos(lastPos); - if (t != null && linkHandler.isLink(t)) { - linkHandler.handleLink(t); - } - } - } - - @Override - public void mouseMoved(MouseEvent e) { - - ctrlDown = (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0; - lastPos = e.getPoint(); - update(); - - } - } - - public void setLinkHandler(LinkHandler linkHandler) { - if (linkHandler == null) { - linkHandler = this; - } - this.linkHandler = linkHandler; - } - - public LinkHandler getLinkHandler() { - return linkHandler; - } - - @Override - public HighlightPainter linkPainter() { - return underLinePainter; - } - - @Override - public boolean isLink(Token token) { - return false; - } - - @Override - public void handleLink(Token token) { - - } - - @Override - public void setText(String t) { - this.lineMarkers = new HashMap<>(); - lastLine = -1; - error = false; - if (Configuration._debugMode.get() && t != null && t.length() > truncateLimit) { - t = t.substring(0, truncateLimit) + "\r\n" + AppStrings.translate("editorTruncateWarning").replace("%chars%", Integer.toString(truncateLimit)); - } - - super.setText(t); - setCaretPosition(0); //scroll to top - } - - public static class FgPainter extends DefaultHighlighter.DefaultHighlightPainter { - - private final SyntaxStyle fgStyle; - - public FgPainter(Color color, Color bgColor) { - super(bgColor); - this.fgStyle = new SyntaxStyle(color, false, false); - } - - @Override - public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { - try { - // --- determine locations --- - TextUI mapper = c.getUI(); - - Segment seg = new Segment(); - ((SyntaxDocument) c.getDocument()).getText(offs0, offs1 - offs0, seg); - - Rectangle r = mapper.modelToView(c, offs0, Position.Bias.Forward); - FontMetrics fm = g.getFontMetrics(); - //int fh = fm.getHeight(); - fgStyle.drawText(seg, r.x, r.y + fm.getAscent(), g, null, offs0); - /*for (int i = offs0; i < offs1; i++) { - - Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); - Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); - if (r1.y == r.y) { - ((SyntaxDocument) c.getDocument()).getText(i, 1, seg); - fgStyle.drawText(seg, r.x, r.y, g, null, i); - //g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); - } - }*/ - - } catch (BadLocationException e) { - // can't render - } - } - - @Override - public Shape paintLayer(Graphics g, int offs0, int offs1, - Shape bounds, JTextComponent c, View view) { - - g.setColor(c.getSelectionColor()); - - Rectangle r; - - if (offs0 == view.getStartOffset() - && offs1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - if (bounds instanceof Rectangle) { - r = (Rectangle) bounds; - } else { - r = bounds.getBounds(); - } - } else { - // Should only render part of View. - try { - // --- determine locations --- - Shape shape = view.modelToView(offs0, Position.Bias.Forward, - offs1, Position.Bias.Backward, - bounds); - r = (shape instanceof Rectangle) - ? (Rectangle) shape : shape.getBounds(); - } catch (BadLocationException e) { - // can't render - r = null; - } - } - - if (r != null) { - r.width = Math.max(r.width, 1); - - paint(g, offs0, offs1, r, c); - } - - return r; - } - } - - public static class UnderLinePainter extends DefaultHighlighter.DefaultHighlightPainter { - - public UnderLinePainter(Color color) { - super(color); - } - - @Override - public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { - try { - // --- determine locations --- - TextUI mapper = c.getUI(); - - Color col = getColor(); - if (col == null) { - col = Color.black; - } - g.setColor(col); - for (int i = offs0; i < offs1; i++) { - - Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); - Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); - if (r1.y == r.y) { - g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); - } - } - - } catch (BadLocationException e) { - // can't render - } - } - - @Override - public Shape paintLayer(Graphics g, int offs0, int offs1, - Shape bounds, JTextComponent c, View view) { - - g.setColor(c.getSelectionColor()); - - Rectangle r; - - if (offs0 == view.getStartOffset() - && offs1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - if (bounds instanceof Rectangle) { - r = (Rectangle) bounds; - } else { - r = bounds.getBounds(); - } - } else { - // Should only render part of View. - try { - // --- determine locations --- - Shape shape = view.modelToView(offs0, Position.Bias.Forward, - offs1, Position.Bias.Backward, - bounds); - r = (shape instanceof Rectangle) - ? (Rectangle) shape : shape.getBounds(); - } catch (BadLocationException e) { - // can't render - r = null; - } - } - - if (r != null) { - r.width = Math.max(r.width, 1); - - paint(g, offs0, offs1, r, c); - - } - - return r; - } - } - - @Override - public void paint(Graphics g) { - g.setColor(Color.white); - g.fillRect(0, 0, getWidth(), getHeight()); - FontMetrics fontMetrics = g.getFontMetrics(); - int lh = fontMetrics.getHeight(); - int d = fontMetrics.getDescent(); - - if (lastLine > 0) { - if (error) { - g.setColor(BG_ERROR_LINE); - } else { - g.setColor(BG_SELECTED_LINE); - } - g.fillRect(0, d + lh * lastLine - 1, getWidth(), lh); - } - for (int line : lineMarkers.keySet()) { - SortedSet cs = lineMarkers.get(line); - if (cs.isEmpty()) { - continue; - } - LineMarker lastMarker = cs.first(); - if (lastMarker.getBgColor() == null) { - continue; - } - g.setColor(lastMarker.getBgColor()); - line += firstLineOffset(); - g.fillRect(0, d + lh * (line - 1), getWidth(), lh); - } - super.paint(g); - for (int line : lineMarkers.keySet()) { - - SortedSet cs = lineMarkers.get(line); - if (cs.isEmpty()) { - continue; - } - line += firstLineOffset(); - - Reference lineStart = new Reference<>(0); - Reference lineEnd = new Reference<>(0); - - getLineBounds(line, lineStart, lineEnd); - FgPainter fgp = cs.first().getForegroundPainter(); - if (fgp != null) { - fgp.paint(g, lineStart.getVal(), lineEnd.getVal(), null, this); - } - } - } -} +/* + * Copyright (C) 2010-2016 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.jpexs.decompiler.flash.gui.editor; + +import com.jpexs.decompiler.flash.abc.avm2.parser.script.Reference; +import com.jpexs.decompiler.flash.configuration.Configuration; +import com.jpexs.decompiler.flash.gui.AppStrings; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.KeyEventPostProcessor; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.SortedSet; +import java.util.TreeSet; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.plaf.TextUI; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Highlighter.HighlightPainter; +import javax.swing.text.JTextComponent; +import javax.swing.text.Position; +import javax.swing.text.Segment; +import javax.swing.text.View; +import jsyntaxpane.SyntaxDocument; +import jsyntaxpane.SyntaxStyle; +import jsyntaxpane.Token; +import jsyntaxpane.actions.ActionUtils; + +/** + * + * @author JPEXS + */ +public class LineMarkedEditorPane extends UndoFixedEditorPane implements LinkHandler { + + private static final int truncateLimit = 2 * 1024 * 1024; + + public static final Color BG_SELECTED_LINE = new Color(0xe9, 0xef, 0xf8); + + public static final Color BG_ERROR_LINE = new Color(255, 200, 200); + + private int lastLine = -1; + + private boolean error = false; + + private Token lastUnderlined = null; + + private static final HighlightPainter underLinePainter = new UnderLinePainter(new Color(0, 0, 255)); + + private LinkHandler linkHandler = this; + + public static class LineMarker implements Comparable { + + private final Color bgColor; + + private final Color color; + + private FgPainter fgPainter; + + //private int line; + private final int priority; + + public FgPainter getForegroundPainter() { + return fgPainter; + } + + @Override + public String toString() { + return bgColor.toString() + " priority:" + priority; + } + + public LineMarker(Color color, Color bgColor, int priority) { + this.bgColor = bgColor; + this.color = color; + this.priority = priority; + if (color != null) { + this.fgPainter = new FgPainter(color, bgColor); + } + } + + @Override + public int hashCode() { + int hash = 5; + hash = 17 * hash + Objects.hashCode(this.bgColor); + hash = 17 * hash + Objects.hashCode(this.color); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final LineMarker other = (LineMarker) obj; + if (!Objects.equals(this.bgColor, other.bgColor)) { + return false; + } + return (Objects.equals(this.color, other.color)); + } + + public Color getBgColor() { + return bgColor; + } + + public Color getColor() { + return color; + } + + @Override + public int compareTo(LineMarker o) { + return priority - o.priority; + } + } +//(Map>) + + private Map> lineMarkers = Collections.synchronizedMap(new HashMap>()); + + public void setLineMarkers(Map> colorMarkers) { + this.lineMarkers = colorMarkers; + } + + public void clearLineColors() { + lineMarkers.clear(); + repaint(); + } + + public boolean hasColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (lineMarkers.containsKey(line)) { + return lineMarkers.get(line).contains(lm); + } + return false; + } + + public void removeColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (lineMarkers.containsKey(line)) { + lineMarkers.get(line).remove(lm); + } + getParent().repaint(); + } + + public void removeColorMarkerOnAllLines(LineMarker lm) { + for (int line : lineMarkers.keySet()) { + line += firstLineOffset(); + removeColorMarker(line, lm); + } + } + + public int firstLineOffset() { + return 0; + } + + public void toggleColorMarker(int line, LineMarker lm) { + if (!lineMarkers.containsKey(line - firstLineOffset())) { + addColorMarker(line, lm); + } else if (lineMarkers.get(line - firstLineOffset()).contains(lm)) { + removeColorMarker(line, lm); + } else { + addColorMarker(line, lm); + } + getParent().repaint(); + } + + public void addColorMarker(int line, LineMarker lm) { + line -= firstLineOffset(); + if (!lineMarkers.containsKey(line)) { + lineMarkers.put(line, Collections.synchronizedSortedSet(new TreeSet<>())); + } + lineMarkers.get(line).add(lm); + getParent().repaint(); + } + + public int getLine() { + int caretPosition = getCaretPosition(); + Element root = getDocument().getDefaultRootElement(); + int currentLine = root.getElementIndex(caretPosition); + return currentLine; + } + + public void markError() { + error = true; + } + + public void gotoLine(int line) { + int pos = ActionUtils.getDocumentPosition(this, line, 0); + if (pos != -1) { + setCaretPosition(pos); + } + } + + public void gotoLineCol(int line, int column) { + int pos = ActionUtils.getDocumentPosition(this, line, column); + if (pos != -1) { + setCaretPosition(pos); + } + } + + public Point getLineLocation(int line) { + int pos = ActionUtils.getDocumentPosition(this, line + 1, 0); + if (pos < 0) { + return null; + } + try { + Rectangle r = modelToView(pos); + return new Point(r.x, r.y); + } catch (BadLocationException ex) { + return null; + } + } + + private void getLineBounds(int line, Reference lineStart, Reference lineEnd) { + Document d = getDocument(); + String text = ""; + try { + text = d.getText(0, d.getLength()); + } catch (BadLocationException ex) { + //ignore + } + int lineCnt = 0; + int lineStartVal = 0; + int lineEndVal = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '\n') { + lineCnt++; + if (lineCnt == line) { + lineStartVal = i + 1; + } + if (lineCnt == line + 1) { + lineEndVal = i; + } + } + } + if (lineCnt == 0) { + lineEndVal = text.length() - 1; + if (line > 0) { + lineStartVal = text.length() - 1; + } + } + lineEnd.setVal(lineEndVal); + lineStart.setVal(lineStartVal); + } + + public void selectLine(int line) { + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + getLineBounds(line, lineStart, lineEnd); + + select(lineStart.getVal(), lineEnd.getVal()); + requestFocus(); + } + + public String getCurrentLineText() { + return getLineText(getLine()); + } + + public String getLineText(int line) { + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + getLineBounds(line, lineStart, lineEnd); + try { + return getDocument().getText(lineStart.getVal(), lineEnd.getVal() - lineStart.getVal()); + } catch (BadLocationException ex) { + return null; + } + } + + public LineMarkedEditorPane() { + setOpaque(false); + addCaretListener(new CaretListener() { + @Override + public void caretUpdate(CaretEvent e) { + int caretPosition = getCaretPosition(); + Element root = getDocument().getDefaultRootElement(); + int currentLine = root.getElementIndex(caretPosition); + if (currentLine != lastLine) { + lastLine = currentLine; + error = false; + repaint(); + } + + } + }); + final LinkAdapter la = new LinkAdapter(); + addMouseMotionListener(la); + addMouseListener(la); + + //No standard AddKeyListener as we want to catch Ctrl globally no matter of focus + KeyboardFocusManager.getCurrentKeyboardFocusManager() + .addKeyEventPostProcessor(new KeyEventPostProcessor() { + @Override + public boolean postProcessKeyEvent(KeyEvent e) { + if (e.getID() == KeyEvent.KEY_PRESSED) { + la.keyPressed(e); + } + if (e.getID() == KeyEvent.KEY_RELEASED) { + la.keyReleased(e); + } + if (e.getID() == KeyEvent.KEY_TYPED) { + la.keyTyped(e); + } + return false; + } + }); + + } + + public Token tokenAtPos(Point lastPos) { + Document d = getDocument(); + if (d instanceof SyntaxDocument) { + SyntaxDocument sd = (SyntaxDocument) d; + + //correction of token last character + int pos = viewToModel(lastPos); + Rectangle r; + try { + r = modelToView(pos); + if (r != null) { + if (lastPos.x < r.x) { + pos--; + } + } + } catch (BadLocationException ex) { + //ignore + } + Token t = sd.getTokenAt(pos); + + //Correction of token of length 1 character + if (pos > 0 && pos < d.getLength() - 1 && t != null && t.length == 1) { + Token tprev = sd.getTokenAt(pos - 1); + if (tprev == t) { + t = sd.getTokenAt(pos + 1); + } + } + + return t; + } + return null; + } + + private class LinkAdapter extends MouseAdapter implements KeyListener { + + private Point lastPos = new Point(0, 0); + + private boolean ctrlDown = false; + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) { + ctrlDown = true; + update(); + } + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_CONTROL) { + ctrlDown = false; + update(); + } + } + + private void update() { + if (ctrlDown) { + Token t = tokenAtPos(lastPos); + + if (t != lastUnderlined) { + if (t == null || lastUnderlined == null || !t.equals(lastUnderlined)) { + MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); + + if (t != null && linkHandler.isLink(t)) { + lastUnderlined = t; + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + } else { + lastUnderlined = null; + } + } else { + lastUnderlined = null; + } + } + + if (lastUnderlined != null) { + MyMarkers.markToken(LineMarkedEditorPane.this, lastUnderlined, underLinePainter); + } else { + setCursor(Cursor.getDefaultCursor()); + } + repaint(); + } else { + lastUnderlined = null; + MyMarkers.removeMarkers(LineMarkedEditorPane.this, underLinePainter); + setCursor(Cursor.getDefaultCursor()); + repaint(); + } + } + + @Override + public void mouseClicked(MouseEvent e) { + if (ctrlDown) { + Token t = tokenAtPos(lastPos); + if (t != null && linkHandler.isLink(t)) { + linkHandler.handleLink(t); + } + } + } + + @Override + public void mouseMoved(MouseEvent e) { + + ctrlDown = (e.getModifiersEx() & InputEvent.CTRL_DOWN_MASK) != 0; + lastPos = e.getPoint(); + update(); + + } + } + + public void setLinkHandler(LinkHandler linkHandler) { + if (linkHandler == null) { + linkHandler = this; + } + this.linkHandler = linkHandler; + } + + public LinkHandler getLinkHandler() { + return linkHandler; + } + + @Override + public HighlightPainter linkPainter() { + return underLinePainter; + } + + @Override + public boolean isLink(Token token) { + return false; + } + + @Override + public void handleLink(Token token) { + + } + + @Override + public void setText(String t) { + this.lineMarkers = new HashMap<>(); + lastLine = -1; + error = false; + if (Configuration._debugMode.get() && t != null && t.length() > truncateLimit) { + t = t.substring(0, truncateLimit) + "\r\n" + AppStrings.translate("editorTruncateWarning").replace("%chars%", Integer.toString(truncateLimit)); + } + + super.setText(t); + setCaretPosition(0); //scroll to top + } + + public static class FgPainter extends DefaultHighlighter.DefaultHighlightPainter { + + private final SyntaxStyle fgStyle; + + public FgPainter(Color color, Color bgColor) { + super(bgColor); + this.fgStyle = new SyntaxStyle(color, false, false); + } + + @Override + public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { + try { + // --- determine locations --- + TextUI mapper = c.getUI(); + + Segment seg = new Segment(); + ((SyntaxDocument) c.getDocument()).getText(offs0, offs1 - offs0, seg); + + Rectangle r = mapper.modelToView(c, offs0, Position.Bias.Forward); + FontMetrics fm = g.getFontMetrics(); + //int fh = fm.getHeight(); + fgStyle.drawText(seg, r.x, r.y + fm.getAscent(), g, null, offs0); + /*for (int i = offs0; i < offs1; i++) { + + Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); + Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); + if (r1.y == r.y) { + ((SyntaxDocument) c.getDocument()).getText(i, 1, seg); + fgStyle.drawText(seg, r.x, r.y, g, null, i); + //g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); + } + }*/ + + } catch (BadLocationException e) { + // can't render + } + } + + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor(c.getSelectionColor()); + + Rectangle r; + + if (offs0 == view.getStartOffset() + && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + if (bounds instanceof Rectangle) { + r = (Rectangle) bounds; + } else { + r = bounds.getBounds(); + } + } else { + // Should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1, Position.Bias.Backward, + bounds); + r = (shape instanceof Rectangle) + ? (Rectangle) shape : shape.getBounds(); + } catch (BadLocationException e) { + // can't render + r = null; + } + } + + if (r != null) { + r.width = Math.max(r.width, 1); + + paint(g, offs0, offs1, r, c); + } + + return r; + } + } + + public static class UnderLinePainter extends DefaultHighlighter.DefaultHighlightPainter { + + public UnderLinePainter(Color color) { + super(color); + } + + @Override + public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) { + try { + // --- determine locations --- + TextUI mapper = c.getUI(); + + Color col = getColor(); + if (col == null) { + col = Color.black; + } + g.setColor(col); + for (int i = offs0; i < offs1; i++) { + + Rectangle r = mapper.modelToView(c, i, Position.Bias.Forward); + Rectangle r1 = mapper.modelToView(c, i + 1, Position.Bias.Forward); + if (r1.y == r.y) { + g.drawLine(r.x, r.y + r.height - 3, r1.x, r.y + r.height - 3); + } + } + + } catch (BadLocationException e) { + // can't render + } + } + + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor(c.getSelectionColor()); + + Rectangle r; + + if (offs0 == view.getStartOffset() + && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + if (bounds instanceof Rectangle) { + r = (Rectangle) bounds; + } else { + r = bounds.getBounds(); + } + } else { + // Should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1, Position.Bias.Backward, + bounds); + r = (shape instanceof Rectangle) + ? (Rectangle) shape : shape.getBounds(); + } catch (BadLocationException e) { + // can't render + r = null; + } + } + + if (r != null) { + r.width = Math.max(r.width, 1); + + paint(g, offs0, offs1, r, c); + + } + + return r; + } + } + + @Override + public void paint(Graphics g) { + g.setColor(Color.white); + g.fillRect(0, 0, getWidth(), getHeight()); + FontMetrics fontMetrics = g.getFontMetrics(); + int lh = fontMetrics.getHeight(); + int d = fontMetrics.getDescent(); + + if (lastLine > 0) { + if (error) { + g.setColor(BG_ERROR_LINE); + } else { + g.setColor(BG_SELECTED_LINE); + } + g.fillRect(0, d + lh * lastLine - 1, getWidth(), lh); + } + for (int line : lineMarkers.keySet()) { + SortedSet cs = lineMarkers.get(line); + if (cs.isEmpty()) { + continue; + } + LineMarker lastMarker = cs.first(); + if (lastMarker.getBgColor() == null) { + continue; + } + g.setColor(lastMarker.getBgColor()); + line += firstLineOffset(); + g.fillRect(0, d + lh * (line - 1), getWidth(), lh); + } + super.paint(g); + for (int line : lineMarkers.keySet()) { + + SortedSet cs = lineMarkers.get(line); + if (cs.isEmpty()) { + continue; + } + line += firstLineOffset(); + + Reference lineStart = new Reference<>(0); + Reference lineEnd = new Reference<>(0); + + getLineBounds(line, lineStart, lineEnd); + FgPainter fgp = cs.first().getForegroundPainter(); + if (fgp != null) { + fgp.paint(g, lineStart.getVal(), lineEnd.getVal(), null, this); + } + } + } +} From 2bf141abee81f3a67cc2182430f48eb4d5800b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 18:31:45 +0100 Subject: [PATCH 058/114] separate ant task for newversion release --- build.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.xml b/build.xml index a24290fe1..c9afa7ae3 100644 --- a/build.xml +++ b/build.xml @@ -901,6 +901,10 @@ + + + + From f1300e12a05d486095876f55ed540ea48440cb52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:13:46 +0100 Subject: [PATCH 059/114] removing upload task --- build.xml | 114 +----------------------------------------------------- 1 file changed, 1 insertion(+), 113 deletions(-) diff --git a/build.xml b/build.xml index c9afa7ae3..acdfa918b 100644 --- a/build.xml +++ b/build.xml @@ -476,10 +476,6 @@ - - - - @@ -513,92 +509,7 @@ - - - - Uploading... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -903,31 +814,8 @@ - + - - - - - - - - - - - - - - - - - - - - - - - From 16e562192cd22dc721a52f3ff9f7c2524c7137bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:14:10 +0100 Subject: [PATCH 060/114] updated travis release/build scripts --- travis/after_success.sh | 58 ++++++++++++++++++++ travis/before_install.sh | 5 ++ travis/extract_changelog.php | 58 ++++++++++++++++++++ travis/script.sh | 103 +++++++++++++++++++++++++++++++++-- 4 files changed, 220 insertions(+), 4 deletions(-) create mode 100644 travis/after_success.sh create mode 100644 travis/extract_changelog.php diff --git a/travis/after_success.sh b/travis/after_success.sh new file mode 100644 index 000000000..869b7e772 --- /dev/null +++ b/travis/after_success.sh @@ -0,0 +1,58 @@ +#!/bin/bash +#stop on error +set -e + +if [ "$DO_DEPLOY" = 1 ]; then + echo "Deploying..." + GITHUB_REPO=$TRAVIS_REPO_SLUG + + echo "Creating release..." + ESC_VERSION_NAME=`echo $DEPLOY_VERSION_NAME|jq --raw-input --ascii-output '.'` + ESC_VERSION_DESCRIPTION=`printf "$DEPLOY_DESCRIPTION"|jq --raw-input --slurp --ascii-output '.'` + + echo '{"tag_name":"'$DEPLOY_TAG_NAME'","target_commitish":"'$DEPLOY_COMMITISH'","name":'$ESC_VERSION_NAME',"body":'$ESC_VERSION_DESCRIPTION',"draft":false,"prerelease":'$DEPLOY_PRERELEASE'}'>json.bin + json=`curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` + RELEASE_ID=`echo "$json"|jq '.id'` + + + + #List of files to upload + DEPLOY_ATTACH_FILES_JSON='[ +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_setup.exe","content_type":"application/exe"}, +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.zip","content_type":"application/zip"}, +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.deb","content_type":"application/vnd.debian.binary-package"}, +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.pkg","content_type":"application/x-newton-compatible-pkg"}, +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_macosx.zip","content_type":"application/zip"}, +{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_lang.zip","content_type":"application/zip"}, +{"file_name":"ffdec_lib_${DEPLOY_FILEVER_TAG}.zip","content_type":"application/zip"} +]'; + + #Attaching files... + NUM_FILES=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq ".|length"` + + for (( i=0; i<$NUM_FILES; i++ )) + do + ITEM_JSON=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq '.['$i']'` + CONTENT_TYPE=`echo "$ITEM_JSON"|jq --raw-output '.content_type'` + FILE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.file_name'` + FILE_PATH=releases/$FILE_NAME + + curl --silent --request POST --data-binary @$FILE_PATH --header "Content-Type: $CONTENT_TYPE" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://uploads.github.com/repos/$GITHUB_REPO/releases/$RELEASE_ID/assets?name=$FILE_NAME>/dev/null + done + + if [ -n "$DEPLOY_RELEASE_TO_REMOVE" ]; then + #Remove old nightly + echo "Removing old release $DEPLOY_RELEASE_TO_REMOVE..." + #-remove release + TAG_INFO=`curl --silent --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases/tags/$DEPLOY_RELEASE_TO_REMOVE` + RELEASE_ID=`echo $TAG_INFO|jq '.id'` + curl --silent --request DELETE --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases/$RELEASE_ID>/dev/null + #-delete tag + git config --local user.email "travis@travis-ci.org" + git config --local user.name "Travis CI" + git remote add myorigin https://${GITHUB_ACCESS_TOKEN}@github.com/$TRAVIS_REPO_SLUG.git > /dev/null 2>&1 + git tag -d $DEPLOY_RELEASE_TO_REMOVE + git push --quiet myorigin :refs/tags/$DEPLOY_RELEASE_TO_REMOVE > /dev/null 2>&1 + fi +fi + \ No newline at end of file diff --git a/travis/before_install.sh b/travis/before_install.sh index 5aa0a8e73..51768d6b9 100644 --- a/travis/before_install.sh +++ b/travis/before_install.sh @@ -11,6 +11,11 @@ sudo apt-get install -y zlib1g-dev sudo apt-get install -y lib32ncurses5 lib32z1 #For unpacking unzip :-) sudo apt-get install -y unzip +#For deploying +sudo apt-get install -y jq +sudo apt-get install -y curl +#For parsing changelog +sudo apt-get install -y php5-cli # create directory where tools will be downloaded and installed mkdir $tools_dir diff --git a/travis/extract_changelog.php b/travis/extract_changelog.php new file mode 100644 index 000000000..4aaef8626 --- /dev/null +++ b/travis/extract_changelog.php @@ -0,0 +1,58 @@ + Issue #1234 +$x=preg_replace('/\[(#[0-9]+)\]/','Issue $1',$x); + +//remove markdown headers +$x=preg_replace("/### ([^\n]+)\n/","$1:\n",$x); +$x=str_replace("\n- ","\n",$x); + +echo $x; + + diff --git a/travis/script.sh b/travis/script.sh index 5dfa7b342..e06cf1f39 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -1,11 +1,106 @@ #!/bin/bash +#stop on error +set -e + +VERSION_PROP_FILE="version.properties" + # If we've got website password, we can upload nightly builds. # Travis secure variable $website_password is not available from outside # of jpexs repository (e.g pull requests from other users on GitHub) -if [ -z ${website_password+x} ]; then - # password not set, just make private release without publishing result +if [ -z ${GITHUB_ACCESS_TOKEN+x} ]; then + # password not set, just make private release without publishing result ant all else - # create nightly build - ant new-version-nightlybuild + # if tag set + if [ -n "$TRAVIS_TAG" ]; then + #tag starts with "version" prefix + if [[ $TRAVIS_TAG =~ ^version.* ]] ; then + + #generate prop file + VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` + + VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` + VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` + VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` + + echo "">$VERSION_PROP_FILE + echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE + echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE + echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE + echo "build=0">>$VERSION_PROP_FILE + echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE + echo "debug=false">>$VERSION_PROP_FILE + + #compile, build, create files + ant new-version + + # release standard version based on tag + export DEPLOY_TAG_NAME=$TRAVIS_TAG + export DEPLOY_VERSION_NAME="version $VERSION_NUMBER" + export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php $VERSION_NUMBER` + export DEPLOY_COMMITISH="master" + export DEPLOY_PRERELEASE=false + export DEPLOY_FILEVER_TAG="$VERSION_NUMBER" + export DO_DEPLOY=1 + else + # regular build + ant all + fi + else + #if we are on dev branch + if [ $TRAVIS_BRANCH = "dev" ]; then + # create nightly build... + + TAGGER_NAME="Travis CI" + TAGGER_EMAIL=travis@travis-ci.org + + TAG_COMMIT_HASH=$TRAVIS_COMMIT + GITHUB_REPO=$TRAVIS_REPO_SLUG + echo "Getting new version tag and name..." + RELEASES_JSON=`curl --silent --request GET --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` + LAST_NIGHTLY_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'nightly'|sed 's/nightly//'|head -n 1` + LAST_STABLE_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'version'|sed 's/version//'|head -n 1` + NEXT_NIGHTLY_VER=$(($LAST_NIGHTLY_VER+1)) + LAST_NIGHTLY_TAG=nightly$LAST_NIGHTLY_VER + NEXT_NIGHTLY_TAG=nightly$NEXT_NIGHTLY_VER + + + #generate prop file + VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` + VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` + VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` + VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` + + echo "">$VERSION_PROP_FILE + echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE + echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE + echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE + echo "build=$NEXT_NIGHTLY_VER">>$VERSION_PROP_FILE + echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE + echo "debug=true">>$VERSION_PROP_FILE + + #compile, build, create files + ant new-version + + CURRENT_DATE=`date +%Y-%m-%dT%H:%M:%SZ` + + ESC_TAGGER_NAME=`echo $TAGGER_NAME|jq --raw-input --ascii-output '.'` + TAG_NAME=$NEXT_NIGHTLY_TAG + VERSION_PRERELEASE=true + + #Create tag + echo "Creating tag $TAG_NAME..." + echo '{"tag":"'$TAG_NAME'","message":"","object":"'$TAG_COMMIT_HASH'","type":"commit","tagger":{"name":'$ESC_TAGGER_NAME',"email":"'$TAGGER_EMAIL'","date":"'$CURRENT_DATE'"}}'>json.bin + curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/git/tags>/dev/null + + export DEPLOY_RELEASE_TO_REMOVE=$LAST_NIGHTLY_TAG + export DEPLOY_TAG_NAME=$NEXT_NIGHTLY_TAG + export DEPLOY_VERSION_NAME="version $LAST_STABLE_VER nightly $NEXT_NIGHTLY_VER" + export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php Unreleased` + export DEPLOY_COMMITISH="dev" + export DEPLOY_PRERELEASE=true + export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly" + export DO_DEPLOY=1 + fi + fi fi \ No newline at end of file From 16422d3e945a693297b55badee35e3c48742d35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:15:47 +0100 Subject: [PATCH 061/114] no online version check --- build.xml | 32 +------------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/build.xml b/build.xml index acdfa918b..d89d7884f 100644 --- a/build.xml +++ b/build.xml @@ -478,37 +478,7 @@ - - - - Checking version online: ${newversion.type}... - - - - - - - - - - - - - - - - - - - - - - - - - - - + From 5c4dca107415212a46fe6888b467e9dd198ba2f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:24:26 +0100 Subject: [PATCH 062/114] updated .travis.yml --- .travis.yml | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1d964aeb7..19e091efc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,19 @@ -language: java -jdk: [oraclejdk8] -before_install: - - sudo chmod a+x ./travis/*.sh - - ./travis/before_install.sh -install: ./travis/install.sh -script: ./travis/script.sh -notifications: - email: - recipients: - - developers@free-decompiler.com - on_success: change - on_failure: always \ No newline at end of file +language: java +jdk: [oraclejdk8] +before_install: + - sudo chmod a+x ./travis/*.sh + - ./travis/before_install.sh +install: ./travis/install.sh +script: "source ./travis/script.sh" +notifications: + email: + recipients: + - developers@free-decompiler.com + on_success: change + on_failure: always +after_success: "source ./travis/after_success.sh" +branches: + #it is not tagged as nightly + #commits marked as nightly were already built + only: + - /^(?!nightly).*/ \ No newline at end of file From 21ec5093ab97b8c3e7ee3f441de0818c28243b3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:24:41 +0100 Subject: [PATCH 063/114] compile when no tag or not dev branch --- travis/script.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/travis/script.sh b/travis/script.sh index e06cf1f39..17d35480f 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -102,5 +102,8 @@ else export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly" export DO_DEPLOY=1 fi - fi + else + #tag not set - regular build + ant all + fi fi \ No newline at end of file From 000ea83610d86143037d513b9e7ecb35cb19869f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:41:06 +0100 Subject: [PATCH 064/114] fix? --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 19e091efc..e5f479263 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,8 @@ language: java jdk: [oraclejdk8] before_install: - sudo chmod a+x ./travis/*.sh - - ./travis/before_install.sh -install: ./travis/install.sh + - "./travis/before_install.sh" +install: "./travis/install.sh" script: "source ./travis/script.sh" notifications: email: From 2fb4272bce58dcf2818583b13439a7b68b6c4b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:49:04 +0100 Subject: [PATCH 065/114] newline at the end --- travis/after_success.sh | 1 - travis/install.sh | 2 +- travis/script.sh | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/travis/after_success.sh b/travis/after_success.sh index 869b7e772..9839116fd 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -55,4 +55,3 @@ if [ "$DO_DEPLOY" = 1 ]; then git push --quiet myorigin :refs/tags/$DEPLOY_RELEASE_TO_REMOVE > /dev/null 2>&1 fi fi - \ No newline at end of file diff --git a/travis/install.sh b/travis/install.sh index e460a0e26..c566992ef 100644 --- a/travis/install.sh +++ b/travis/install.sh @@ -1,2 +1,2 @@ #!/bin/bash -ant deps \ No newline at end of file +ant deps diff --git a/travis/script.sh b/travis/script.sh index 17d35480f..e5b8fb598 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -106,4 +106,4 @@ else #tag not set - regular build ant all fi -fi \ No newline at end of file +fi From ec2a20fc198d1cf9be0c1d4b360f46c21d503279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 19:56:21 +0100 Subject: [PATCH 066/114] not install, fix? --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e5f479263..deb93b129 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ jdk: [oraclejdk8] before_install: - sudo chmod a+x ./travis/*.sh - "./travis/before_install.sh" -install: "./travis/install.sh" -script: "source ./travis/script.sh" +#install: "./travis/install.sh" +script: "./travis/script.sh" notifications: email: recipients: From 4f8f386740cbb5199048488713cca4280871dfaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 20:01:09 +0100 Subject: [PATCH 067/114] fix script syntax - else --- travis/script.sh | 188 +++++++++++++++++++++++------------------------ 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/travis/script.sh b/travis/script.sh index e5b8fb598..8896e39af 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -8,102 +8,102 @@ VERSION_PROP_FILE="version.properties" # Travis secure variable $website_password is not available from outside # of jpexs repository (e.g pull requests from other users on GitHub) if [ -z ${GITHUB_ACCESS_TOKEN+x} ]; then - # password not set, just make private release without publishing result - ant all + # password not set, just make private release without publishing result + ant all else - # if tag set - if [ -n "$TRAVIS_TAG" ]; then - #tag starts with "version" prefix - if [[ $TRAVIS_TAG =~ ^version.* ]] ; then + # if tag set + if [ -n "$TRAVIS_TAG" ]; then + #tag starts with "version" prefix + if [[ $TRAVIS_TAG =~ ^version.* ]] ; then + + #generate prop file + VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` - #generate prop file - VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` - - VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` - VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` - VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` - - echo "">$VERSION_PROP_FILE - echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE - echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE - echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE - echo "build=0">>$VERSION_PROP_FILE - echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE - echo "debug=false">>$VERSION_PROP_FILE - - #compile, build, create files - ant new-version + VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` + VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` + VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` + + echo "">$VERSION_PROP_FILE + echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE + echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE + echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE + echo "build=0">>$VERSION_PROP_FILE + echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE + echo "debug=false">>$VERSION_PROP_FILE + + #compile, build, create files + ant new-version + + # release standard version based on tag + export DEPLOY_TAG_NAME=$TRAVIS_TAG + export DEPLOY_VERSION_NAME="version $VERSION_NUMBER" + export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php $VERSION_NUMBER` + export DEPLOY_COMMITISH="master" + export DEPLOY_PRERELEASE=false + export DEPLOY_FILEVER_TAG="$VERSION_NUMBER" + export DO_DEPLOY=1 + else + # regular build + ant all + fi + else + #if we are on dev branch + if [ $TRAVIS_BRANCH = "dev" ]; then + # create nightly build... + + TAGGER_NAME="Travis CI" + TAGGER_EMAIL=travis@travis-ci.org - # release standard version based on tag - export DEPLOY_TAG_NAME=$TRAVIS_TAG - export DEPLOY_VERSION_NAME="version $VERSION_NUMBER" - export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php $VERSION_NUMBER` - export DEPLOY_COMMITISH="master" - export DEPLOY_PRERELEASE=false - export DEPLOY_FILEVER_TAG="$VERSION_NUMBER" - export DO_DEPLOY=1 - else - # regular build - ant all - fi + TAG_COMMIT_HASH=$TRAVIS_COMMIT + GITHUB_REPO=$TRAVIS_REPO_SLUG + echo "Getting new version tag and name..." + RELEASES_JSON=`curl --silent --request GET --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` + LAST_NIGHTLY_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'nightly'|sed 's/nightly//'|head -n 1` + LAST_STABLE_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'version'|sed 's/version//'|head -n 1` + NEXT_NIGHTLY_VER=$(($LAST_NIGHTLY_VER+1)) + LAST_NIGHTLY_TAG=nightly$LAST_NIGHTLY_VER + NEXT_NIGHTLY_TAG=nightly$NEXT_NIGHTLY_VER + + + #generate prop file + VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` + VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` + VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` + VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` + + echo "">$VERSION_PROP_FILE + echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE + echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE + echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE + echo "build=$NEXT_NIGHTLY_VER">>$VERSION_PROP_FILE + echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE + echo "debug=true">>$VERSION_PROP_FILE + + #compile, build, create files + ant new-version + + CURRENT_DATE=`date +%Y-%m-%dT%H:%M:%SZ` + + ESC_TAGGER_NAME=`echo $TAGGER_NAME|jq --raw-input --ascii-output '.'` + TAG_NAME=$NEXT_NIGHTLY_TAG + VERSION_PRERELEASE=true + + #Create tag + echo "Creating tag $TAG_NAME..." + echo '{"tag":"'$TAG_NAME'","message":"","object":"'$TAG_COMMIT_HASH'","type":"commit","tagger":{"name":'$ESC_TAGGER_NAME',"email":"'$TAGGER_EMAIL'","date":"'$CURRENT_DATE'"}}'>json.bin + curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/git/tags>/dev/null + + export DEPLOY_RELEASE_TO_REMOVE=$LAST_NIGHTLY_TAG + export DEPLOY_TAG_NAME=$NEXT_NIGHTLY_TAG + export DEPLOY_VERSION_NAME="version $LAST_STABLE_VER nightly $NEXT_NIGHTLY_VER" + export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php Unreleased` + export DEPLOY_COMMITISH="dev" + export DEPLOY_PRERELEASE=true + export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly" + export DO_DEPLOY=1 else - #if we are on dev branch - if [ $TRAVIS_BRANCH = "dev" ]; then - # create nightly build... - - TAGGER_NAME="Travis CI" - TAGGER_EMAIL=travis@travis-ci.org - - TAG_COMMIT_HASH=$TRAVIS_COMMIT - GITHUB_REPO=$TRAVIS_REPO_SLUG - echo "Getting new version tag and name..." - RELEASES_JSON=`curl --silent --request GET --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` - LAST_NIGHTLY_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'nightly'|sed 's/nightly//'|head -n 1` - LAST_STABLE_VER=`echo $RELEASES_JSON|jq --raw-output '.[].tag_name'|grep 'version'|sed 's/version//'|head -n 1` - NEXT_NIGHTLY_VER=$(($LAST_NIGHTLY_VER+1)) - LAST_NIGHTLY_TAG=nightly$LAST_NIGHTLY_VER - NEXT_NIGHTLY_TAG=nightly$NEXT_NIGHTLY_VER - - - #generate prop file - VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` - VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` - VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` - VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` - - echo "">$VERSION_PROP_FILE - echo "major=$VERSION_MAJOR">>$VERSION_PROP_FILE - echo "minor=$VERSION_MINOR">>$VERSION_PROP_FILE - echo "release=$VERSION_RELEASE">>$VERSION_PROP_FILE - echo "build=$NEXT_NIGHTLY_VER">>$VERSION_PROP_FILE - echo "revision=$TRAVIS_COMMIT">>$VERSION_PROP_FILE - echo "debug=true">>$VERSION_PROP_FILE - - #compile, build, create files - ant new-version - - CURRENT_DATE=`date +%Y-%m-%dT%H:%M:%SZ` - - ESC_TAGGER_NAME=`echo $TAGGER_NAME|jq --raw-input --ascii-output '.'` - TAG_NAME=$NEXT_NIGHTLY_TAG - VERSION_PRERELEASE=true - - #Create tag - echo "Creating tag $TAG_NAME..." - echo '{"tag":"'$TAG_NAME'","message":"","object":"'$TAG_COMMIT_HASH'","type":"commit","tagger":{"name":'$ESC_TAGGER_NAME',"email":"'$TAGGER_EMAIL'","date":"'$CURRENT_DATE'"}}'>json.bin - curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/git/tags>/dev/null - - export DEPLOY_RELEASE_TO_REMOVE=$LAST_NIGHTLY_TAG - export DEPLOY_TAG_NAME=$NEXT_NIGHTLY_TAG - export DEPLOY_VERSION_NAME="version $LAST_STABLE_VER nightly $NEXT_NIGHTLY_VER" - export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php Unreleased` - export DEPLOY_COMMITISH="dev" - export DEPLOY_PRERELEASE=true - export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly" - export DO_DEPLOY=1 - fi - else - #tag not set - regular build - ant all - fi + #tag not set - regular build + ant all + fi + fi fi From 2333e0e14a1f599da6881656135fc4e5e5715e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 20:01:24 +0100 Subject: [PATCH 068/114] travis.yml update --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index deb93b129..e5f479263 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,8 @@ jdk: [oraclejdk8] before_install: - sudo chmod a+x ./travis/*.sh - "./travis/before_install.sh" -#install: "./travis/install.sh" -script: "./travis/script.sh" +install: "./travis/install.sh" +script: "source ./travis/script.sh" notifications: email: recipients: From df644a89c4d1ee35461db3683eb2c15f16797dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 20:59:03 +0100 Subject: [PATCH 069/114] no deploy on pull request --- travis/script.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/travis/script.sh b/travis/script.sh index 8896e39af..15ca82801 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -47,8 +47,8 @@ else ant all fi else - #if we are on dev branch - if [ $TRAVIS_BRANCH = "dev" ]; then + #if we are on dev branch and it's not a pull request + if [ $TRAVIS_BRANCH = "dev" && $TRAVIS_PULL_REQUEST = "false" ]; then # create nightly build... TAGGER_NAME="Travis CI" @@ -66,7 +66,7 @@ else #generate prop file - VERSION_NUMBER=`echo $TRAVIS_TAG|sed 's/version//'` + VERSION_NUMBER=$LAST_STABLE_VER VERSION_MAJOR=`echo $VERSION_NUMBER|cut -d '.' -f 1` VERSION_MINOR=`echo $VERSION_NUMBER|cut -d '.' -f 2` VERSION_RELEASE=`echo $VERSION_NUMBER|cut -d '.' -f 3` From a1839baccb731340ead9182d7dd964243a76a058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 21:31:27 +0100 Subject: [PATCH 070/114] Fixed condition in travis script --- travis/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/script.sh b/travis/script.sh index 15ca82801..9061f4c90 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -48,7 +48,7 @@ else fi else #if we are on dev branch and it's not a pull request - if [ $TRAVIS_BRANCH = "dev" && $TRAVIS_PULL_REQUEST = "false" ]; then + if [ $TRAVIS_BRANCH = "dev" ] && [ $TRAVIS_PULL_REQUEST = "false" ]; then # create nightly build... TAGGER_NAME="Travis CI" From d989a960e233005c3e57074c5de19b3c1570dcf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 21:40:58 +0100 Subject: [PATCH 071/114] fixed attaching files on deploy - DEPLOY_FILEVER_TAG --- travis/script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/script.sh b/travis/script.sh index 9061f4c90..6f79584aa 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -99,7 +99,7 @@ else export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php Unreleased` export DEPLOY_COMMITISH="dev" export DEPLOY_PRERELEASE=true - export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly" + export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly${NEXT_NIGHTLY_VER}" export DO_DEPLOY=1 else #tag not set - regular build From 0708d4e5041e048833fd1325336585d6e2694950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sat, 13 Jan 2018 21:53:31 +0100 Subject: [PATCH 072/114] fixed attaching files --- travis/after_success.sh | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/travis/after_success.sh b/travis/after_success.sh index 9839116fd..1a5e958a0 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -18,16 +18,17 @@ if [ "$DO_DEPLOY" = 1 ]; then #List of files to upload DEPLOY_ATTACH_FILES_JSON='[ -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_setup.exe","content_type":"application/exe"}, -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.zip","content_type":"application/zip"}, -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.deb","content_type":"application/vnd.debian.binary-package"}, -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}.pkg","content_type":"application/x-newton-compatible-pkg"}, -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_macosx.zip","content_type":"application/zip"}, -{"file_name":"ffdec_${DEPLOY_FILEVER_TAG}_lang.zip","content_type":"application/zip"}, -{"file_name":"ffdec_lib_${DEPLOY_FILEVER_TAG}.zip","content_type":"application/zip"} +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_setup.exe","content_type":"application/exe"}, +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"}, +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.deb","content_type":"application/vnd.debian.binary-package"}, +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.pkg","content_type":"application/x-newton-compatible-pkg"}, +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_macosx.zip","content_type":"application/zip"}, +{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_lang.zip","content_type":"application/zip"}, +{"file_name":"ffdec_lib_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"} ]'; #Attaching files... + echo "Attaching files..." NUM_FILES=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq ".|length"` for (( i=0; i<$NUM_FILES; i++ )) @@ -36,6 +37,10 @@ if [ "$DO_DEPLOY" = 1 ]; then CONTENT_TYPE=`echo "$ITEM_JSON"|jq --raw-output '.content_type'` FILE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.file_name'` FILE_PATH=releases/$FILE_NAME + echo "Attaching $FILE_PATH ..." + if [ ! -f $FILE_PATH ]; then + echo "WARNING: File $FILE_PATH does not exist!" + fi curl --silent --request POST --data-binary @$FILE_PATH --header "Content-Type: $CONTENT_TYPE" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://uploads.github.com/repos/$GITHUB_REPO/releases/$RELEASE_ID/assets?name=$FILE_NAME>/dev/null done @@ -54,4 +59,5 @@ if [ "$DO_DEPLOY" = 1 ]; then git tag -d $DEPLOY_RELEASE_TO_REMOVE git push --quiet myorigin :refs/tags/$DEPLOY_RELEASE_TO_REMOVE > /dev/null 2>&1 fi + echo "FINISHED" fi From 2ce278f575ebde00934e0335dd4c83e2bce9b9cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 14:12:39 +0100 Subject: [PATCH 073/114] reformat --- .../deobfuscation/AVM2DeobfuscatorSimple.java | 40 ++++++++++--------- .../AVM2DeobfuscatorSimpleOld.java | 40 ++++++++++--------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index 145c51fa3..f95c8ff7c 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -154,34 +154,36 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { boolean result = false; // Deliberately skip over instruction zero - for(int i = 1; i < code.code.size(); i++) { + for (int i = 1; i < code.code.size(); i++) { Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); - if(ins2.definition instanceof PopIns && - !offsets.contains(ins2.getAddress()) && - (ins1.definition instanceof PushByteIns || - ins1.definition instanceof PushDoubleIns || - ins1.definition instanceof PushFalseIns || - ins1.definition instanceof PushIntIns || - ins1.definition instanceof PushIntegerTypeIns || - ins1.definition instanceof PushNanIns || - ins1.definition instanceof PushNullIns || - ins1.definition instanceof PushShortIns || - ins1.definition instanceof PushStringIns || - ins1.definition instanceof PushTrueIns || - ins1.definition instanceof PushUIntIns || - ins1.definition instanceof PushUndefinedIns) - ) { + if (ins2.definition instanceof PopIns + && !offsets.contains(ins2.getAddress()) + && (ins1.definition instanceof PushByteIns + || ins1.definition instanceof PushDoubleIns + || ins1.definition instanceof PushFalseIns + || ins1.definition instanceof PushIntIns + || ins1.definition instanceof PushIntegerTypeIns + || ins1.definition instanceof PushNanIns + || ins1.definition instanceof PushNullIns + || ins1.definition instanceof PushShortIns + || ins1.definition instanceof PushStringIns + || ins1.definition instanceof PushTrueIns + || ins1.definition instanceof PushUIntIns + || ins1.definition instanceof PushUndefinedIns)) { if (Thread.currentThread().isInterrupted()) { throw new InterruptedException(); } - code.removeInstruction(i - 1, body); i--; - code.removeInstruction(i, body); i--; + code.removeInstruction(i - 1, body); + i--; + code.removeInstruction(i, body); + i--; result = true; } - } return result; + } + return result; } protected void initLocalRegs(LocalDataArea localData, int localReservedCount, int maxRegs, boolean executeFromFirst) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 1e8e925d2..831074456 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -210,34 +210,36 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { boolean result = false; // Deliberately skip over instruction zero - for(int i = 1; i < code.code.size(); i++) { + for (int i = 1; i < code.code.size(); i++) { Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); - if(ins2.definition instanceof PopIns && - !offsets.contains(ins2.getAddress()) && - (ins1.definition instanceof PushByteIns || - ins1.definition instanceof PushDoubleIns || - ins1.definition instanceof PushFalseIns || - ins1.definition instanceof PushIntIns || - ins1.definition instanceof PushIntegerTypeIns || - ins1.definition instanceof PushNanIns || - ins1.definition instanceof PushNullIns || - ins1.definition instanceof PushShortIns || - ins1.definition instanceof PushStringIns || - ins1.definition instanceof PushTrueIns || - ins1.definition instanceof PushUIntIns || - ins1.definition instanceof PushUndefinedIns) - ) { + if (ins2.definition instanceof PopIns + && !offsets.contains(ins2.getAddress()) + && (ins1.definition instanceof PushByteIns + || ins1.definition instanceof PushDoubleIns + || ins1.definition instanceof PushFalseIns + || ins1.definition instanceof PushIntIns + || ins1.definition instanceof PushIntegerTypeIns + || ins1.definition instanceof PushNanIns + || ins1.definition instanceof PushNullIns + || ins1.definition instanceof PushShortIns + || ins1.definition instanceof PushStringIns + || ins1.definition instanceof PushTrueIns + || ins1.definition instanceof PushUIntIns + || ins1.definition instanceof PushUndefinedIns)) { if (Thread.currentThread().isInterrupted()) { throw new InterruptedException(); } - code.removeInstruction(i - 1, body); i--; - code.removeInstruction(i, body); i--; + code.removeInstruction(i - 1, body); + i--; + code.removeInstruction(i, body); + i--; result = true; } - } return result; + } + return result; } protected AVM2LocalData newLocalData(int scriptIndex, ABC abc, AVM2ConstantPool cpool, MethodBody body, boolean isStatic, int classIndex) { From ab836b0d197e36ee0a1693c5411218a4c0ce993f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 14:14:32 +0100 Subject: [PATCH 074/114] Removed check for PushIntegerTypeIns as it is just interface to group pushshort,pushbyte,pushint,etc... --- .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java | 1 - .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java | 1 - 2 files changed, 2 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index f95c8ff7c..e5c96ad04 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -164,7 +164,6 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns || ins1.definition instanceof PushIntIns - || ins1.definition instanceof PushIntegerTypeIns || ins1.definition instanceof PushNanIns || ins1.definition instanceof PushNullIns || ins1.definition instanceof PushShortIns diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 831074456..c647a0233 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -220,7 +220,6 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { || ins1.definition instanceof PushDoubleIns || ins1.definition instanceof PushFalseIns || ins1.definition instanceof PushIntIns - || ins1.definition instanceof PushIntegerTypeIns || ins1.definition instanceof PushNanIns || ins1.definition instanceof PushNullIns || ins1.definition instanceof PushShortIns From 91a18f1dea2e728ee4db8a5873baf32f0864b860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 14:14:58 +0100 Subject: [PATCH 075/114] diamond operator --- .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index c647a0233..23c135d87 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -160,7 +160,7 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { } // find jump targets - List jumpTargets = new ArrayList(); + List jumpTargets = new ArrayList<>(); for (int i = 0; i < code.code.size(); i++) { AVM2Instruction ins = code.code.get(i); if (ins.definition instanceof JumpIns) { From eded3498239ac4510d0dfc8e317c6ba056a74b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 14:18:23 +0100 Subject: [PATCH 076/114] removeNullPushes .. optimize call getImportantOffsets - only when instruction removed --- .../flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java | 4 +++- .../abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java index e5c96ad04..65b06ab3a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimple.java @@ -153,9 +153,10 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { boolean result = false; + Set offsets = code.getImportantOffsets(body, true); + // Deliberately skip over instruction zero for (int i = 1; i < code.code.size(); i++) { - Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if (ins2.definition instanceof PopIns @@ -179,6 +180,7 @@ public class AVM2DeobfuscatorSimple extends SWFDecompilerAdapter { i--; code.removeInstruction(i, body); i--; + offsets = code.getImportantOffsets(body, true); //update offsets, they changed because of removing instruction result = true; } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java index 23c135d87..3166d1ed2 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/deobfuscation/AVM2DeobfuscatorSimpleOld.java @@ -209,9 +209,10 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { protected boolean removeNullPushes(AVM2Code code, MethodBody body) throws InterruptedException { boolean result = false; + Set offsets = code.getImportantOffsets(body, true); + // Deliberately skip over instruction zero for (int i = 1; i < code.code.size(); i++) { - Set offsets = code.getImportantOffsets(body, true); AVM2Instruction ins1 = code.code.get(i - 1); AVM2Instruction ins2 = code.code.get(i); if (ins2.definition instanceof PopIns @@ -235,6 +236,7 @@ public class AVM2DeobfuscatorSimpleOld extends SWFDecompilerAdapter { i--; code.removeInstruction(i, body); i--; + offsets = code.getImportantOffsets(body, true); //update offsets, they changed because of removing instruction result = true; } } From f44f68d247ee266683fbcbaf6cdbf1d3132f77e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 14:24:56 +0100 Subject: [PATCH 077/114] update changelog --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ce1c08bb..435e53a5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ All notable changes to this project will be documented in this file. - [#1365] Allow to configure all types of configuration settings from command line - [#1369] Allow zoom in sprite (and button) export - Debug tooltips on hover +- AS3 deobfuscation - removing push instructions immediately followed by pop ### Fixed - [#1327] P-code editing: error message and syntax highlighting fixed when instruction name contains upper cased letter @@ -1618,7 +1619,8 @@ All notable changes to this project will be documented in this file. ### Added - Initial public release -[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...dev +[Unreleased]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version10.0.0...dev +[10.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version9.0.0...version10.0.0 [9.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.1...version9.0.0 [8.0.1]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version8.0.0...version8.0.1 [8.0.0]: https://github.com/jindrapetrik/jpexs-decompiler/compare/version7.1.2...version8.0.0 From e76f8eb95f99edad94b44cd0dac8725898f8d46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 19:06:00 +0100 Subject: [PATCH 078/114] Better release description --- travis/after_success.sh | 94 +++++++++++++++++++++++++++++++----- travis/extract_changelog.php | 5 +- 2 files changed, 85 insertions(+), 14 deletions(-) diff --git a/travis/after_success.sh b/travis/after_success.sh index 1a5e958a0..fe13bbcf5 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -5,27 +5,97 @@ set -e if [ "$DO_DEPLOY" = 1 ]; then echo "Deploying..." GITHUB_REPO=$TRAVIS_REPO_SLUG + + echo "Constructing release body message..." + + DEPLOY_ATTACH_FILES_JSON='[ + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_setup.exe","content_type":"application/exe","works_with":["windows"],"type_name":"Installer (Windows)","type_icon":"setup"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip","works_with":["windows","linux","macosx"],"type_name":"ZIP (Windows, Linux, Mac OS)","type_icon":"zip"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.deb","content_type":"application/vnd.debian.binary-package","works_with":["linux"],"type_name":"DEB package (Linux)","type_icon":"deb"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.pkg","content_type":"application/x-newton-compatible-pkg","works_with":["macosx"],"type_name":"Mac OS X Installer (pkg)","type_icon":"osx"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_macosx.zip","content_type":"application/zip","works_with":["macosx"],"type_name":"Mac OS X Application (zipped)","type_icon":"zip"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_lang.zip","content_type":"application/zip","works_with":["java"],"type_name":"Language pack for translators (zipped)","type_icon":"zip"}, + {"file_name":"ffdec_lib_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip","works_with":["java"],"type_name":"Library only (Java SE) - Zipped","type_icon":"jar"} + ]'; + + ALL_TYPE_ICONS=(setup zip deb osx jar) + + ICONS_URL=https://github.com/jindrapetrik/jpexs-decompiler/wiki/images + + + FOOTER_TYPE_ICONS="" + for i in ${ALL_TYPE_ICONS[@]}; do + FOOTER_TYPE_ICONS=$FOOTER_TYPE_ICONS'['${i}'_icon]: '$ICONS_URL'/downloads/16/'${i}'.png +' + done + + DOWNLOAD_PREFIX='https://github.com/'$GITHUB_REPO'/releases/download/'$DEPLOY_TAG_NAME'/' + + FOOTER='' + BODY='## Downloads: + +| Name | File | OS | +|---|---|---| +' + + NUM_FILES=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq ".|length"` + + WORKS_MAP='{ + "windows":"Works on Windows", + "linux":"Works on Linux", + "macosx":"Works with Mac OSX", + "java":"Works on java" + }' + + WORKS_KEYS=`echo "$WORKS_MAP"|jq --raw-output 'keys[]'` + + + FOOTER_WORK_ICONS='' + for WORKS in ${WORKS_KEYS[@]}; do + FOOTER_WORK_ICONS="$FOOTER_WORK_ICONS[${WORKS}_icon]: $ICONS_URL/images/os/24/${WORKS}.png +" + done + + + for (( i=0; i<$NUM_FILES; i++ )) + do + ITEM_JSON=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq '.['$i']'` + FILE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.file_name'` + TYPE_ICON=`echo "$ITEM_JSON"|jq --raw-output '.type_icon'` + TYPE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.type_name'` + BODY=$BODY'| **'$TYPE_NAME'** | !['$TYPE_NAME']['$TYPE_ICON'_icon] ['$FILE_NAME'] | ' + NUM_WORKS=`echo "$ITEM_JSON"|jq --raw-output '.works_with | length'` + for (( j=0; j<$NUM_WORKS; j++ )) + do + WORKS=`echo "$ITEM_JSON"|jq --raw-output '.works_with['$j']'` + WORKS_DESCRIPTION=`echo "$WORKS_MAP"|jq --raw-output '.'$WORKS` + BODY=$BODY"![$WORKS_DESCRIPTION][${WORKS}_icon]" + done + BODY=$BODY' +' + FOOTER=$FOOTER'['$FILE_NAME']: '${DOWNLOAD_PREFIX}${FILE_NAME}' +' + done + + FOOTER=$FOOTER$FOOTER_TYPE_ICONS$FOOTER_WORK_ICONS + + FULL_MSG="$BODY +## What's new: +$DEPLOY_DESCRIPTION +$FOOTER" + + + echo "Creating release..." ESC_VERSION_NAME=`echo $DEPLOY_VERSION_NAME|jq --raw-input --ascii-output '.'` - ESC_VERSION_DESCRIPTION=`printf "$DEPLOY_DESCRIPTION"|jq --raw-input --slurp --ascii-output '.'` + ESC_VERSION_DESCRIPTION=`printf "$FULL_MSG"|jq --raw-input --slurp --ascii-output '.'` echo '{"tag_name":"'$DEPLOY_TAG_NAME'","target_commitish":"'$DEPLOY_COMMITISH'","name":'$ESC_VERSION_NAME',"body":'$ESC_VERSION_DESCRIPTION',"draft":false,"prerelease":'$DEPLOY_PRERELEASE'}'>json.bin json=`curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` RELEASE_ID=`echo "$json"|jq '.id'` - - #List of files to upload - DEPLOY_ATTACH_FILES_JSON='[ -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_setup.exe","content_type":"application/exe"}, -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"}, -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.deb","content_type":"application/vnd.debian.binary-package"}, -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.pkg","content_type":"application/x-newton-compatible-pkg"}, -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_macosx.zip","content_type":"application/zip"}, -{"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_lang.zip","content_type":"application/zip"}, -{"file_name":"ffdec_lib_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"} -]'; #Attaching files... echo "Attaching files..." diff --git a/travis/extract_changelog.php b/travis/extract_changelog.php index 4aaef8626..6b678d249 100644 --- a/travis/extract_changelog.php +++ b/travis/extract_changelog.php @@ -48,10 +48,11 @@ $x=substr($x,strpos($x,"\n")+1); //from start of the line //remove [] from issue names [#1234] => Issue #1234 $x=preg_replace('/\[(#[0-9]+)\]/','Issue $1',$x); +//TODO: load link from footer? //remove markdown headers -$x=preg_replace("/### ([^\n]+)\n/","$1:\n",$x); -$x=str_replace("\n- ","\n",$x); +//$x=preg_replace("/### ([^\n]+)\n/","$1:\n",$x); +//$x=str_replace("\n- ","\n",$x); echo $x; From bdbdfe61824a0c3206b53af3d427cf06c65c7866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 19:13:30 +0100 Subject: [PATCH 079/114] fixed links in release description --- travis/after_success.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/travis/after_success.sh b/travis/after_success.sh index fe13bbcf5..9762ec853 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -52,7 +52,7 @@ if [ "$DO_DEPLOY" = 1 ]; then FOOTER_WORK_ICONS='' for WORKS in ${WORKS_KEYS[@]}; do - FOOTER_WORK_ICONS="$FOOTER_WORK_ICONS[${WORKS}_icon]: $ICONS_URL/images/os/24/${WORKS}.png + FOOTER_WORK_ICONS="$FOOTER_WORK_ICONS[${WORKS}_icon]: $ICONS_URL/os/24/${WORKS}.png " done @@ -82,6 +82,7 @@ if [ "$DO_DEPLOY" = 1 ]; then FULL_MSG="$BODY ## What's new: $DEPLOY_DESCRIPTION + $FOOTER" From 9444362b03d80206a6a89b0b1bd8c1c566e90ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 14 Jan 2018 22:45:06 +0100 Subject: [PATCH 080/114] better scripts for release info formatting --- travis/after_success.sh | 87 ++------------- travis/extract_changelog.php | 59 ---------- travis/format_release_info.php | 191 +++++++++++++++++++++++++++++++++ travis/script.sh | 8 +- 4 files changed, 203 insertions(+), 142 deletions(-) delete mode 100644 travis/extract_changelog.php create mode 100644 travis/format_release_info.php diff --git a/travis/after_success.sh b/travis/after_success.sh index 9762ec853..9d97ab564 100644 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -6,91 +6,20 @@ if [ "$DO_DEPLOY" = 1 ]; then echo "Deploying..." GITHUB_REPO=$TRAVIS_REPO_SLUG - echo "Constructing release body message..." DEPLOY_ATTACH_FILES_JSON='[ - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_setup.exe","content_type":"application/exe","works_with":["windows"],"type_name":"Installer (Windows)","type_icon":"setup"}, - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip","works_with":["windows","linux","macosx"],"type_name":"ZIP (Windows, Linux, Mac OS)","type_icon":"zip"}, - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.deb","content_type":"application/vnd.debian.binary-package","works_with":["linux"],"type_name":"DEB package (Linux)","type_icon":"deb"}, - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.pkg","content_type":"application/x-newton-compatible-pkg","works_with":["macosx"],"type_name":"Mac OS X Installer (pkg)","type_icon":"osx"}, - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_macosx.zip","content_type":"application/zip","works_with":["macosx"],"type_name":"Mac OS X Application (zipped)","type_icon":"zip"}, - {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_lang.zip","content_type":"application/zip","works_with":["java"],"type_name":"Language pack for translators (zipped)","type_icon":"zip"}, - {"file_name":"ffdec_lib_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip","works_with":["java"],"type_name":"Library only (Java SE) - Zipped","type_icon":"jar"} + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_setup.exe","content_type":"application/exe"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.deb","content_type":"application/vnd.debian.binary-package"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'.pkg","content_type":"application/x-newton-compatible-pkg"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_macosx.zip","content_type":"application/zip"}, + {"file_name":"ffdec_'$DEPLOY_FILEVER_TAG'_lang.zip","content_type":"application/zip"}, + {"file_name":"ffdec_lib_'$DEPLOY_FILEVER_TAG'.zip","content_type":"application/zip"} ]'; - - ALL_TYPE_ICONS=(setup zip deb osx jar) - - ICONS_URL=https://github.com/jindrapetrik/jpexs-decompiler/wiki/images - - - FOOTER_TYPE_ICONS="" - for i in ${ALL_TYPE_ICONS[@]}; do - FOOTER_TYPE_ICONS=$FOOTER_TYPE_ICONS'['${i}'_icon]: '$ICONS_URL'/downloads/16/'${i}'.png -' - done - - DOWNLOAD_PREFIX='https://github.com/'$GITHUB_REPO'/releases/download/'$DEPLOY_TAG_NAME'/' - - FOOTER='' - BODY='## Downloads: - -| Name | File | OS | -|---|---|---| -' - - NUM_FILES=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq ".|length"` - - WORKS_MAP='{ - "windows":"Works on Windows", - "linux":"Works on Linux", - "macosx":"Works with Mac OSX", - "java":"Works on java" - }' - - WORKS_KEYS=`echo "$WORKS_MAP"|jq --raw-output 'keys[]'` - - - FOOTER_WORK_ICONS='' - for WORKS in ${WORKS_KEYS[@]}; do - FOOTER_WORK_ICONS="$FOOTER_WORK_ICONS[${WORKS}_icon]: $ICONS_URL/os/24/${WORKS}.png -" - done - - for (( i=0; i<$NUM_FILES; i++ )) - do - ITEM_JSON=`echo "$DEPLOY_ATTACH_FILES_JSON"|jq '.['$i']'` - FILE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.file_name'` - TYPE_ICON=`echo "$ITEM_JSON"|jq --raw-output '.type_icon'` - TYPE_NAME=`echo "$ITEM_JSON"|jq --raw-output '.type_name'` - BODY=$BODY'| **'$TYPE_NAME'** | !['$TYPE_NAME']['$TYPE_ICON'_icon] ['$FILE_NAME'] | ' - NUM_WORKS=`echo "$ITEM_JSON"|jq --raw-output '.works_with | length'` - for (( j=0; j<$NUM_WORKS; j++ )) - do - WORKS=`echo "$ITEM_JSON"|jq --raw-output '.works_with['$j']'` - WORKS_DESCRIPTION=`echo "$WORKS_MAP"|jq --raw-output '.'$WORKS` - BODY=$BODY"![$WORKS_DESCRIPTION][${WORKS}_icon]" - done - BODY=$BODY' -' - FOOTER=$FOOTER'['$FILE_NAME']: '${DOWNLOAD_PREFIX}${FILE_NAME}' -' - done - - FOOTER=$FOOTER$FOOTER_TYPE_ICONS$FOOTER_WORK_ICONS - - FULL_MSG="$BODY -## What's new: -$DEPLOY_DESCRIPTION - -$FOOTER" - - - - echo "Creating release..." ESC_VERSION_NAME=`echo $DEPLOY_VERSION_NAME|jq --raw-input --ascii-output '.'` - ESC_VERSION_DESCRIPTION=`printf "$FULL_MSG"|jq --raw-input --slurp --ascii-output '.'` + ESC_VERSION_DESCRIPTION=`printf "$DEPLOY_DESCRIPTION"|jq --raw-input --slurp --ascii-output '.'` echo '{"tag_name":"'$DEPLOY_TAG_NAME'","target_commitish":"'$DEPLOY_COMMITISH'","name":'$ESC_VERSION_NAME',"body":'$ESC_VERSION_DESCRIPTION',"draft":false,"prerelease":'$DEPLOY_PRERELEASE'}'>json.bin json=`curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/releases` diff --git a/travis/extract_changelog.php b/travis/extract_changelog.php deleted file mode 100644 index 6b678d249..000000000 --- a/travis/extract_changelog.php +++ /dev/null @@ -1,59 +0,0 @@ - Issue #1234 -$x=preg_replace('/\[(#[0-9]+)\]/','Issue $1',$x); -//TODO: load link from footer? - -//remove markdown headers -//$x=preg_replace("/### ([^\n]+)\n/","$1:\n",$x); -//$x=str_replace("\n- ","\n",$x); - -echo $x; - - diff --git a/travis/format_release_info.php b/travis/format_release_info.php new file mode 100644 index 000000000..dacb90764 --- /dev/null +++ b/travis/format_release_info.php @@ -0,0 +1,191 @@ + "ffdec_${filever_tag}_setup.exe", + "ossupport" => ["windows"], + "type_name" => "Installer (Windows)", + "type_icon" => "setup" + ], + [ + "file_name" => "ffdec_${filever_tag}.zip", + "ossupport" => ["windows", "linux", "macosx"], + "type_name" => "ZIP (Windows, Linux, Mac OS)", + "type_icon" => "zip" + ], + [ + "file_name" => "ffdec_${filever_tag}.deb", + "ossupport" => ["linux"], + "type_name" => "DEB package (Linux)", + "type_icon" => "deb" + ], + [ + "file_name" => "ffdec_${filever_tag}.pkg", + "ossupport" => ["macosx"], + "type_name" => "Mac OS X Installer (pkg)", + "type_icon" => "osx" + ], + [ + "file_name" => "ffdec_${filever_tag}_macosx.zip", + "ossupport" => ["macosx"], + "type_name" => "Mac OS X Application (zipped)", + "type_icon" => "zip" + ], + [ + "file_name" => "ffdec_${filever_tag}_lang.zip", + "ossupport" => ["java"], + "type_name" => "Language pack for translators (zipped)", + "type_icon" => "zip" + ], + [ + "file_name" => "ffdec_lib_${filever_tag}.zip", + "ossupport" => ["java"], + "type_name" => "Library only (Java SE) - Zipped", + "type_icon" => "zip" + ], + ]; +} +else //-json +{ + $json_file = $argv[2]; + if(!file_exists($json_file)){ + fwrite(STDERR,"Datafile $json_file does not exist\n"); + exit(1); + } + $files = json_decode(file_get_contents($json_file)); + if($files === null) + { + fwrite(STDERR,"Cannot load data from $json_file\n"); + exit(1); + } +} +$changelog_section = $argv[3]; //10.0.0 or "alpha 1" or "Unreleased" or "1.5.0 update 1" +$version_tag = $argv[4]; //"version10.0.0" or "nightly165" or "alpha1" or "version1.8.8u2" +$changelog_path = $argv[5]; // ./CHANGELOG.md +$github_repo = $argv[6]; // "jindrapetrik/jpexs-decompiler" + + + +function get_string_between($x, $before, $after) { + $pos_before = strpos($x, $before); + if ($pos_before === false) { + return false; + } + $x = substr($x, $pos_before + strlen($before)); + $pos_after = strpos($x, $after); + if ($pos_after === false) { + return false; + } + $x = substr($x, 0, $pos_after); + return $x; +} + +function get_string_between_multiple_after($x, $before, array $afters) { + $ret = false; + foreach ($afters as $after) { + $ret = get_string_between($x, $before, $after); + if ($ret !== false) { + break; + } + } + return $ret; +} + +function get_changelog_section($changelog_file, $section_name) { + if (!file_exists($changelog_file)) { + return false; + } + $txt = file_get_contents($changelog_file); + $txt = str_replace("\r\n", "\n", $txt) . "--EOF--"; + + $afters = ["\n## [", "\n[", "--EOF--"]; + $x = get_string_between_multiple_after($txt, "\n## [$section_name]", $afters); + if ($x === false) { + return false; + } + $x = substr($x, strpos($x, "\n") + 1); //from start of the line + return $x; +} + + $ossupport_map=[ + "windows" => "Works on Windows", + "linux" => "Works on Linux", + "macosx" => "Works with Mac OSX", + "java" => "Works on java" + ]; + + + +$ICONS_URL = "https://github.com/jindrapetrik/jpexs-decompiler/wiki/images"; + +$body = ""; + +$body .= "## Downloads:\n". + "\n". + "| Name | File | OS |\n". + "|---|---|---|\n"; + +$footer_links = []; +foreach ($files as $f) { + $footer_links[$f["type_icon"]."_icon"] = $ICONS_URL."/downloads/16/".$f["type_icon"].".png"; + $footer_links[$f["file_name"]] = 'https://github.com/'.$github_repo.'/releases/download/'.$version_tag.'/'.$f["file_name"]; + $body .= "| **".$f["type_name"]."** | ![".$f["type_name"]."][".$f["type_icon"]."_icon] [".$f["file_name"]."] | "; + foreach ($f["ossupport"] as $ossupport) + { + $footer_links[$ossupport."_icon"] = $ICONS_URL."/os/24/".$ossupport.".png"; + $ossupport_title = $ossupport_map[$ossupport]; + $body .= "![".$ossupport_title."][".$ossupport."_icon]"; + } + $body .= " |\n"; +} + +$all_ossupport = []; +foreach ($files as $f) { + if (!in_array($f["ossupport"], $all_ossupport)) { + $all_ossupport[] = $f["ossupport"]; + } +} + +$changelog_data = get_changelog_section($changelog_path,$changelog_section); +if($changelog_data === false) +{ + fwrite(STDERR, "Cannot load changelog data\n"); + exit(1); +} + +$body .= "\n"; +$body .= "## What's new:\n"; +$body .= $changelog_data; +$body .= "\n"; +foreach($footer_links as $title=>$link) +{ + $body .= "[$title]: $link\n"; +} + +echo $body; diff --git a/travis/script.sh b/travis/script.sh index 6f79584aa..46e2c5e4e 100644 --- a/travis/script.sh +++ b/travis/script.sh @@ -37,7 +37,7 @@ else # release standard version based on tag export DEPLOY_TAG_NAME=$TRAVIS_TAG export DEPLOY_VERSION_NAME="version $VERSION_NUMBER" - export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php $VERSION_NUMBER` + export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php -filever $VERSION_NUMBER $VERSION_NUMBER $DEPLOY_TAG_NAME ./CHANGELOG.md "$TRAVIS_REPO_SLUG"` export DEPLOY_COMMITISH="master" export DEPLOY_PRERELEASE=false export DEPLOY_FILEVER_TAG="$VERSION_NUMBER" @@ -92,14 +92,14 @@ else echo "Creating tag $TAG_NAME..." echo '{"tag":"'$TAG_NAME'","message":"","object":"'$TAG_COMMIT_HASH'","type":"commit","tagger":{"name":'$ESC_TAGGER_NAME',"email":"'$TAGGER_EMAIL'","date":"'$CURRENT_DATE'"}}'>json.bin curl --silent --request POST --data-binary @json.bin --header "Content-Type: application/json" --header "Accept: application/vnd.github.manifold-preview" --user $GITHUB_USER:$GITHUB_ACCESS_TOKEN https://api.github.com/repos/$GITHUB_REPO/git/tags>/dev/null - + + export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly${NEXT_NIGHTLY_VER}" export DEPLOY_RELEASE_TO_REMOVE=$LAST_NIGHTLY_TAG export DEPLOY_TAG_NAME=$NEXT_NIGHTLY_TAG export DEPLOY_VERSION_NAME="version $LAST_STABLE_VER nightly $NEXT_NIGHTLY_VER" - export DEPLOY_DESCRIPTION=`php ./travis/extract_changelog.php Unreleased` + export DEPLOY_DESCRIPTION=`php ./travis/format_release_info.php -filever $DEPLOY_FILEVER_TAG Unreleased $DEPLOY_TAG_NAME ./CHANGELOG.md "$TRAVIS_REPO_SLUG"` export DEPLOY_COMMITISH="dev" export DEPLOY_PRERELEASE=true - export DEPLOY_FILEVER_TAG="${VERSION_NUMBER}_nightly${NEXT_NIGHTLY_VER}" export DO_DEPLOY=1 else #tag not set - regular build From 57725f83bd14c22bc1ed9d2a1b92fb8a5b83d6dd Mon Sep 17 00:00:00 2001 From: Gauthier Billot Date: Mon, 15 Jan 2018 14:10:35 +0100 Subject: [PATCH 081/114] Jump feature --- .../decompiler/flash/gui/TagInfoPanel.java | 190 ++++++++++-------- 1 file changed, 110 insertions(+), 80 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index 168f8eeaf..c9344709e 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -24,12 +24,26 @@ import java.util.List; import java.util.MissingResourceException; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.ArrayList; +import java.util.Collections; + import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.event.TableModelListener; import javax.swing.table.TableModel; +import javax.swing.JEditorPane; + +import java.awt.Component; +import java.awt.Font; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import javax.swing.table.TableCellRenderer; +import javax.swing.text.html.HTML; +import javax.swing.text.html.HTMLDocument; /** * @@ -39,114 +53,130 @@ public class TagInfoPanel extends JPanel { private final MainPanel mainPanel; - private final JTable infoTable = new JTable(); + private final JEditorPane editorPane = new JEditorPane(); private TagInfo tagInfo = new TagInfo(); public TagInfoPanel(MainPanel mainPanel) { this.mainPanel = mainPanel; - infoTable.setModel(new InfoTableModel("general")); setLayout(new BorderLayout()); - infoTable.setAutoCreateRowSorter(true); JLabel topLabel = new JLabel(AppStrings.translate("taginfo.header"), JLabel.CENTER); add(topLabel, BorderLayout.NORTH); - add(new JScrollPane(infoTable), BorderLayout.CENTER); + add(new JScrollPane(editorPane), BorderLayout.CENTER); + + editorPane.setContentType("text/html"); + editorPane.setEditable(false); + + HyperlinkListener listener = new HyperlinkListener() { + @Override + public void hyperlinkUpdate(HyperlinkEvent hyperLink) { + + if (HyperlinkEvent.EventType.ACTIVATED.equals(hyperLink.getEventType())) { + String url = hyperLink.getDescription(); + String strId = url.substring(7); + Integer id = Integer.parseInt(strId); + + mainPanel.setTagTreeSelectedNode(mainPanel.getCurrentSwf().getCharacter(id)); + } + } + + }; + + editorPane.addHyperlinkListener(listener); } public void setTagInfos(TagInfo tagInfo) { this.tagInfo = tagInfo; - infoTable.setBackground(Color.WHITE); - infoTable.setModel(new InfoTableModel("general")); + buildHtmlContent(); } - private class InfoTableModel implements TableModel { + private void buildHtmlContent() { + String categoryName = "general"; + String result = ""; + Boolean flipFlop = false; - private final String categoryName; + List items = tagInfo.getInfos().get(categoryName); - public InfoTableModel(String categoryName) { - this.categoryName = categoryName; - } + result += ""; + result += ""; + result += ""; + result += ""; - @Override - public int getRowCount() { - List category = tagInfo.getInfos().get(categoryName); - if (category != null) { - return category.size(); - } + for(TagInfo.TagInfoItem item : items) { + Boolean convertToCharacterList; - return 0; - } + flipFlop = !flipFlop; - @Override - public int getColumnCount() { - return 2; - } + result += ""; - @Override - public String getColumnName(int columnIndex) { - switch (columnIndex) { - case 0: - return mainPanel.translate("tagInfo.header.name"); - case 1: - return mainPanel.translate("tagInfo.header.value"); - } + String name = item.getName(); + String key = "tagInfo." + name; - return null; - } + convertToCharacterList = name == "dependentCharacters" || name == "neededCharacters"; - @Override - public Class getColumnClass(int columnIndex) { - return String.class; - } - - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - List category = tagInfo.getInfos().get(categoryName); - if (category != null) { - TagInfo.TagInfoItem item = category.get(rowIndex); - - switch (columnIndex) { - case 0: - String name = item.getName(); - String key = "tagInfo." + name; - try { - name = mainPanel.translate(key); - } catch (MissingResourceException mes) { - if (Configuration._debugMode.get()) { - Logger.getLogger(TagInfoPanel.class.getName()).log(Level.WARNING, "Resource not found: {0}", key); - } - } - - return name; - case 1: - Object value = item.getValue(); - if (value instanceof Boolean) { - boolean boolValue = (boolean) value; - return boolValue ? AppStrings.translate("yes") : AppStrings.translate("no"); - } - - return "" + value; + try { + name = mainPanel.translate(key); + } catch (MissingResourceException mes) { + if (Configuration._debugMode.get()) { + Logger.getLogger(TagInfoPanel.class.getName()).log(Level.WARNING, "Resource not found: {0}", key); } } - return null; + result += ""; + + Object value = item.getValue(); + if (value instanceof Boolean) { + boolean boolValue = (boolean) value; + value = boolValue ? AppStrings.translate("yes") : AppStrings.translate("no"); + } else if(convertToCharacterList) { + String strValue = (String) value; + String[] strIds = strValue.split(", "); + List sortedIds = new ArrayList(); + strValue = ""; + + for(String strId : strIds) { + sortedIds.add(Integer.parseInt(strId)); + } + + Collections.sort(sortedIds); + + for(int id : sortedIds) { + strValue += "" + id + ", "; + } + + value = strValue.substring(0, strValue.length() - 2); + } + + result += ""; + + result += ""; } - @Override - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - } + result += "
"; + result += mainPanel.translate("tagInfo.header.name"); + result += ""; + result += mainPanel.translate("tagInfo.header.value"); + result += "
" + name + "" + value + "
"; - @Override - public void addTableModelListener(TableModelListener l) { - } + editorPane.setText(result); - @Override - public void removeTableModelListener(TableModelListener l) { - } + Font font = UIManager.getFont("Label.font"); + String bodyRule = "body { font-family: " + font.getFamily() + ";" + + " font-size: " + font.getSize() + "pt;" + + "}" + + " table {" + + " width:100%;" + + " color:#053E6A;" + + " padding:1px;" + + "}" + + "td { border: 1px solid #e4e4e4; }" + + "html { border: 1px solid #789AC4; }" + ; + + ((HTMLDocument)editorPane.getDocument()).getStyleSheet().addRule(bodyRule); + + editorPane.setOpaque(false); + editorPane.setBorder(null); + editorPane.setEditable(false); } } From d9da800fa4bb0ea3141b92b1b3fef3003af063ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 19:39:34 +0100 Subject: [PATCH 082/114] php is text type --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index 3c0e9dfc0..82b366934 100644 --- a/.gitattributes +++ b/.gitattributes @@ -35,6 +35,9 @@ *.sh text eol=lf *.bat text eol=crlf +# PHP scripts +*.php text + # Delphi sources *.dpr text eol=crlf *.dfm text eol=crlf From 06920a73953a78054b0ec1a4f17d25a4208b8f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 19:40:17 +0100 Subject: [PATCH 083/114] updating changelog with missing version - 1.2.0 update 1 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 435e53a5e..b03e9539c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1502,6 +1502,11 @@ All notable changes to this project will be documented in this file. - AS3: Method info editor fixed - Edittext & Button displaying +## [1.2.0 update 1] - 2013-01-19 +## Fixed +- [#27] Problems on loading DefineSceneAndFrameLabel +- CSMTextSettings tag writing fix + ## [1.2.0] - 2013-01-19 ### Added - Displaying various SWF objects (shapes, sprites,...) with flash player library (Windows only, sorry). From 7747450562912dc056ec6d40986046c5a9e4931a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 19:41:14 +0100 Subject: [PATCH 084/114] fixing format_release_info script for loading external file --- travis/format_release_info.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/format_release_info.php b/travis/format_release_info.php index dacb90764..578853841 100644 --- a/travis/format_release_info.php +++ b/travis/format_release_info.php @@ -78,7 +78,7 @@ else //-json fwrite(STDERR,"Datafile $json_file does not exist\n"); exit(1); } - $files = json_decode(file_get_contents($json_file)); + $files = json_decode(file_get_contents($json_file),true); if($files === null) { fwrite(STDERR,"Cannot load data from $json_file\n"); From 4e9d81151483224a1efbe0bad3a9b795e742f95f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 20:20:41 +0100 Subject: [PATCH 085/114] formatting --- .../decompiler/flash/gui/TagInfoPanel.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index c9344709e..9dacb8cab 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -106,7 +106,7 @@ public class TagInfoPanel extends JPanel { result += ""; result += ""; - for(TagInfo.TagInfoItem item : items) { + for (TagInfo.TagInfoItem item : items) { Boolean convertToCharacterList; flipFlop = !flipFlop; @@ -132,19 +132,19 @@ public class TagInfoPanel extends JPanel { if (value instanceof Boolean) { boolean boolValue = (boolean) value; value = boolValue ? AppStrings.translate("yes") : AppStrings.translate("no"); - } else if(convertToCharacterList) { + } else if (convertToCharacterList) { String strValue = (String) value; String[] strIds = strValue.split(", "); List sortedIds = new ArrayList(); strValue = ""; - for(String strId : strIds) { + for (String strId : strIds) { sortedIds.add(Integer.parseInt(strId)); } Collections.sort(sortedIds); - for(int id : sortedIds) { + for (int id : sortedIds) { strValue += "" + id + ", "; } @@ -162,18 +162,17 @@ public class TagInfoPanel extends JPanel { Font font = UIManager.getFont("Label.font"); String bodyRule = "body { font-family: " + font.getFamily() + ";" - + " font-size: " + font.getSize() + "pt;" - + "}" - + " table {" - + " width:100%;" - + " color:#053E6A;" - + " padding:1px;" - + "}" - + "td { border: 1px solid #e4e4e4; }" - + "html { border: 1px solid #789AC4; }" - ; + + " font-size: " + font.getSize() + "pt;" + + "}" + + " table {" + + " width:100%;" + + " color:#053E6A;" + + " padding:1px;" + + "}" + + "td { border: 1px solid #e4e4e4; }" + + "html { border: 1px solid #789AC4; }"; - ((HTMLDocument)editorPane.getDocument()).getStyleSheet().addRule(bodyRule); + ((HTMLDocument) editorPane.getDocument()).getStyleSheet().addRule(bodyRule); editorPane.setOpaque(false); editorPane.setBorder(null); From 556eb8641b2c185e50dac6187eedfdcb252ab860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 20:21:09 +0100 Subject: [PATCH 086/114] unused imports --- src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index 9dacb8cab..c4e4e3fff 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -30,19 +30,12 @@ import java.util.Collections; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.event.TableModelListener; -import javax.swing.table.TableModel; import javax.swing.JEditorPane; -import java.awt.Component; import java.awt.Font; -import javax.swing.JOptionPane; import javax.swing.UIManager; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; -import javax.swing.table.TableCellRenderer; -import javax.swing.text.html.HTML; import javax.swing.text.html.HTMLDocument; /** From 46f2ec325ab5b6eb2c868a92abf228e1cda9e7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 20:21:24 +0100 Subject: [PATCH 087/114] diamond operator --- src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index c4e4e3fff..8148e8e4b 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -128,7 +128,7 @@ public class TagInfoPanel extends JPanel { } else if (convertToCharacterList) { String strValue = (String) value; String[] strIds = strValue.split(", "); - List sortedIds = new ArrayList(); + List sortedIds = new ArrayList<>(); strValue = ""; for (String strId : strIds) { From 272d8954504527b89e205fd7c67c1907149b7abb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 20:21:50 +0100 Subject: [PATCH 088/114] unused imports --- src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index 8148e8e4b..900526203 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -19,7 +19,6 @@ package com.jpexs.decompiler.flash.gui; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.tags.TagInfo; import java.awt.BorderLayout; -import java.awt.Color; import java.util.List; import java.util.MissingResourceException; import java.util.logging.Level; From b4e1e1c03a11bccc013743f6474954637e315822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 15 Jan 2018 20:22:28 +0100 Subject: [PATCH 089/114] equals for string comparison --- src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java index 900526203..9797225cf 100644 --- a/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/TagInfoPanel.java @@ -108,7 +108,7 @@ public class TagInfoPanel extends JPanel { String name = item.getName(); String key = "tagInfo." + name; - convertToCharacterList = name == "dependentCharacters" || name == "neededCharacters"; + convertToCharacterList = name.equals("dependentCharacters") || name.equals("neededCharacters"); try { name = mainPanel.translate(key); From 5b4a0103b37626c799348fe2de348d614e4359f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 8 Jan 2018 21:46:58 +0100 Subject: [PATCH 090/114] Checking new versions on Github --- src/com/jpexs/decompiler/flash/gui/Main.java | 207 +++++++----------- .../flash/gui/NewVersionDialog.java | 30 +-- 2 files changed, 92 insertions(+), 145 deletions(-) diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java index 34b7473ff..99ef9ead1 100644 --- a/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/src/com/jpexs/decompiler/flash/gui/Main.java @@ -16,6 +16,10 @@ */ package com.jpexs.decompiler.flash.gui; +import com.eclipsesource.json.Json; +import com.eclipsesource.json.JsonArray; +import com.eclipsesource.json.JsonObject; +import com.eclipsesource.json.JsonValue; import com.jpexs.debugger.flash.Debugger; import com.jpexs.debugger.flash.DebuggerCommands; import com.jpexs.debugger.flash.Variable; @@ -2168,29 +2172,10 @@ public class Main { } } - public static boolean checkForUpdates() { - String currentVersion = ApplicationInfo.version; - if (currentVersion.equals("unknown")) { - // sometimes during development the version information is not available - return false; - } - - List accepted = new ArrayList<>(); - if (Configuration.checkForUpdatesStable.get()) { - accepted.add("stable"); - } - if (Configuration.checkForUpdatesNightly.get()) { - accepted.add("nightly"); - } - - if (accepted.isEmpty()) { - return false; - } - - String acceptVersions = String.join(",", accepted); + private static JsonValue urlGetJson(String getUrl) { try { String proxyAddress = Configuration.updateProxyAddress.get(); - URL url = new URL(ApplicationInfo.updateCheckUrl); + URL url = new URL(getUrl); URLConnection uc; if (proxyAddress != null && !proxyAddress.isEmpty()) { @@ -2205,114 +2190,88 @@ public class Main { } else { uc = url.openConnection(); } - uc.setRequestProperty("X-Accept-Versions", acceptVersions); - uc.setRequestProperty("X-Update-Major", "" + UPDATE_SYSTEM_MAJOR); - uc.setRequestProperty("X-Update-Minor", "" + UPDATE_SYSTEM_MINOR); uc.setRequestProperty("User-Agent", ApplicationInfo.shortApplicationVerName); - String currentLoc = Configuration.locale.get("en"); - uc.setRequestProperty("Accept-Language", currentLoc + ("en".equals(currentLoc) ? "" : ", en;q=0.8")); - uc.connect(); - - BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); - String s; - final java.util.List versions = new ArrayList<>(); - String header = ""; - Pattern headerPat = Pattern.compile("\\[([a-zA-Z0-9]+)\\]"); - int updateMajor; - int updateMinor; - Version ver = null; - while ((s = br.readLine()) != null) { - - Matcher m = headerPat.matcher(s); - if (m.matches()) { - header = m.group(1); - if (header.equals("version")) { - ver = new Version(); - versions.add(ver); - } - if (header.equals("noversion")) { - break; - } - } else if (s.contains("=")) { - String key = s.substring(0, s.indexOf('=')); - String val = s.substring(s.indexOf('=') + 1); - if ("updateSystem".equals(header)) { - if (key.equals("majorVersion")) { - updateMajor = Integer.parseInt(val); - if (updateMajor > UPDATE_SYSTEM_MAJOR) { - break; - } - } - if (key.equals("minorVersion")) { - updateMinor = Integer.parseInt(val); - } - } - if ("version".equals(header) && (ver != null)) { - if (key.equals("versionId")) { - ver.versionId = Integer.parseInt(val); - } - if (key.equals("versionName")) { - ver.versionName = val; - } - if (key.equals("nightly")) { - ver.nightly = val.equals("true"); - } - if (key.equals("revision")) { - ver.revision = val; - } - if (key.equals("build")) { - ver.build = Integer.parseInt(val); - } - if (key.equals("major")) { - ver.major = Integer.parseInt(val); - } - if (key.equals("minor")) { - ver.minor = Integer.parseInt(val); - } - if (key.equals("release")) { - ver.release = Integer.parseInt(val); - } - if (key.equals("longVersionName")) { - ver.longVersionName = val; - } - if (key.equals("releaseDate")) { - ver.releaseDate = val; - } - if (key.equals("appName")) { - ver.appName = val; - } - if (key.equals("appFullName")) { - ver.appFullName = val; - } - if (key.equals("updateLink")) { - ver.updateLink = val; - } - if (key.equals("change[]")) { - String changeType = val.substring(0, val.indexOf('|')); - String change = val.substring(val.indexOf('|') + 1); - if (!ver.changes.containsKey(changeType)) { - ver.changes.put(changeType, new ArrayList<>()); - } - List chlist = ver.changes.get(changeType); - chlist.add(change); - } - } - } - } - - if (!versions.isEmpty()) { - View.execInEventDispatch(() -> { - NewVersionDialog newVersionDialog = new NewVersionDialog(versions); - newVersionDialog.setVisible(true); - Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); - }); - - return true; - } + JsonValue value = Json.parse(new InputStreamReader(uc.getInputStream())); + return value; } catch (IOException | NumberFormatException ex) { + return null; + } + } + + public static boolean checkForUpdates() { + String currentVersion = ApplicationInfo.version; + if (currentVersion.equals("unknown")) { + // sometimes during development the version information is not available return false; } + + boolean showStable = Configuration.checkForUpdatesStable.get(); + boolean showNightly = Configuration.checkForUpdatesNightly.get(); + + if (!showStable && !showNightly) { + return false; + } + + String currentTagName; + if (ApplicationInfo.nightly) { + currentTagName = "nightly" + ApplicationInfo.version_build; + } else { + currentTagName = "version" + ApplicationInfo.version_major + "." + ApplicationInfo.version_minor + "." + ApplicationInfo.version_release; + } + + if (!showNightly) { + //prereleases are not shown as latest, when checking latest nightly, this is useless + JsonValue latestVersionInfoJson = urlGetJson(ApplicationInfo.GITHUB_RELEASES_LATEST_URL); + if (latestVersionInfoJson == null) { + return false; + } + String latestTagName = latestVersionInfoJson.asObject().get("tag_name").asString(); + if (currentTagName.equals(latestTagName)) { + //no new version + return false; + } + } + + JsonValue allChangesInfoJson = urlGetJson(ApplicationInfo.GITHUB_RELEASES_URL); + if (allChangesInfoJson == null) { + return false; + } + JsonArray arr = allChangesInfoJson.asArray(); + final java.util.List versions = new ArrayList<>(); + for (int i = 0; i < arr.size(); i++) { + JsonObject versionObj = arr.get(i).asObject(); + String tagName = versionObj.get("tag_name").asString(); + if (currentVersion.equals(tagName)) { + //Stop at current version, do not display more + break; + } + Version v = new Version(); + v.versionName = versionObj.get("name").asString(); + v.description = versionObj.get("body").asString(); + v.releaseDate = versionObj.get("published_at").asString(); + boolean isNightly = versionObj.get("prerelease").asBoolean(); + if (isNightly && !showNightly) { + continue; + } + + if (!isNightly && !showStable) { + continue; + } + + versions.add(v); + } + + if (!versions.isEmpty()) { + View.execInEventDispatch(() -> { + NewVersionDialog newVersionDialog = new NewVersionDialog(versions); + newVersionDialog.setVisible(true); + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); + }); + + return true; + } + Configuration.lastUpdatesCheckDate.set(Calendar.getInstance()); return false; } diff --git a/src/com/jpexs/decompiler/flash/gui/NewVersionDialog.java b/src/com/jpexs/decompiler/flash/gui/NewVersionDialog.java index de37fba17..74abe9e3b 100644 --- a/src/com/jpexs/decompiler/flash/gui/NewVersionDialog.java +++ b/src/com/jpexs/decompiler/flash/gui/NewVersionDialog.java @@ -54,7 +54,7 @@ public class NewVersionDialog extends AppDialog { JEditorPane changesText = new JEditorPane(); changesText.setEditable(false); changesText.setFont(UIManager.getFont("TextField.font")); - SimpleDateFormat serverFormatter = new SimpleDateFormat("MM/dd/yyyy"); + SimpleDateFormat serverFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); DateFormat formatter; String customFormat = translate("customDateFormat"); if (customFormat.equals("default")) { @@ -72,7 +72,7 @@ public class NewVersionDialog extends AppDialog { changesStr.append("
"); } first = false; - changesStr.append("").append(translate("version")).append(" ").append(v.versionName).append("
"); + changesStr.append("").append(v.versionName).append("
"); String releaseDate = v.releaseDate; try { Date date = serverFormatter.parse(releaseDate); @@ -81,17 +81,10 @@ public class NewVersionDialog extends AppDialog { Logger.getLogger(NewVersionDialog.class.getName()).log(Level.SEVERE, null, ex); } changesStr.append(translate("releasedate")).append(" ").append(releaseDate); - if (!v.changes.isEmpty()) { - changesStr.append("
"); - changesStr.append("
");
-                for (String type : v.changes.keySet()) {
-                    changesStr.append(type).append(":" + "
"); - for (String ch : v.changes.get(type)) { - changesStr.append(" - ").append(ch).append("
"); - } - } - changesStr.append("
"); - } + changesStr.append("
"); + changesStr.append("
");
+            changesStr.append(v.description);
+            changesStr.append("
"); } changesStr.append(""); @@ -102,7 +95,7 @@ public class NewVersionDialog extends AppDialog { changesText.setContentType("text/html"); changesText.setText(changesStr.toString()); if (latestVersion != null) { - JLabel newAvailableLabel = new JLabel("
" + translate("newversionavailable") + " " + latestVersion.appName + " " + translate("version") + " " + latestVersion.versionName + "
", SwingConstants.CENTER); + JLabel newAvailableLabel = new JLabel("
" + translate("newversionavailable") + " " + latestVersion.versionName + "
", SwingConstants.CENTER); newAvailableLabel.setAlignmentX(JLabel.CENTER_ALIGNMENT); cnt.add(newAvailableLabel); } @@ -140,16 +133,11 @@ public class NewVersionDialog extends AppDialog { } private void okButtonActionPerformed(ActionEvent evt) { - String url; - if (latestVersion.updateLink != null) { - url = latestVersion.updateLink; - } else { - url = ApplicationInfo.updateUrl; - } + String url = ApplicationInfo.UPDATE_URL; if (View.navigateUrl(url)) { Main.exit(); } else { - View.showMessageDialog(null, translate("newvermessage").replace("%oldAppName%", ApplicationInfo.SHORT_APPLICATION_NAME).replace("%newAppName%", latestVersion.appName).replace("%projectPage%", ApplicationInfo.PROJECT_PAGE), translate("newversion"), JOptionPane.INFORMATION_MESSAGE); + View.showMessageDialog(null, translate("newvermessage").replace("%oldAppName%", ApplicationInfo.SHORT_APPLICATION_NAME).replace("%newAppName%", latestVersion.versionName).replace("%projectPage%", ApplicationInfo.PROJECT_PAGE), translate("newversion"), JOptionPane.INFORMATION_MESSAGE); } setVisible(false); From 527c64af269bdb7abae6ce2c68576362364deb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 8 Jan 2018 21:50:38 +0100 Subject: [PATCH 091/114] Checking new versions on Github --- lib/minimal-json-0.9.5.jar | Bin 0 -> 34221 bytes lib/minimal-json.license.txt | 19 ++++++++++ .../decompiler/flash/ApplicationInfo.java | 33 ++++++------------ .../com/jpexs/decompiler/flash/Version.java | 24 ++----------- nbproject/project.xml | 2 +- .../decompiler/flash/gui/MainFrameMenu.java | 6 ++-- 6 files changed, 36 insertions(+), 48 deletions(-) create mode 100644 lib/minimal-json-0.9.5.jar create mode 100644 lib/minimal-json.license.txt diff --git a/lib/minimal-json-0.9.5.jar b/lib/minimal-json-0.9.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..8405dff1da9efd280bf27b538579945f92f2e9cd GIT binary patch literal 34221 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 literal 0 HcmV?d00001 diff --git a/lib/minimal-json.license.txt b/lib/minimal-json.license.txt new file mode 100644 index 000000000..ad2fd8e30 --- /dev/null +++ b/lib/minimal-json.license.txt @@ -0,0 +1,19 @@ +Copyright (c) 2013, 2014 EclipseSource + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java index bfaf4d1a3..7aa93f321 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/ApplicationInfo.java @@ -53,17 +53,24 @@ public class ApplicationInfo { public static String shortApplicationVerName; - public static final String PROJECT_PAGE = "https://www.free-decompiler.com/flash"; + public static final String GIT_HUB_PROJECT = "jindrapetrik/jpexs-decompiler"; + + public static final String PROJECT_PAGE = "https://github.com/" + GIT_HUB_PROJECT; /** * URL for checking new updates */ - public static String updateCheckUrl = "https://www.free-decompiler.com/flash/update/check/?currentVersion=¤tRevision=¤tVersionMajor=¤tVersionMinor=¤tVersionRelease=¤tVersionBuild=¤tNightly="; + public static final String GITHUB_RELEASES_LATEST_URL = "https://api.github.com/repos/" + GIT_HUB_PROJECT + "/releases/latest"; + + /** + * URL for checking new updates + */ + public static final String GITHUB_RELEASES_URL = "https://api.github.com/repos/" + GIT_HUB_PROJECT + "/releases"; /** * URL for doing update */ - public static String updateUrl = "https://www.free-decompiler.com/flash/update/update/?currentVersion=¤tRevision=¤tVersionMajor=¤tVersionMinor=¤tVersionRelease=¤tVersionBuild=¤tNightly="; + public static String UPDATE_URL = PROJECT_PAGE; static { loadProperties(); @@ -105,26 +112,6 @@ public class ApplicationInfo { } catch (IOException | NullPointerException | NumberFormatException ex) { // ignore version = "unknown"; - } - try { - updateCheckUrl = updateCheckUrl - .replace("", URLEncoder.encode(revision, "UTF-8")) - .replace("", URLEncoder.encode(version, "UTF-8")) - .replace("", "" + version_major) - .replace("", "" + version_minor) - .replace("", "" + version_release) - .replace("", "" + version_build) - .replace("", nightly ? "1" : "0"); - updateUrl = updateUrl - .replace("", URLEncoder.encode(revision, "UTF-8")) - .replace("", URLEncoder.encode(version, "UTF-8")) - .replace("", "" + version_major) - .replace("", "" + version_minor) - .replace("", "" + version_release) - .replace("", "" + version_build) - .replace("", nightly ? "1" : "0"); - } catch (UnsupportedEncodingException e) { - } applicationVerName = APPLICATION_NAME + " v." + version; shortApplicationVerName = SHORT_APPLICATION_NAME + " v." + version; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/Version.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/Version.java index 90dc4f76d..0a6bf64e0 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/Version.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/Version.java @@ -26,31 +26,13 @@ import java.util.Map; */ public class Version { - public int versionId; - - public String revision; + public String tagName; public String versionName; - public String longVersionName; - public String releaseDate; - public String appName; + public boolean prerelease; - public String appFullName; - - public String updateLink; - - public int major; - - public int minor; - - public int release; - - public int build; - - public boolean nightly; - - public Map> changes = new HashMap<>(); + public String description; } diff --git a/nbproject/project.xml b/nbproject/project.xml index ff64d9046..8e37dff20 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -323,7 +323,7 @@ src - lib/LZMA.jar;lib/jna-3.5.1.jar;lib/jpproxy.jar;lib/trident-6.2.jar;lib/substance-flamingo-6.2.jar;lib/flamingo-6.2.jar;lib/substance-6.2.jar;lib/jl1.0.1.jar;lib/nellymoser.jar;lib/gif.jar;lib/avi.jar;lib/ttf.jar;lib/jpacker.jar;lib/sfntly.jar;lib/gnujpdf.jar;libsrc/ffdec_lib/src;lib/tablelayout.jar;lib/jsyntaxpane-0.9.5.jar;lib/JavactiveX.jar;lib/flashdebugger.jar;lib/treetable.jar + lib/LZMA.jar;lib/jna-3.5.1.jar;lib/jpproxy.jar;lib/trident-6.2.jar;lib/substance-flamingo-6.2.jar;lib/flamingo-6.2.jar;lib/substance-6.2.jar;lib/jl1.0.1.jar;lib/nellymoser.jar;lib/gif.jar;lib/avi.jar;lib/ttf.jar;lib/jpacker.jar;lib/sfntly.jar;lib/gnujpdf.jar;libsrc/ffdec_lib/src;lib/tablelayout.jar;lib/jsyntaxpane-0.9.5.jar;lib/JavactiveX.jar;lib/flashdebugger.jar;lib/treetable.jar;lib/minimal-json-0.9.5.jar build javadoc reports diff --git a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java index 8efd1cbec..0edf1a29d 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java +++ b/src/com/jpexs/decompiler/flash/gui/MainFrameMenu.java @@ -506,7 +506,7 @@ public abstract class MainFrameMenu implements MenuBuilder { return; } - String helpUsURL = ApplicationInfo.PROJECT_PAGE + "/help_us.html?utm_source=app&utm_medium=menu&utm_campaign=app"; + String helpUsURL = ApplicationInfo.PROJECT_PAGE; if (!View.navigateUrl(helpUsURL)) { View.showMessageDialog(null, translate("message.helpus").replace("%url%", helpUsURL)); } @@ -751,7 +751,7 @@ public abstract class MainFrameMenu implements MenuBuilder { setMenuEnabled("_/checkUpdates", !isWorking); setMenuEnabled("/help/checkUpdates", !isWorking); - setMenuEnabled("/help/helpUs", !isWorking); + //setMenuEnabled("/help/helpUs", !isWorking); setMenuEnabled("/help/homePage", !isWorking); setMenuEnabled("_/about", !isWorking); setMenuEnabled("/help/about", !isWorking); @@ -1030,7 +1030,7 @@ public abstract class MainFrameMenu implements MenuBuilder { //Help addMenuItem("/help", translate("menu.help"), null, null, 0, null, false, null, false); - addMenuItem("/help/helpUs", translate("menu.help.helpus"), "donate32", this::helpUsActionPerformed, PRIORITY_TOP, null, true, null, false); + //addMenuItem("/help/helpUs", translate("menu.help.helpus"), "donate32", this::helpUsActionPerformed, PRIORITY_TOP, null, true, null, false); addMenuItem("/help/homePage", translate("menu.help.homepage"), "homepage16", this::homePageActionPerformed, PRIORITY_MEDIUM, null, true, null, false); addSeparator("/help"); addMenuItem("/help/checkUpdates", translate("menu.help.checkupdates"), "update16", this::checkUpdatesActionPerformed, PRIORITY_MEDIUM, null, true, null, false); From f13cb44954497d6f98b65c0c251a00f8775bd4ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Mon, 8 Jan 2018 22:18:42 +0100 Subject: [PATCH 092/114] Travis additional tools moved to repository. --- travis/before_install.sh | 13 ++++++------- travis/tools/launch4j-3.9-linux.tgz | Bin 0 -> 7044739 bytes travis/tools/nsis-3.0-addon.zip | Bin 0 -> 1137480 bytes travis/tools/nsis-3.0-src.tar.bz2 | Bin 0 -> 1689329 bytes travis/tools/readme.txt | 1 + 5 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 travis/tools/launch4j-3.9-linux.tgz create mode 100644 travis/tools/nsis-3.0-addon.zip create mode 100644 travis/tools/nsis-3.0-src.tar.bz2 create mode 100644 travis/tools/readme.txt diff --git a/travis/before_install.sh b/travis/before_install.sh index 51768d6b9..e8dba3764 100644 --- a/travis/before_install.sh +++ b/travis/before_install.sh @@ -1,6 +1,4 @@ #!/bin/bash -# where nsis-3.0-src.tar.bz2, nsis-3.0-addon.zip, launch4j-3.9-linux.tgz is located on the web -tools_mirror=https://www.free-decompiler.com/flash/travis_tools # Exit immediately on first error set -e @@ -20,7 +18,8 @@ sudo apt-get install -y php5-cli # create directory where tools will be downloaded and installed mkdir $tools_dir -#Download and unpack NSIS sources - Tool for making windows installers +cp ./travis/tools/nsis-3.0-src.tar.bz2 . +#Unpack NSIS sources - Tool for making windows installers wget -q $tools_mirror/nsis-3.0-src.tar.bz2 bzip2 -d nsis-3.0-src.tar.bz2 tar xvf nsis-3.0-src.tar -C $tools_dir >/dev/null @@ -33,12 +32,12 @@ mkdir share ln -s $tools_dir/nsis-3.0-src share/nsis cd - -#Download and extract some binary additional sources which NSIS needs and are part of Windows ZIP file -wget -q $tools_mirror/nsis-3.0-addon.zip +#Extract some binary additional sources which NSIS needs and are part of Windows ZIP file +cp ./travis/tools/nsis-3.0-addon.zip . unzip -u nsis-3.0-addon.zip -d $tools_dir/nsis-3.0-src -#Download and extract launch4j - tool for creating EXE file from Java -wget -q $tools_mirror/launch4j-3.9-linux.tgz +#Extract launch4j - tool for creating EXE file from Java +cp ./travis/tools/launch4j-3.9-linux.tgz . tar zxvf launch4j-3.9-linux.tgz -C $tools_dir >/dev/null #Create tools.properties with paths to NSIS and launch4j diff --git a/travis/tools/launch4j-3.9-linux.tgz b/travis/tools/launch4j-3.9-linux.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b4ef464d72e597605329c57d37c46af0e8c1d685 GIT binary patch literal 7044739 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

=-c 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

^pF`F`U!~^rSxT{x$FZ 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

>R|DC}UFXGMs$w3gbhgJgA&ASSe(E2?|1i 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

c?Y;U9RSKSnrp# z!}u-_mZ6uLh|Fj5k+;{@BMZ&V#=0VD{FAn3v>mpmbr0c*h!`}CeX z`}DoL`0!!2Jj%}oEWCvVsSnm9^Z+*cO1Roc6PY^x5fa3ICsx=qRrPAIA40SG9zD8d zD!Mv5)?;c~G*0*1mQ~QgT!#C#rSVHjt;-#WTH9zS7Q{u0QD@RUsm8Y`VqNTs``Y5Z zJGHgbB&5X;tV&c8^qP4na=Si12uAA7;u_bra1etvg$tPginY6Tgknu8<4h$d0!itf z)!T)u}cTO!0m-13Mm*?QRHWqAC$)rXF!0+%m2?DAw>{@!7iFTmxZ z!!BQl%OmJA{?yje-|+0$PQm4`S8)#m))=!^g>84L!k(gp4MbZl;scY{uS8j0vr8|r zSQ>;BQ6!=5((z8?W$&6RRI9Gs*y%JieYn+7PTbmQwUqM)oMeqjEj%FW02eWShl74-+v>I#bWdVI;M`QN( z-A0SeS9k)siYP||f7dd=juMr;Yl!{(IX;K;jm-8xI;F7VLj}~;0-K4e8#ocVGLYUf zRDMDl_&6eZVX?JJl%CeFk)Y=K^qxwms$XDTRe^XFJ1)e|$J~59N8}LW4Y(JNkncp! z$U<6d6%7Laqm4Sue>k{nJ}I2mwF5*#xbKvqce3Xp73?Bv;v`ArJC>RvwwBa{8HL8q z9c}${^l|??Km1OS?uIW|Gm1l-7k%G47Q5jZ`c80D`WX2g*Ui3Aa^Z~lbS3o0qH%Hm z$T!mFhn=4fQ}$ao7lx9HJ~ZDAy|M6fupCT5U!J(SDAfcNJDnd5Q@*19o`UQa4+qqYhfsSIha&9}?$RK5sx>wh8ZIMly*FZ2nt+xhXZ;1=ZrZS5texN7}I zx0}p|!k$hQ67?gTNY$!t-9s-ao0ZKB@xi||bB!C0f*!j$J^h&!d`?4~w zJ+22@X(3y(0kA-XK(Or8aytNa!%qgX!L4GQTj@SEYE88jT@m`6cSsbbMIXTsDlJlf ze}t)`I-v9J!yoY{ZxMTg1J1}7R)IC^Kxp&gPpwOOU5$ZO7m7yZG=pTn*_TOg%+@~r zo!GIRJ6yQ=>(YUY$+y@cJ+IwdXVnn%p~a3j9^(#eU38840gb3NeXKk`?=rfJ?7MF* z3is3!|J-HG@>!R7LoYAdK^mpfuk?`|py${SfYe${eHha2TMN7G_OhSSjH$zU`W9gK z83`Qcm8I@>i1?*u8r3$}jXq@;q937)Crdx(Akqb9H?2y1)&X0aYbdpKCAJfn?aJt(~bFAGsqp^mG+Ou0s}|HQc6K

&64@5VQ<8D4w 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%0D{WDhPmtd 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%0Aa-$^W-i5YbYuA_PRU+j((@3 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

) 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 z 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 (m2-)M3{p{E7K@jgJ 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

V_h=I0`Qp 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

rUp2OAYZ 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

Vrf@ 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℞I<@AbbASlll=Jl5OjW^l4Nm#m0IVt}BNy9$ z(yYX7g9#lnTVcnr%5cz*u3;aF_Rc&v@HDTlTz5S>IKsJZH1&`e}`1a8kl7|kX#4Z6Q9E7LL zOw(d}G5D{5NnTd+ZT31A`!L`&({(j>?&6VX#Kl9VmN&;})Gv;2RHVicr%J1|%W35T z5Uwv`7vBijC*NIy%Vki}3OMQDzhoc`?`Z$R+asNo)AK)gOtDt@tcQjAE2jvFz zLQT$1a@@yOtzLhE?gpfSWooR)8L>3#PUp(ydd<3<-NyKSn4{|hNEekE0cTxw$8b~j z4wgaHqP}fhH+^7;l2hL{dZ38B(W~;hh>Y?odF17XfflSk2Z)ztBCXsw2YDkS|HBtifYF-EK~5;q8y{+!oS6-h3OSV=9 zZysrPoLmpfBlIT&{7ScSJDdne52U3Qdd!E7p%w;yDhD9VkIgMdn>h##0a`(|R~SUJn4nTot12wZ4~hhAKa3@Ys@+qv{Cx-ofhB^)Wg zTrOJYu`f(%$2=!3RUwoJ5J z>;tR`T>aTr3LhJ2P$C8cG=e=MZYc!<=##O+EOQ9$e!Ew%2O{Ail+hbdOap0uhR12=3sg^7<#|OyJ^w90R{`1d9|*8(-qY z7?v=M?41GWmU2G>!XC{MBh-&K?fwGzC|cGId;pwJC?(n<##{8vV@BwQo8LtaDC^J? zJVy+XrkDN02%xVRAFotBgUQY0I4 zNx%oEP$#BXC}PmZj~t~#l`_-0sGph2(0@r`e~brk4?I8(&cx&Tk0tW^>zS#0F0R&I z0yKZ$fj?ahl;oA3V&1o7{1lQ9u}BKj9A2y(IO$ zJ+k}%#@atd%d&0TqVTY7+qP}nwr$TjY#Vdfwr$(CZI5rQea?ONynD}E`@65aQhH`& ziOfF{8LjnNdvC4QMskC9tRa?6V8Y7J}I zOP^jSjBnI*Z~41@Qsv^xs<2h{a3&K1(6E@UFY@wB9Q4Y|CG15{|_Lt zjJ=)t|Avn*=lvo!b$RbWPAX3hF_e)8D2!cTA5@Zs_#^qYMfC27_q-}?osc{H1wN$9GE-hB( zzZ3OLxZ1}MDmuO??GE>DGc-70%)}O#80+&O(G8A7^-k*L+`PuF`$L8K8Qviq0%V z)KhGC*0fTgqJ}fd#%*PEDGAB!gYk_{y5Nra($f((8UpFclv8Lx%!~CBf~O{07jjN| zE>mTBo;zo~V$S$jaIIz85GSF%BF55Ctmk{1^~0*kU;34UR3COgy3Qy!h%CY^YW^Du zVGpZ%fkwnGh$sVJtYLJt&Q;H(ThPQ`BpYdpS-+5-07^87w7#GsGP4zR{EMhj1)ed3s7Y8Nb1a2RE0$@8@FtH`nV7ga^pNmyYLa~r4xxrv@gWu5qC&W=D%%{R zs^BZE@LvQH3OJ|m)1L?O!a~@8yhj%BW}j`_2!U*#0&yRgP=_ZpRK4^avM5kN9%;QF zz%b2zD{qlVBd-~Dzj~+D+b=KV`(OLfI*%fZ&3{enH2(;rssH=%_^-|O|Fs-KHlEvQ zfB{Ct`w!3op9`NT){rV(TtE8n(d02mek`Pj#0_wx!*J>-g3FC1tH*?WOAOxCvp538 z68PpEAHXj34l)x%NYVuzs$?(5&e|u2=0X*x1x(^gw>b;+m=XSI20Zs`l}&hA^e)<` zD~BgRhuJ45tZ6QtVuoCl!tt&kjI9S)nHU2L4F9-d;>}t#_ zkF|(xtn1*HpSOS2ppc;KJs<-D0IdAu-v9qQ%JPq8b^nF3Xyg+BQPCrM2Eo>rzJfHN zG{!~5QW1c|soC~prL5aHH2gnN78(?dW29JJHAm4Q9ATe6H`^b$z=VuRra?66Of+HfVYe#sWTWZ(<;g7J z_-YwSdoIm|hPM`&;ZNF*$=U=;Ptbu)#s}?`czV=G(iWRTnuV&@W@Wbj=?!JG*#aG_ zvqPnkovRhuROM+@%=RkCQtoB;j^d2D3MMR1)nI#_0cMURxW*$N1@7V3U+f#Q9Y)oc z6SfLL6my0arMlCw6=0Ejy%;mMl+_!@g(UGX+k zGvN9?H!_PkeE*8TPP`fA#5_HPF>wErp%nr?B0{U_*Ahg7jNmiPYw8sx5&w| z{ReLe_(}K=-g0UUM|%k9_#eCl^v}O|OI6y?zj#ak-@HZpU%bWkFW&N~o)<(2EwTF- zZvp$8x8VIx-m)MCVw3)V<1Lb_#)A;xjTe^Bz;*sqS_8eVS`9!PIEBmpS4g8>cyloY zAEaKQ`N&>gQsKMDrvh(acKOq?i*1lF1`1B0B<|6zjAOW!M0m&72rosu=YrdWI@foJ z)cFH%62VIjf$D{~7r-cZ#hg$mc=5GSNrDRtkDnwCM3dgaGoQ_Z5LMF)B(dJ!K>AT= zt>GUr(+}SO{??lU3BS3i+AdfY7#VBMD8-;!g8T4GFO38HqaU<@TO=K9Lx6)vh_qy= z5o!69Bk4yh`f`{p80oZmO4`-Rrd?3AS_kBnPEt=9&<}C*NYpnMnWt}3bZ{a+A(>Msa@;)fwZ3=;UcZU?Th zdClex=!>$QPbP#cDe^1*6{tJWeCm!d;vo^&Kp6W1#8)9H+3E zh{M2h*}ObtU6_JjxFR6Wlpm0=ux?{li9?TXsCHV| zX!PNYi7;2c#v?}M+lX9Qc>0sVepMP`F~i`VJQ7Xk%o6-47b!Q+Ibec)=P8HtlHNM) zYEBoUv^J4w?oUXy)CdHaLhngOPe#ptT^0-l@=@X^3V+i$148_#D~c?=8GKc#ix#Q9TvrxjrI>NM5itrSt-gEyr>zwRSiu0RKnFiAcpR$=?uw?H?h)zb%dYA6tz7 zi~CBGH>8is($mjNr)|g>03iZ_0Li5$nV}*AP(BbKkfgwxpg&=HP`r&C5}Uiq;=8lH z)}WSpegLZiB!OzJ>L%z*SN`%*Ne`V>)3VxIj`L0?d!mU%?$=7J=gro~HSf!&bGLch z3GB?*gg$p^$JVsji@thN3r5v-kKzafH}!rItzLD@jMUwRBATpyat6a+M9x@ydF&|sUFvau=z(EH4MwV z5@y#Vrn2Zn7s{g{MAfZA8GM0dW9s-J-n~-WCiUTw6n?Sts_+SfziPi>QD}Lm%GH1+ zi&ASvJbM!!*Gec*gh%PL@Do#+;JdoFMKnCKWmV|1q<2^9^uzocQ75!WFS^$$5xs6! z5T{FcEZc06Uc1b&?sZYL&?gkU?%4oR`?xee@*Qnlsyejs53&5p=#dt@?n%*wFNNvX zZ6pcC@Oj)P4Dd|jJ4>1>KZ=|n;>$tt1gf;gF zzH214o0P9DV&$7;^p`gaXjZQ?KYHHXBJd*XiqPh<+)$I}n&7X{#M1C)Z_7}Gw6mg} zFdh86dAT-rZ_CtFH*d?>C@&S0T6L3K?ey<7nO{0;8z)6ydR{_YzsOT}CXOWAc#evI z^}N=_XJ#ApyyQxGZi>(gzw%S{61ZzT6%5$=g+n36O!M03C0d)i$&}bRHQJd(AW)V> zs6xQ4iwi_6Q4+hcB$lk?`^YkA~hmzU(>m#b*tmSe~tE1{N`L&l36^9t0LRRBLg zz`qcfkQ5KtQTNUx_C#4xWei0uO>3*|7-F$)VzDoyusexRD(y<))t6zjam&hJMbB5J z64COs=Q#V8`u36q$(S_FnA7E)msMA4V3tCqAth1s-uutn-wj+TotdbZsS(lXp7v-< z<@fE#%w?)6588Ai`vV{NzZ zJ2E8FP#0D0XqTaBEOV|XFUkWIm($^b-)iE{RKY8RXjd|n@eNrYFq~a$>;3gJm_kxd z4dIcz2B0s5;|Xde2bfY;zv|Uwco>g8!fFg`Elbq^<9D0pIsz!+r3ex$TUBjpv4qn1 z5Jhu1*$G?PgCSD#&XFL|irccKsP~#SMkTeClkGoMNQUzPQy?NKj~~;g)JDDTyD$ zwfT^!(AAkX{YHp8=p_er>;fo*mnzm)O-`Hx5tpSp3ECYyG}`jh5*}3vyQewG5OE9c zD-pkqc3*9D7*bPWZI6fvnzmO7fk4M1pV_(-!= z3|)N-i>sGYw0LgYQy-S4Jn)-Wp=`C~reu1tye0K5XfGqor*Qq(317KG;U9UsDC4mZzsRg%}Jh4X&t3Ur=bD*W>Y%QEHW| zGku6}B+DL3Y6oFFUo{fmpCtTQ-Iv-Q(^Y9zFQ-wI^v7)EHEn5cmh(F9Impr$7KrQ#+^t8kL3ynsLnD+>#K>eVc%`4AKo zs`tD=&63328bg637bf10#X_oL2Ol9~Mdas|toLw$=(Qzm|2ijP|9(bmbAosIc;Lsg zI}+&R3DHAl;%qa~V62^uym7yoMOp*e;D;q7%=_4!vz_PuwHjgj{Adgl?dKJ{{jz{x zyC97JddA>Z|H-9>K-g7CCR~5(&?Ke96x0P1PP}(tJ9xSMsi$=7u%Rx@H90B*?DrnW zcRxGg_fG7)pC|wIhzT91R2rGXSMu|;fc{vN^R7(wF^v{po%0?0eVE7paYp~B4)1$3 zqJL)1=iew6ANMva|Es|M3nvwZ-xY0M(j$E;INg5AwPlq^acz&9L7=;!=c5eS*Iqs` zQNSi6=Ub4Up*U3I0h%&zY7B;$HyEAJ;m2YW=hnM(}WCu0%9WRy);II zOA>F2{$)C-u@uS{9+zGWXINb3w_=~9D-Q+VN;`sBi#3?|MB|s1I-+ZP2eSEE3U+_V zYgAncDKtDiGy%pE@w)CT904h8a1306G~MF z%?IeivfVz>`%PcEU?^v)zVwpUdy}4)y--c5V0kG5xfHGJ#lhTrJ*f59VAPm=@hOuo z9rKzYtS?47Tb$g!bDt3lY|sZN>`qNE1L@}I#^<%q+eQ7=ba^0{IJQ~P|J|_ z=KZFjhEA0~A;U;7TS&P(xoGF~{ zGKzfiHsah!hC4ab&6byS*eViA(u_!3@=`?Jf`8I61FyvOl?OVigwJ(4)X=bi7_h~>GECQORl&LRnc&x{CRB; zaaW#_XFUyosINmSsDmpp;4MDjnH+wzI9Bw_#Judc8+yh|ojdbMb*HR1V{V_|^4W;S zt4mh$fZe6?xMkKmvT_+va`HMv`8_T?XYTAFUXK{pFP<4cfAP++ zk~<{5VZl$p&|CA)h?_gCbdNvnyPoHP?i9c`a|)gE19#w9q41|HIK`N+amTyFR72z{ z!Sa@@d64D+CzQa3#h)-PSV2yiOb>h;#gjVR zN$DpPN9M`kb9I2sj#$obIMU*4z^F|0XgytHO`*Rvdi4(LJx@?K#vG zQ$3mhgl}_|)*al8o9Blg&YR~`_C@?A0>lxBvszS74?1mW4~1d4v_~6kN&@wpQ0gyS zpf#+F-KC(4ktuxqcA1d zQ%dUnV`p0CE4R`ZhHXsn4P9B7b4wnw_Aj#psH_c)keRy>PHt1=96|UIb<@A@XkH;{ zUc)8wl;>i}8n`n8aHx7MG9o;q@`72Ai&TP~OVdF011?TsHl>`CXJ<_EZkKiQe#Q~o zdBS&Dnr|NNprDn-;m+6iL@S{=@w$iQ$)q%0Y92TuZFzz1cc(x+_<~w+e!3IPZ@n5D zc@;NG=^PYsR|A#TaIq|h7l^JGbn^aei&-Q-k5vl1(BcpiNGt_ zuS*45U?0s2vm`bz0Lkfrm^MiuRdsxOSfZGIniR-n>nT%kLlWPyZ7U9cpz?Q3$iEQb z-|YE{%?#MQ*EH-jts=h|b^7+cek3)ZKc(P~FBZHm4k$W@9%Ae(TW_$x$ZTvjtTVoV zhDR+oxiXve>t7~A_)UoNA+jdT^dxTy+>o#w^tlIGpI=w@nK87dk zie#Fv$XV-hSGis_t~M{PgjqQ@Yh_~}XllcR!sQCREuE?|qy9`A!EB8i ziF``WDw9=tHg!Ce9mZdK=XphBzT|_uEqe_z_gFW$RQ5Su)q&h$9ecwxCSx5l^hb^@ zlA$B3pyNT-0)(-pqOlEG7nb)xc8rtEaM zx~qsmYbDaGaMK@-9a>1x@=@3^g}NzIkMC?kuj#FLp5G=jYeT=(e=YO@RF+cLiFq^> zE$*}_Ly;Y5*Dpvg-pgQ^+fZ+#+2iijNILPch+KoW5Y44!;X|^tT%TTP&deD*btuFa zq#FddK7>)J8(_E&#+EM4DAfV;wti&8hFz!7fkb#^rDC~4kgppFcICzP2fJ3W198QY zeNXMmY_nu50K7?iEyyp1cb)#W&<$H})^3FGD%D2FeJ`xpU-ne*yl_i=t5NK{YD-?Y z37kUQJ5J16+cK*;n#{VV7*k7`#&F++%1TYNS`(Gi%oXTp?M00n-1E3{&>xPySJ5S?&Q9`>Y&>GdFtKC{JR9R0%(Qc2o%MjPW^90d86v+% z$nILR`S%#-KJ#KP@y8W?B^C_zV7&7i)juO2p9h(?$1rUPMB5ogZ$qA(@okp5_kFFq zua=h>gl^+bdBO7(zYHdN(eo6%3=8t&+Mko}+WG>(T>#&O^I_OZpD5w;#)6#ANmv72HM*NOS>>`qo|rALO3`SgD$GDYM1=>4cgb4OV(bhr`E4-s0lzQZ%NGeBw=5 z*jQ#-TPP7+C@E;r3&VSdky(jUs6;nT;X^k+e_)W;j|%?eE2WQ=ewNY=q#NSbR2f7G zd_|8GFm|L-?w{Q=M*J-Gk%5=#ljrEaL@xVTD&{|Atk2V|_7@+_D%F5;cSESAhQs-d zX_23hwN*-Qi2ldk0ZV0RP*WZ_FYRiS+SXf2fB+|sdDtLDu2-~{EBgGTf0p<(zecQn z+8o9gm+A2dqf|ev?|sPTcPc@yeQ!7yx8s+S%p&`}~d?~vlYk2p8C0`zRQN}y)SDxK zv{90YyHWOg9!l%urV9pDCG7-nfbC7QO3VD!cHp6{a~Pj5O1&4$!qb`BwCoXrFHx8U zeWN=ZrB0KLiq_7#uMp8Nygm$9n(w*;LdzVx3aH?tYo zyESvF)U_zrO{)mIMZ9vkS;@9@fG)iZ=}WSXi-(}uH%3MpGehB@jG{?jO?0%$c%T}5-30WV@u z?5IT!y+3tJnVnJ0z|xp=;iBu|K5+eH6vBrsFlCAzj)E0w zHZb9V2`jog6{k>137h>3ejg-KS|8+!W1#HZy6D4JigVSGMkh-aD?^M`a#FcV#@zX3 zSRPpc+*!$gs6}I&Lwg5B;Rkpv(~;l{m~_U)zzV`D@fyE%`v5q{3N_$ttNMkTm zrPvpi*ukcvl{2tQSirH9aiVQ)HmB-_#RelWs^oaUIyAPbpPB{3`3a@yB!4G7a0^J9 z$2dhGO&Pxj9J%6VI_#*8ALE1(XXV*Pz7_x2O3Pru~_lxeVzug90*hk7D&U$XkP!o@7x;^Hs2Y9%?h=-!yq1 zF>@xkW(6PdJ!qXleekVLyNN_IeU;3LoZdS#Qk`Yy7}KhN@*;CqEgdgJqsr><2o<$Q z-`>a~K0?oHetnvbgICE7#3lC8x~Si-OFq8r@9^p9-0Xcms6MYtW|35tPY*92-ZB-d z@UlDOof-gR32m6I_O6Yug?tzq?W9z{^;c3tn!c@`d>Q{ZbyB~ha#Hxv9AEkzO#l8V z)FIXlanYrg*E2lk%1q~N)eF=X)R_(Qd(*>2puO`hAoaWHzOvi8P5W!=ZZ~Qi#Slh}COr1KbJ-*qS>u@XpczQv}-LotDVS_Qvl{3nfGs{I|P$*$iFgJ+f zL?%xk!Z1%Ui1!2=pJK)=eNZ%}6X|M$V9%6x>}Z40o+N0_pswAb88SA*^s`Sn$kp_Z zopQFw)f5J7ND0Y2nFnczftp-m+0qdYJ`QHt=nOkfM^_H?3R#JtPJ_J(h-d&$*K<~j9&j4LTop}i-WUM9iIEX^~OQ+0yAR@58qcl#9b zMZUc)yHzXQe@ zzebvF2~9#D`gYMansjW2`TqKb??}yWJQ+21q=e)djX(B>f|35ZKtwG+7HR7;7KtbU zaopJDRh1~DG8&_I)GIdriI4aKSZvu)Y*~DifnTio4O1*5$2j2)v^ZVAKJ=B@JG6(P zy}J+exMkJAFSKI{|2FrHp2rBU4{ti-Su=>77IsFHYr7W4$51oLlynZGf|<6yeZi>$ zJh)ONLZi!~Ybmq3`F&oES~$tjTZQCI80`^~rhiIW}8+(SaCopt{>;qW5zO6-d z&p_YO62Eb5pFOX@qbS1-a1o9Zxz{G4?WRZa~ZK)%SJqXEZL3I z!_do0oo2Kn9m`NYHpzR=6*#|I`bCzh>MNzBn#(Dc%8S3%XknYqjndI!o%7fxgV!0* ztp;#LR&#jDNh}QrF#mcdLT9How=^W8b3K2?FQ^I7*EaVQLXk;w3Y-4xx zg3>Yq*3q*%8vSz4?1Wo#J>lxpUJ@)8b}ClX*&F&2FaU%`oGIW3Kt3V9M(s_QW0Xto%ya@y1-xZ!y*&@-hU0l7)&C=@?d#sILtNz6Rw=9VMKL$99>b3ed zt;gb<=}<+hn5iO}Uq94%oW9yDK$MzagDkD?H(@dG1ul;|RAd8c`HjUmyGRygPePna zNsI@-D|#e-38s6)tZ2r|>Xi4<8y~ryUHBUvs7K_ATr~Zn)-NOGHz?k!nuGJf23_TJ z*+38Y!goD|o|{Czwdm>l^x>1azR8=0i27o;gXCXOSAKt*t%oVsIs|1!z4Pdez@l{- zZ0$@+w0xex;$LePF4?kG>_3wvHLq)ahu4D=CO!Ozw`bDUs5Czz006J-KNV<*{2x>> z2^u-OI2jtd{P&um7k`WJ{pf1cOSTJ0NlXY+)1m@Hg6LP#CZ#Bqt^za>NK`D#I{6o6 zZneVW4QX9$+_74H%{mT0Cr0hKG#ZK(-;XI?sQ=*NpV$eBNZ^`h$xL@~o^0-T=4^f) zeBcAP>}es`VnFQ*W}zKQVh#vOU_j-g%D*{^Wl8dj4RTVArV*H%^3WdWAh2S<=VKuU z@DPs{5-2le!{+Pdsu*(#9Cp5X3JyCnWy9w~3j1{uOh*QEQiNfN5D%Lc4yLEXBVIdT zGBcT(PBKzp@)fkVGnbvynU_jWS3p|{sYkC3YFK5L{J{fTbEBC`Yr^bDZyp`tr5g*Z zo{~p3z*zMJ)2}hJki!=?ZS+kL#A09$(#>3i;X5}|-po)?Za1Hjsdz86vfOu%r{r|T zO6Q7asagxlP+oB6iDzrjT&P8+tj4M?IAe2+0=47ZtVjN$yqA~d{z@sLgSWX4-Vr4Y z8JMH>gFh{|eYu2b?9#bh;#{hK%bjl6bQrA)ocn`G!G{trXh>iflWqVZ=Sexudc6%Wrj1uGA_G^ zy$YQg5rxnR5akML|I}pl#T}rax;lrIHPA)c48g*uMU;N0hI=#9wPOvn z{%*O1V5lT{+Dg3L&+2?1Y3IU#pVL77~Uez zMpB}q_H3}NnP?fsp%Q0fH64rNGFsr~OsY!QaXS}}*2?Jm+D3-{IVE9qt^R{$x@k+e z7D^^Q261IcXM*37O14^%96h@56hj|%eHq6~^K!f*6&YVz@ zgnl=QJ9CsMGR}=MainECj3bd}7ON55jOOW)Mt6!~^L|>>wgw&$$&dDe#1g;A^h#za z!z~}>$jFi`*uT!jLAQRd$FSDIxnZN?&fBW^30Fe#$TWuJ{uV#gga_h~Wd}Ut?JMwz zy2Zd7A%uTr$foG6zbMUzztz4Zztjq4=?W>2*1+pFsg#=@_yr7G*Diq9hg}*iNwP|6 zdasahQJSqMKILKq+hh$9Jt+J*X6(+hh|85AuFJECdVW7Wtx)3b_303gPj^3XQA(Z| zKc}iP|G*ns7>4rxMfQn!2EFJu+%vGvgH^1C7%hR?va3Dh@5+*JMCP@mMZQ#32EmvJFn6O*$vnQVL6*V(9FH3*p zdmEmGc7MGUvrFOWjB}&t>NS>G!4YU&s4nR-680;==RNs+IX02x$v9W#6|E-Zch5bX zR?m>2qT{jX!2`*ch`gsR!|T5q)bw8r9vVRa08;+3&hy`@1^nNX)&4Uz{#S7|)vdpM z7Wgtb+-xd>L4a)EfeC3{fd&abN#gJ!@(3kileh|Pfs&f)Ir1Y8;}2a%fgd5?LAtJG z_J*%qxVr4|bN_z%0vLErODR@1T{7bN+*x*cPrv;6YV>{_nb7wG{>|u-3sn2$7|R{z9bbm5lXk$ALACaeQ?`0* zH|c$QSC_4}T{lUq>J!YuRAv(8eS!eZ>T--jXGbH`)UJW1$I1|~9xLy!KYe?f5_^n0 zd!FNP^%V2AVK}3#VDn@NW(c$R;)|gP56Ka4BGVWhM#^@6xayn3$s%@tC_ZTJqT2@< zNQ*u`3>}y#h7Z*^e|0=+oNhl#Y^lsS!&F4Q^Kx%iUZbny$Epq2vLp=N7gKFM1R0B_ z4;&>IPd+_2ma(Q=XH{itGPGTYF%7^zpOWoti3(%)W74z?the_om>2j~KfmDD*Br9x z>6b}*65Qh9Mi3Se&&8m# z-(_ajS(Wu0(yLN@w0Se(^-7mq=@^MzZ73ZpwP$RqpV;_%`T>{7dh?9e_hPAc>%kS? zc`tqQOfClj(huJKUOY`}@LF^*Ake=^z`5!h^1)9;s{`sWw$3f<{GtKy@!qKKl{eb9 zdd{;w%@2P1Y@y_1Met{&`*Y7KnSU40Zkl=}e_;a8NFzGphb4UX*SD_Zf_mOqCQoJB z3=?hHVGC(@CQPXeFe7(jPSNWpvDLSN4Br5-oZ`gKzr0W6)H3-?; z+x&I@f2~CSThT`w<=c(hG=xdqu$BrBejm5CX;*jew?^MzAR2+*exY6)EHs^qS#<1f zP~<=|#-7h2fd2hB65gVcEW^Tw=}sJTW!n~2nsr#F{$<_z%3im->DlM~^BDK{pH>V} za5q+CTDM5k*oZEyXVE-^o(SN64~2m|3NVJ!J$qPTtPoZlyO0P(SaFs@7Mvx9azmNZ zm@*E!UUHQz6-O!248fdz&ju6l#A4lj7%{KmEat@KGn54LdS)JU7zPn(K7OsX;ofQn z7FewqR2asf4sSBdq$F<9)nv&kR(gA86CpQ28L##{ijA}R z{>lX`RBV!B&@W`!NZG?Aaz;(j`s{7U5(1tcF7mHtVscsTkVyAq@FE_G^grSXSaobU zJbFzd^$1^DX;aR1wGl{-;jhyh(LXgg{h+i(t(Cv-8O{S?wo9GtoS?tYN^W^ga`4WG z_)IZiZI6MORxmzktJ$xNapsU8nuONkQM8fZF!|ydW)vhJDMGd+@?3Zx!*P4?oPRuP zCAhr!CH8yN-^*>+{p5FEQ@1b7hMzxP_?KN!xh*nrA*kKaU~PFviK4akg=^vdij+ui zc))>IR>UFyt-QT>I>#@=q&(iPC@)3>W8yQ%`f6RM?6l|2i~TDFztfT*0dS0ELJ|CE z&@T!hBPI*@#O&hW z!r62N7s^4TVSJ@obf6K%>YfO%f5Lbg*^S8_K7t z)}RrUbJI`y7jF-Om(WJO6cmW^;aM^3lwK@o)KIUxA;&Zk;ZM@1_`dwxS4u=W6?OpUEK`m# zhB1foxLKz%hADgXMl##cWiQ0`;pNl@@!$vjd+u~<;can-A9xKEY?sYf@aF&(e^Zx) z8K~gKgXJpCy;0{?TKESGELxo%Ri6b6!(w;e-1*z5$f8xx?({;3y>_hyW>xu0>Xqhc zFI}cJK9=E&9J1iCmw=a}hzbJmpSAsoOezYPL(==aGlk_rJOtJ)D>PSpa7FQrcf#TQ zIA&5fhfm0V-AHc7;A*2}!HNhh zc$#0a+WrO@^mw;yE3|eiPwL6QhOZkiWxdEV1x#SiF@^>sjj}(G!aNPFBe{ovs0_s; zifN?;8;CZUYBUVlM|PL-++{J{6C-vQctb`+N2>l)?yO|Z#YVmc;$P0!Np&0jPr(;w z_Il_K=7?qKlaJO(REu;$h7~PD_Kq_f-5^eDg%Lk_qDUj}w=m&uhYIDG0F;KfMei1IYz`FRx8Ij zZh({=7fRZj)-a7#S;cgNwSCpuQ>4-mHx}c#I)x@48wUHwnGvP{{mVq-HPm0|Qs2G( zqN7+B{)Xj@TXB#fUh}fXFzs421-tq|?|U2~iq#8pz@Rk*!*|rwi;B^b<;rn9@vTu# z=`rO#>N(v8oMu7}VS@iF$I1@gjbKkU0$B$gtN za0f~HRl==;82{M(+8NQ<0$zgoB89vxG~t-aVyQHdyc3sKMr*jXZaY0ofsi-hOCkk7 zp!y|tI@ltYH5wZet z1Xsu`!8>q*?ExK5`C};)f%y7rpCJV&b~tCMPOt4`upX*I=qzJp!X?Yz(b6V#RoZ{x zf;ePCmk1yLfZczTIs1R-7bjxq^8e@;r-UPlGTdYKGs#2)+1E>!kVc{CW}X@qUMd-8 z00g3|E{htLK^g?F;A&;0xF_kIi1Bs#e`dB_CH($5YZ_j+sIzN>i5K zaq@V!v-0(nUgrBgbMp(RHL5+DvD4HT&i>&P7y8EO*VHhj-LS)-Ozh1`XPfPQ+3TH# zS_5O0NH($C?qF>+JLp6EcUpcegwZ5wY@oHG=M)r~Cf}driivhH@m+ zXXAUVZ9A+LPg|Oke>Y*<8-F?k2)t= z(bCL4Xmwz-9pUCgno@Or(=peCIc7E0>I_0%-wuHK*9qFj$U8F+$OdPY_m)as@WAMV zpeqhk_J)5AT%1zz?S8_8s(q)ni0wW@J1G&GFY*z;Q8?Y)(>{Jh#^$v0*E?&AO|;vA z%B50U+UJOJUVO)>I{)YM{q%tX60o=n#1m)F;Tg%dPe1y;V}iqfuhuw5+riX33xm*6+;ZPI)k-X zIHV{~751JthQ=Z>RKPbl;MHKPf&zbFX!ZjV%c=4RKI_1@3GSXO{>uA}?rMe4Vf344 z-xrSZQ8cg`+oi8;nTc|fc0EqU0ovCtZ-#cZsne`=A*4fYvvM!{hLC?0Hhe=-NBo30 zbb@%>Q;bqa%5@bB>fv+elu8Q*}E#$-7TY^_|t!L-{J(I5CT|?j)YYpzp zLWxN;C6ZGPk53>ZpFdjpRwUg-;aSgJY~1lzeRzwnk;`9IEXOWpSZVe+4$0!Q&LV60Vm$##4blzQ;=y{1xr7UEfVL zs^?4jt~-x)SbF*9DuH=X zT(SH)U5xNbOwd*H&`T^2gZLy{fkhYHOuKW9O94q?+JZS!Kni#0lMwi%6=NVbF~d7( z9ks|RM0)XN@zk^pw2+Gp0nABl6#DUmNO9suP1f8?2Vh-7{6VpDAa~RB*Fnfg;%1bD zVhTb@yj1fK(rx6zchM|`wP`m!60z-_4lstp4r8RQxg1r;a4iYYj=M?hR2`W8w)9(l zhTW?nf}P{xtPTCu4{tAoaqtS<54m~h3_UFav&ZJ268r8LZeVpEHqeM4$>dXc_%_&I zg&O;8H{Ba^UP3W&9DJpHu7eKwirA|nUNWW_om#13z6EUYwQ=lxYXDoN0|MDExqTRg zjKsp@US*J?jU{d`9!bfH2Ava5AAM)03Kzj1Ylq>_KPXwyKF1|?fMIp5K-}}@-;)T6 z|6^mtDRPbFZ%r$ze_S#Y{Xf8(!WM>q@2mWS+nOqdAKRLV@G4NS61Iq76>H%vZD|!7 ziWIPI9b>6Nqi9)XZO|3XT5Ct2n*C>K!9g(d^kZ@Ac4=xOE5j1pRTTQP$KEY*=OcUR z%$lq+U;aT9x_9^Xi|=;LN!Gvo)&Ot>`C{y{Ecy>5A`Lx0s8*>sFb5=X7^5P-$~cA{ z+QZ#2LA7we8LAETaM`4b z*@+0VE;Ew}%qbFQGgzg?s_V1ZvoLw>?+SUX(Os<7+-2%&aL2b3&ZICV*5wozCcF&C zW}%+%>vf%)I`dMgvMt+qD624H%sHx4H0N=JB7y5rW#P%8pb@XH0rW;$ zX({2+G5|Afj89DT?et=t@zV(M-H^FRl41=ro*0`|ChhAF zj80gUZArNzkD6xXXZU>ijRMEas~9^5mI@Z=quTyfTo({Pq%)?I7>1LxZwEwJ{d;+l zt1wALlmfMy$R|>qkY}py57_TvM+8|6A!xl`W*$XgW}LwWJ|B3vC4v$Q%yMD8Y9YBX zRS`F#>_ZNzQRN_>E8%PSNvk-cp$;JhNM8xi-Ff@Q2&Lw=A84d9e1xuW406*a@V`Q>mx+*YPSRgYS(FQ4Jzerf*J)299rvq8dEl znX^vzkjj9Nsgv|b_r+UdV((D-`e1z`Za8=P%pdPL*=|AohEx5(#~*vwm$_@h2TotG zyTSpViA3Z>UwPBx1Jl5u`5rNF_-sKrd^+D?TWdA!4NiH8dqW*>c%l^@9jrHHFe$2I+OiivgOz6G#C*;cJNO7~uiy3A+9cId& zt{H|*6Lgw}S=jNV>z_P!dyRLaqQ+wGm)8u*Y>{m`C+BqT5DoC@(iY2BnDovo8;j1# z$jo-NMrqOwrzX}v+Nd)OTV}y)IW*bKZ5K%Bp4TJ!de1OWrWjTe=Bfx0na}X;i3fDa z#uYG(0}Hs%FQB5saXb9ODd6KXCcg$)!%({kWj+btHMYyLjEnwUq?Xk|Et}x(d#) zw9xJkgg*im7|hAyu`XOC#GH1T&8a9>~ioL?(a<88O$tzogB;V-_er zu4P>ep(X3VtPDXsfo^F5M;sC^DW-V&E+qgypr;Ts#FubgN-sHy&e%`4MO{q6|I{q9 za4znhoGLA-N=)UGpCW?$k@l8^9kAo{-kgr$tDMWP|3vQoJdcrB@4_+_0Ad=>nafxh zY8^<-QCR#b;z2~+5w!^}9csZY>iCTQ<>OI=w)i{eHx_^eOJtYa6DCpB*hb#rGyx~o z_HTit97|FU^F^vds`fH>Q*T3bUh0lhQbRa0z6v72ZIS%gkTEJa)w!NPe|0_+c0v5t zU6*g-nTt4rbg%;$xjB6Df>*?SpLWr>DEZI-u!6qkJ|_$P3)>t1W27_wyGR!@bhb49 zU!z?8Lm7Jo^_vbzEetfOw~%Z#1ve@eM{Hh z5qX~Mn%cML;gtCCs8CiL8+n6*&=KKA6gB`H&_5=d1FJ2*z0ap;!j0j>+2n4^^2E?^hLtH*5`4(no=AHq4*!lC# zx$~80f@cPS{`Nj0i2n9d6jDDTcWL39N%~iCC_1SRYgCPBZJ@iw&;Z;S7E79n(w=!)=A(XIQWw&ak}4m$F_bnIT_P z4&&zxao9en-+OS7e*Iuge=E(NE2O=|Ym-2i6;`t`s>(1Z%j_XsR|K=w=X5`PdwCmjs)%G}ffV45QZa zLQTM`b%kP-BV6( z--u_fgRz{^?5#-ZtX=>)FQddxo{n`eOT@4bIWcc&90swzr+Bk6^!kof%TF7JF)}hrq+z<7gDy`wAzcx*G?adYRjs}e%3ah_19b@AwteR6TlNt3djZ*oOCJDb5ecf?vBF?6bWS@34I_5e?WyYq)c^7LJUrsNiJV~_=b`2Kyv#I z1+NHalLeXS{noHN(Dh4k*!VOx&rnGWO=M}ie(kF*D@D3#i+$3wJRFk-xI` zu&vw>|Gxa9(#m056rfwawJ^EbbR#Ve1K#BprM{(fwPt%d-ty>Ymfsxrve5;zf-36< zT##S}3+)X;xPlSPyf~?Fd`( zi+h$l!WF_n1R7+7K^j6=s$SLo$Sn6W2)lq19uVffyu(<-5K~ciiuebP{Sa*!W7$#| zBajC{k%$k6J}`bp_B=YzHRD6LPmVjHu!O+Q;iM9fbrRSrI|5r86pWo=5=MYe?z1S# zH3f#3Sm*QwDcdypjPVrtWns3F7IHy$1nprdgG^c@DYd?cwqrfDe;%t&;M`P#Fk~K4 z9A^MixD^IJ#>NVSP&S{pAmkNruK3y8S7Y;C2Lk1CGUr{8JzCDUD8SFWZ@FqgF9AJ4?d4q+4%N zB3qCz_&%+Oa=0$M|q1vLp0&j}$1QY_Hj;Jszl|!a?{dW53#;texQF?xe1izmk z69__a5Qn2m2P*ObYr=~KXlGIrjJBur1=sxWMcIYJmVB@uh`CO{i$dM)_9m(K`(}w# zbz?RXa7{LZuV25(=~csH4yWFJzB+U~uTZ?ga7z)d;)c2`&~R6!os}-(R_B%Li$vJewmxzOUe=(k`hYkxtb4)(s-JSAY&U<^jV$G{>aZ%hP7R@OQnn2r*`8n z)PRljPsoAo-ysJ%Q)d@b6FFBK8&MBqQ-{B`JO2|tD9B0!GooZYS~pdzRiM`7hiWxZ zdm&PRqVm#umpx_|8)C1?j{AlEno#ZwUG|g=K_&aam3I7fGg{WHCK8aK+ z6gaat+%)69R^u(OcNQm|2k~BS?aRAI!2{O`s$8pfxY$GYYI$p)Ab8b2#wy z)o#5Ya!}#ZkP)K|CByB&MeZOJ=62wU$7jHBokbD3`l5b1SJMy((2BB5mDSeb<{8j3=DiF7&Ds0Xlp6 zv@@7M6_4g?t~hDrGT$}-oOU?J7Ta<)Rc?(GY}iQAYy4bH`7?UQ8#2IH*GbDW6MGMv z{?cAu0f2@{_R;IBq_Wx!Ga%HYMJgLn^u@PYw@2pkr}{BN@j_Y_ zP&-nPARE!7?A79i_PRl3T_788kArs?g;#SvF+V7Q<+;%6QgU@QvG|Y^V{4AyBq(2~sh|HVfb&(FYLacl#%NealqKEcK&zI40Br zO0hdbd-Ot*Ws)T~M{6|XI8&18wy_Pi);(&x$5*mOjF$h5@B#Gbtu@9`-$0G< ziX)sTmN^P*k_D~c9m!9L=+o}P^Rv^4;7?*=hE4*c5wWEbqlt-ufywUO)3hWFog6I~7BrI-KRF}4?hZdC zbZKj3|B+4TP| zG07NudHzi^|EHYeA1zOVq$R{0&yF#_H6KVx0zyC_Xb>lI0w>TzD8YO}0zm?b^8}mz zb2Ij>Er7lTE9)kUE>s@>;oq{>1i>UCf)|3;)~HuSRZUe=OU=!APo=h3lONq*&l^+X zVP7ZSBa@lzH!o(#Q{EjjKQE(-02Ii|Ssd6W91hjM)L8@$*~m5=JO1XJgox-IdyqP# zO>c4><*ewWbLMrxsScXyQPOo0{1a&xHsEyXwd;_W9Q>H|w>aS06QLkK!%e6^b z*^WiX>U*9t+EYRo351|49CtoC6H~6Anlm|G-!=@T=p45~m4WcxPS9KnBGALhB= zo!EhI7wmRHU8^{t8$0I&yimXX4uHQe4NbT++^pKgqkAFSbFT~Jk0t3NEJqYJM|!ks z@|9%BU3w-L>{0V(frPVYx*-*eRlAT17-?L8d3yi`#XqRm?gQ4rQ>hJ|z^C$%=o^5$ zbnVA&?e+JSYmKa;QDlcOJ6FGjNCk%Cn?6E@!aKT83y^nuOA6rMzqbU<*}K;S&2ip$ z{Hz21mB0HSw;KA;_EQ4)nU37vI1CN<*_PFqKkgKoh21*WJ0<*b{;{#Ur!g%MkufzcbJ3Nh+u^LwZYl^N9BP_V}Jc(Omc3^0v9v zce#=)UXz-=Bk($e0kTTFskI)8P}%sY&C)DTB1=+weE?5aCnG$xBmA;*0|z3+)vG<6 z?ju|Jfn>r5uw{v)J_jQq6>OdDjmXL@je`ZKj>OLKW1WXk zt6j_%+S~Vtdb5hh+qh##_slsoOv|o`IFrYY{~>f-y)k%;#NN^bAezp8R|*eyVj<+{ zY~Vi1(3AE0>Waq<@@cS|fQYoLdJBL164DzRLCg{rr5(Gk@1Gt*2TXGyhLb2AA6>DPhtCjRLNKMaN11zBA8)E&nr4A}gqgQ}ohTHV*Vk1)4`o5hl>x7ae zq;vseQCKhTcM1qEtv_wH;ei;o9W^7$(*SG0(4=hN|qFH=ZydSzAt74Y@LYvw>EqLRf^6=2T@zTU#N z6n5?_uQob(pj`%McsVNSprAFHP2F)ro0WE8 z3F{@S0}W;otQMlVpQe^O$*Blr0kM_0cBkPDTH<#*3GK0Hhq%=i^_dCNlNqa5#-?re zErBVst5Byj>}_Xsh*m5 zE)R1G!vQ$2;HW=gBwMarZ4d_qG);hGjf)F~jG%%3xe>qm*;PH@`EnsxDv_necM*T> z&5Tf`^p#M3BKZX?yeHQaq58r0IPPjwb<0xiN`5j!4!T3oDc_$wcxG&M5A_{4qd9Rd zv=1+W=~T5Nw!W&k1Zz<`+TMF%slFoZkjh6h;-c~myo~x7@oEqC?CPt2Vt3#4_EfyW ze+mr2-w~ri*D4If-sQl3iVVr8o5RGYGGeNtmc%*Eq2%tHzw%*vb+Xb}T3hYY1gboy zo{LMUtP~5(CfDqrywXP?p*tKwLrr5p=u&-WI!cVdq9a z8P;&ikeyqHD!=)W66HDsV!q|;dns#9U>5`GDb{Q zY)W~6&{pgbDVuN(TBw=~SeK6?8mo8!`c?Nw-X=iR^wO(v0Mb|7B75is=k(90aKQ1a z?ZG>0SYMa-wrxzx*e$E zk=y|t%HsH7c!Xfmbs$1V3a4g|c<8#I;(?VNUUC7CK*a++GlbCv`Ta8ZD#5^xht=vH zP~CFo>EEG?Xfq`bC6k6hEUNwGZKM>1f;;dsXoBnXPyqOHVp$4vsD@9AVefP!vtA)CNux zyVV;HY;KT)OA_g+<$ZkRy+pTsKGBQpXe6Vj%gB4VXuBUOnPy9epM;C#Jh|IybMnp!6yV2Qk<|(tRwASLtn-Tn%Zmi zPQoiJ!iTRVF)-oG6FZwmKLU)b=R{OeZ{fer1Zr>eJEr>jjvKCP`7e!E+Sk2-s)11F zS=zMMwal2b|52G32)UtB2H$b4G-MXdZGTo+T@b>)F)OfxXl#B^9;|JwsW$ssn0%=; z?Gu0&$DF88W!gX!y&-cS$W<^YRdd2}k7+2r6XuUru0DpXat8lWRpPCO_)xR@(~rC| zoP{)uTLQ)!q)S}Mat zQZt!`vMzzNNVUEYCsK-g=fgx&os$Yx4iR9l1)%<^BW?MDv1(_eaXZZNi?H}aXZ4Y3wMDFbK%`t=HgG&fAkF*aU>;;03SPM99ad z`HN6$+V zrsRpOb7Y&l(<(o8>hDxdwkn&X7bZ16t$c}{4Cp?gy9v%9enNgusoO$ZuT-WvmZYqt zkEEoIq?DvBNlCxrsCz5VNth%E5*ruvN|fZ`C=;ZiWOB<&<_{Mj-PNijGRGBcL#nY> zzNJ|OiAN+z*MfRPW|KbwqYp%B`B^t-1cfBs74Hl&dZ3ZwtVCo;_dx(d`&==|n52~y z8TWY0NZPkd4%0{KRy} zkYbW5%a5fvKs;LHgIOTK87dlN>S|^&Qj#n>c;Ah>Re6Oen4BKAf?m&qFI3MuKUc)U_H-P;?Bw43CmPZcDEnit^Q{*m~ zOrHww4IN4%1VxnEo~9 zyOOQri4eCdP}!iMTeKdMDBKGSyLJVnOBEZxq|&F)hdL7kmJjVB6vYvZ6UZhZbD74Go6XwOA4v-!MvOt2)6Qv30DD%-!kwnR)s3HS_L3zQTxQ-tt zG>MiS5rcfTzzHva7-AkPVUB-jm0AtcbYYgr9n}!GoIrOWU=aj0LtX+*?WdW{%Mfaf z%`*`j;8mS5eL-Y1cJB)cbl7vmh_9=Irz^klhvp`X_X=~nlN(>d?3HeZ56IMHv!t;b z+h=QFL69bH@L)+18=JQJ_^}Sw$f|HX*llY z3&Ocw!BoBEHeUJ1#vTOq!q&uWvB?=?b-JLxg_)}}c%4>dy1X{Ci#3Own2bz13Jx_kqU1Ho?TG<*}Kggau;%Yx~F;5ZF_ zh^P^J+o#?t5m&D6Wgy&~X+ZVD@BbXa^3UZmv$9bF;P7WFO;UQl+^+;z=i#+E8`1@r zMkAX4Km{wo2KgyL)oRO4awBT0fkmQ)5(qvDw(r7N^d@1dU|FgEHO{Tb`!$s`m12G| zE+&7$Dz0v@CE)~J#r{4Z(Akz3d*Gr%lVe!`3xoDr(`h?y=sXe4zpM&tJn-}j_I;15Q+V{ZTM1ZWtV8JpJ+ zBHbq~MI)y$>x8i$q^{NboJS#M!?@TosB{lRBqqbI&=DbhfR2(L7{VsA?2jXZ`Rgsk z{8cQYyHB@qGIRC4r%LljcK+S|JlDVp!Hr?hEV@=0$<3t~hiJ1u=*A*Qn`AEqF6Okw z>Bm;g!(Z7TM(oF|ENi_b>-UI=E8~>`k1pkhl)Po2d7!CcB7z%LK6qqrl8MmB1C0_ zW3>55DBCt)GJY+Dr~y_qqE>_b&(gYJ3>AJN`i+owolA#f2~!$-WYI51U-AWa%f~+n z-3`FmbSc?v*D7vJEgD|53pd8^Uszv!l07xR)zm4~laJtO-??JH1m^Kie}@=hLZ^Kr zEZ{Gn!b`pj<0@#<0D~;JGyBGh?a-cea2q()!9X2^cc-51ES-9j`rZ)78L;;#I%WVj zE2-Et%vxq5yUIrK_$k3kA2v{}NV%@iFzdn0#L;t?u%!#zj?vsm)nf53a|+Rc-zBN;Da zDa?SjPJrLs3$qFZZHQeoedWMs6DmFGPZvlX=0v*XV>VvPaq;W#)#D!4#mqfa0DwQt z|6h4#idp_QhFSmFglF4v)efa1ATmT0VOyr_!$21BuD~ir&1YbBJ9g$~5o+U}`DO74 z{!09co)#v{GWRcI`Rz4Y5DLa&8z$$Q%T4ELUgn33msEQIt5QskKqEXbv?T}G5hb`4 z*g{9)k@|Pfzfwg)LQH)ORNxxg29HxenLAORg2m-6U<=N*TV-k$u3@M(j2KFo_!t}5 za|mGvoh~My!K~B~nQ;4cQ<+;np>7@GlUDz)A#J&+(65kS>1+u8rZ~8HImMfJ5@KK+cAVh?aAEF{1pHcK8%xv8L3X$QAtpnj>*!%erbL>`|G7O?uRS z3G9d#OG&@0Juy28AHKke(#(E$a4Oaa6*FHz5mx{I^&|lBuKlaZ3Tkop>t8!NIugBBy|Jrp;R+DyKP(%5yz7mNc z5;7t<1Y9iSu_5mh00x!G0}+C7gc%fo^vzq1FpeV?PZ2)-VAXYlpRikX(MqEno1J9Y zaxMOFE56GAm46{OlWd|XDPn}y-QNDPdE;}!eS-Ja^5gf8*-Pj{YJ^`;>w&uR<`4+a z4%&%2Op7R+hUAEC5A7i?68Uv+N4-7p0dx%!2PzY}8exOM`8^q$cY6YZ4@I=jfI4i0 zAqpLo(}6wA8_!c}m;_=$^n5$ug<;ywP2P*3fM@_!$^_9?Zb*?a)@#Syc!+Ot@2Og? zf)P{bS`e2s;bf;KdHkp(xk5E&DY{&4rdUNno-C!x+7RKH=SDJwpz??ra=ai~Wsz-& z5z)mW_DLpu+L^76(Oevvkx-UWjC#<{Q#CI|QgveTRBVIt*3p2$WF9H<;t*IpEHe}* zyG78vmsOqaq*$;3ZhY2p-iALYsaaJ$w{wK|fINYJVj>LlH3QY) zL|QN=ouuRi`sVAvsdN~Dj|!ODn)83HU-v^BbzY=Gsa|H94R%n;B{e3D>Dh;uQcN>Q$nDgk!9Bpd|~_ z>s%sHb&4hhWyb78>n*f`nK?r6T}e{uGG|vgB<8iO6#YRZ$=-)-&)KKXp%Jaz6&)+W zwTsV7b^!MA4T*TL!sxC&07ke*8JTgvCBz_!&?bjD(dkc2p0BMY)8)>i68r-8Rs+`q*EU?wwwP$P&zPM&@Aes+`W262-Jhqc z%*^^KKn~o=Cs9+?j+9QEttS=QM%9W((82-M=nPL@3l&1(%tt5tw&LZqmG|Musexj< zno3*3Yj@G|l!yAVRfSdQoo8PN1AaJyFa&#;M|$Ex@4%0D9{{`^ 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 z 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�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ΠeMN=C~jQ7BcP&wRd$=Jc z^G%E>(-^MG5F8c4!HxymmE&iU5#y4Ww+Fa0_zH|MdXnyPBcJS)hidG^Kmv7)zR|m5 zZ?wMThp%seQG5r$n0^DfCM5g{IvmH#xR}(b(^yTp#%3wdDO+@Rz1!=ls4CJbZz99P zYf?RHqDhtkcrGVgPOhw{mPW~Qf;Ku$v&;)Kyf}p$oD~zPrK~8RvjVAigo7&_dos)8 zohMl)*yriKt8Esdofj%dz%XjkeswpBP;A+iDb;DNp%gVDs8iK!+)kt{iOw{<)pwGN zB$9xshSL|z&S<9ei{mP6T+*6216^e%!{wM~YBsG|v}M)Q3K6Q>I4H}~lg}bD9e*dS z%=VU(sSYpcug8kUIv+D7?kR7Cj8_7r)2pyY_~|C=ELB@g%a0x-;D80O1@HG3Tc z7#PH2Bcg+4RN`g&4Ulu*lb(_ltKjO{I4L_kY)}J(Me@_TjPCcE*~Rp`lJrlxk-NUP zx>1W`E)=caJ<^z(6bG-Ur^|A`3^}5$Hi&7r2;rU&Y-BD7^|57hCq|RXHdK6<4cZ(` z-{?m2qZ`Wxk7K!xvswtJJGPe=GOA%0#8nfxxV8s*hQ^Zs8j!j;I0orbT^77z8fa$K};GZG9kVjCHg@WFCAM5H1!u;b?6GA zU79H91!~Pl{fgNMsiylda39Aruf`uuSkt--0XCv|{p&W0VC>u*@yPq_B}=TF8_FHx zfhUdeelcn<;{U$%u}Z{m1Ml62jM^62~zOat#qQ}g@t-Ou=+j#>zJPqFJ=%DGr~Zl&mPcP-WazJgvRoYMbyJx zkuh;W+`~Zgk~fY|i9OoU*ygyZA?zA$DAC3lTa3tOLl;|FhOIj?%DdB7*YRo=kKWEhqM;PD0U4zU%iijM@Z5iUwZ139snUUrup}mhvBKkEXhwIlmMutQ$>$Z*pK7a$yv$ci3L|R_73JXQPBkPNI0Cu6W58tr-DZ z{{Sl%KyU#SF!XMhKvvLS$Q*((PJ|FoSES7I_uV~A@Ef9d zq)^!!uW-mGOYi{%H8?P-LyjoCl;SE>f6oHyoT&|c_5hSy3}1AXSdP-iA8D`l=_uD7 z@s}_v_KxxRR{?E+p#`C~&JxFr

^qARDF5NEyzvOiWKyx#y-p_wNdh8)<#K@qsu| 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

fDF`h{c4t-O#k^Yq-d9$ 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

    %?FT#ow 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
  1. E#C!OeasS9(rnnD0c&c`QM{Y5~At@TC1tGL` z+BamGK+{OX!$Z1~SJXQsJM4g(?UAbmTp1dZ7jnSOOu^N{Z zOJ5mM>?exjQ|y$_3cWpw-$bF)^up;02zQ={I6d6LmngWlpfP;BTXk!fI`Zh}iMw)jck^+nJiay- z?b3BUqu8th3azxD>mBzCAv?ChmBytQ14J6;YOnWUoVDe?CI5UjS5NSDE<+eE5Ph;7 zmDgOJS{us-mP&Q8Z-KK7R)3M-U!6D}9qfP`+S_BzFJ$zcnvV>_@aLC;j<~4|u+LJK z-8Bgmo3c#3RQZGEu&N!Ihw8e^1U&NCw+$^qVDVh;SD*-j(|OJWw{o8{O{DO5A0xJP~R40ikjs;X9l|qs9CAEzryK#77^MSaS7?ttM zd_QJw6*PU9`6=8IbTkUP*{+~0Hf!_51`IIGq_JoM1;0yquDC(KZPoU_KBD6o009emJr6 zXimMaPlhELm?NLPf_RWZGPI~R0Oeg5G@6x&8=GQhpdlHinF7z3N7A)MCh4{{{ui4@ z-}=99{(`35h4N|)Ajz222uZeaR+9|TNQV77NapE2iM6OqfMW7n=`Y;JC96Qo=!h2U zh(y$}0}EzHapjR8%48--)u~|v+Df2`*8S$8tTkAS2c>?G-8SzGX3+77oH|apN3ss~ zdGYR08y`P9P>#o`+izW)T-CMr%wNghUstALd|8Tr`kV(_0>|E?pqGNa+@Wk=)V9u% z>Ah>|452Kw`GkfX$adg3NC1VgW?1C5Sex3+`biKCu+u5V-Aqp};+VvNR4# z#gStWSFcD~T08~7!nxr)^xniY(zJ}5#!Z1G%KT2$O>=1EPc#}6$2?j^YY`9Wkb20r zHoY-Ll;22hV46N>#-P{ndxB;jxTD1t6!dISNZxH!G01Czhhm~)N}|y4S9v(2saw0H zpqQf<$sjEd?3KA^Yt}P5oz25Kr|Q7pTYY?Q+tfdz^-(&AAH+|aP_Vli`HH>=3%>KumvH%H&p9UU-rnHxWBJIUCPZK=p|P*>IgpzM3(V4o zU5qM7d_#|22@A-vIloR03ye(vlhc|wt2#PFvN>>1$IE7MWFS(5p(`JBPq7-rXF(#p zCb|A+!|h~sVx7G@Kzfd}4s@g6Dwl(g+5DqC4|J>S`Bd}B$Iatci>DmnA?T>6Y9l7 zkG}F0vlp4>#_El1Ys@$J(FfABpC_zz^D1$%w!O$(g|G$g95ppLZ{z%6T9(fEgjvpw zJvt!`n$PA=W-&$titEAB$#HdW^}*d=J@0iayu`o2uZ2;wPd!tgnx|4KQ6wmyv}DX| z2)tv@ir$vHG!j}5q}cfwl61tP}GPvv0MrZ7@0(;bJ{mgvzvM@k7XM8tvu)#4sr&@u7PpayzG3W~s_g+I16 z3bKWzUfT*7i3XR{(g3}3- zOKH@KeRResf6Zf_JNC=Vq@-Ak7mfhLYuGz8*AjOM&&scbW5S=1B4w({j)-LWG{LX!%>VA%0qvrb1P@7*RT`JJ5r>kgwFuO^#<}Kn^?m#0QsmiWe z1;mdlqg%FT{+wu(9atz;Qx(fi!ZGQ$pjbrb3-W(LZcnYo6?+4(Z@9Jr{{R;@v(10pQg1YUKZ_Smsf2aPor>ac9fP zz6?d?Fm%2leymG-!+1+e=c=X}?8U2cIvI@1JR8FvOkVhsRLgkj=c5Iv;z55u5zzm| zgB-kfkK^4!r1`^CI8?f0h=|9Uhvt)RD}?*ekM9IK_y%I<)1*B6W+aC@e`Xt50Qbt;T%tw3Z=;vjKhk1_mxkTAbcm& zNRuuVwS>DAqNE}``N>Y_IJpHh$1x2P)c@HMm#pt~OynA;vcMl|4zA=q{ zG?rdTmtIYpwl3%BYeWaz07=i;2IAkcihoxYyu+nml~eGQS7QHE6y1bsbkMap&7RAO zkG+;Y71Ao$((_Oibx(sMU9-Mrf1>sH7S1jou?QyjUo5=Ek^Jc z+v@`@uFx04=bLJ?SS_E$^}pLQQM5pRa0KEJIE!1**tw7I!Iw4o2v$dGF~a)wE17t_ zJ7zo@j+l`x>|0lR+~G9v)b>JHR$AvR;p;P-(9S-&!#v#^jJ$#oN%UAG9JvEWgqA;{ z?B95@5(Ewg*Igl#CsBQ?d^lN^jU7nG50G=pA>k99Qah92Zk_Tx?wlO%c3Mq0+H*(gz;03tNrPxfQ%k0|A z0q_rp#GuiO*5h3hmDwIx262$SUo6)5t-F&Y~FDs#zXfEKBdW<^W9K6MAV6wFJQ za*D}g@=27q>uyAt>s9i>X8Pq$h>C7D{^(cEvS-r8Q$hUL=KDuEw&uSSLGO`WoRTS= zEi+Ls>bSrCANHYN2Ht3Ji=oa4%wM>o4|~nODn+lih)y4w(raWt76HzDGHp*Nayuy* z+F#&P8DIr2VArT71p%R|8>V{7E6^Bvc65B|d&l|LTDXdwUcn5c`v8*xtRUh7wy>=l*0-Q;UAy_XvASyr6gEl6xS3t|7J zSJ0Uuoz)jk6X{~hH~GuF&F4U|8*8tf6o?xu(y1M1_4TQ~&8=%w42R|(aH4VKLmQ2` zvP)O;SHTH;3CW$rnm%#9vox1go85SmqfZ;N4ILv`H|mp{(y1BTX6?toIeTl)Q5DXYc%o7%FDtgo7ruT-w&j$fG;hUx6GhK&k7 z5@A3ZoX}=}J>KE7eu-3Ep`#AF0AY-QL8~y?ONM|b!9?((k?#xqPwPzbKowN~l_*pl5ON7c3F+YusLlhsrYDiCk) zI+nh8dXT$mJN=0z+eL}I)$;qAj_;Onu5KsvI)5u9DsXOMaM&kgvK-gLYswkmE06I& ztlhWmjrG$hRQq1^l8VGrK2VoR^WNapuOuzbm)4McGMiQmap)<1_qr#5yFTHccg!606FZJ;bii*)!Fs(>gfSw=g*Y8c^L`1NMB;)BO4M<){1V|fDkb3zvWQWnq8xB zRhR|8W?|0I>@N)$Zzpt$%4X;}I@hY(LQiI>adfeq7ASfzmXp-yDhv#%{cqga3qC;c0RaFO0sk-H&iLQB z$4E;8Gr))Jp1({we`{=Zh7wlm5$RCrKo-=M>8*Qqz*tLcC0(uT7L)Y{^5y-IF@&S= z$$&B1GBV9}HG25EgW3hSAORAby(j=ZLp(F3Pd;S9b0ljOYtew_^PIwEQRK+3o0)** z5_29#%*~rjyakvt^-EMM_q*vdXcnFlQqcu#fG={8C{3nQW0tYa;bW8j`hx|jw5ED} z?nG(3!{FmS?W8Bv_z|`-u9*cDRsy?LZ z?_wYfaCI}Mx5Y{90nChKM|7{CxU_gPR2ntAJVjlT>FzYv-y~8Ev5Mrvm>Dbj7rxhZA5`$wN4XXFq;u7@+k#gqMZTWDQpO}lRF zz+_?}HYxyIaUw`m;ilos;w$E=AP!^-PfDrhO^fa#zrc7to+jC}>~xY2J$B7k;9)BQ zbNyKI9wB|bEeimtwm84g(nIW;Vsr_Z+^M_Oic-^jWKw7Sg?hos>7l|XOX>A*qe%IL zU-SH9kk9{Ul)wLbMv=9VHg|M1w=orVb27GZG`F>pvo-%8hoe|&S5Z+F{s$J&rcGzQ zBn%&=FfZ5)V$T+woX~6o9bM7BfQ~0fu+4#kZD;H4us_CS&^!hF`FS=%SP5iK<+hzt z9)q&;1=;8V24H-N)`x)0#Y52FuLzx`A8VY~XOdPe7iaqenKGyK=jW!|3wjxA)lpj0 za^VySiP`u<82;0&<p2v^RM#`XzcoF%Ui%&=l2G?FYE zm1ZXBi$!j(QAMIOY#c3ns_olQVMrt`$wZ{H`#1;FDil|Nj%w7A3r6@N)m`vv6>&uB z8H8It2^~s)H%7dzvxd3j#KFu*a zN=Klz)=9bdA&_x28wBd87o(=d*ul_Zt|bmLXY&#G6#bV_wNac9xc>1L#QqP@Bl~{} z^}hwF?(T)PYX5@^;J|O^9#JGD|A#sf5mcw)NDP%`yo6jX091h)jv^_6UeZon00@oV zg+M|)k<@yl$a-PLg|1XOv&4Mqq=9-98Ra7)QO(|?NY#U_K67V!p351NE8D%3y`B5v z5iiTzcBd=dooP379klmp!!!r5PIc;2{#>*hZ}WR?e-xLG^Q&zz_S>gxJhlk{q|4fq zFd--YDa)^xW`J6EljDTK`t*|!0XG~M@ONL0&}OK*5a>8Gn?KLhjv14Km4Q{NQz=90 zDH|7da}kpR2MZT=QPJUR3IhiZGV$VWFWk)NsOYb{udP!MI}6$1eE!|t(A=H5M^sFr z{D#BnU$>@KCdRd0>x*;A`!pLDvPC9s4T;F<3vCs~box%_!3#_YGP*N{%c2~ybEmfG zqT?RB-LgVQ_ANY8wvVx?c*60Tq!iZY7M}k0D05J(_$_9 zfgKMGQE(<3;9LnOIyL#>(P@ z3*cEJQZcHik|sy>Pk$IS0<`3f1HhaXmrTT>MSH2`r1zI#5({_?%K_> zIXPBUuS6poxl>{~t5l>)n=wQX)GM>+qZ5p8qh{KPHd5!L63mYX++`$4$TF5n*nOv` zS{K=pR!R?3MV%t*NDEhzbg`BfnCnSESm)l_c&m*ORrvp2hGEfi7=qq6$Uz*99Lcgs z6COEiI1p2%>!+oV-j9A3bTAlBZ&0c4ZD=_7E1MbMwW)Ndf=tsCSN#}u^lejmroX9Z zu~{?Cd_{PtT~Sxg**?%B080GU(SH2A5VwU?C8tj7gmXk5go; zLYW%d8%7W`P}p#CG%PN9ibs+)iNCav+K5CbFKN%wnr}l)r=9bPut~0xv$MG8B))EN zpFR~uuK=xtC6i(+mPo3PGA=H9l?bd;l@!k+Bs^5juQ%0<7YMjE>pYYLkaQ5G-25#g zn2j2Vj{Hz!wmH$NTkq1OGsq@jb8oyY@Cil|BqK1B3zAWECzoZfD?0&NH9pzDU?N7O zgz@HuL(3(oT#I>5dfF5(+eE!c5!fbP($=8Z)G8(nNtVf=SP&6V57yKcew?wk*PcyI z#;K$+wZ78QG&{w)MA~fSt^Wq%xrFDkh8~hmtV^nd5FBS$9gk^dgS#v*!YHlMQKz6P zc4a!FWRdW$bd``)r*;Uf1aD<+?W&=f)aPVIi~{e>$8+AkrJ z_~_9gd${*mZN%EJBb6cHvQAQS=wtOvX#ss&bs;f>!_pp@z{k3&4mA@r1M0#KVzFju$SS&~ zkTpSTOnau7GvUs~b>GUHINbUMQKlN-Kf4n0h`M^u#~wjleWnIsz2dLKr)r{OElE=) zNrypl-f~BaLDZe-d`Jt=d_sy$!t`Xj3qwJ3NI^4p2LFdQV^ zr30*|uRSQ51m+B8s#kCt-KECqs;^!rSZ&@~_q6Z|)I_t4pgo3D`D&$8G7G*qBwdyB z)2hAjNK~YV!;YQK9yy|^E?kSM@aN@1*TXgbH1K7IXwCH0vr5!&U#ewyhqBcO4N5CR zdS9xNm*043`c~ks@_f{;;yvnDPsE~}GIO59FmZ))k=)=SC#i1@VN|c&d~C0hJ+^Q0 zL9`U3ln<oU zjZ_Q$I!Yf)N+&5R!#Yl%p@AvDsxVGs2tdx>GAJpV5K>~bRDje*niFUp`9``E>@X^M#)JFOh)ED3LOHHg6kHd%;+* zz6f+6Z${hBeW<=Pv&~sxdb>CekHs&sG9A_{1`W<>``}jFfvK?oYL*3cOD% z!5;1YA^>{1v>So|I`d;*)(IBWNw4(dNWlB3c~80Ck0!G%MVfEGNq@k*a)vEcTIxKW zHWWumq`>U7m*vqT@QkAXZ!6*g?7r?Ef+KTgC>pPajqbqd$fhm0x1M}gvmw7(VE#wL z45)nz(^3!q2%h0Ep>$KYls~O5=ynKahhXN}fz@CbeK=Nw@_y;Ps2}$AAe5dN+djb; zMY~FI>$;YI;#)pV6bw3HBhEcSMFRNt8Cjk_nFP(tk@6QmKCm3<2&NISNqt>V9Ydn@$w2nLPApJ z7ujmMlDF*Hf1@1lvfeU38yg*G?z?$GM&;>d-c`2K+vj!QT3TP=rW1yP2&E z;yBSrQ(U3wo$yBds4b|-UF-~l3l~9czGf3XsZE5s|7o2PqANm?^imeKt}91o1==t( zj<@`jT$j*!j!b-#0!kayuP9oWOGI=K3*Y_Joay}+Q5hsp=&9|4>{}`4TUMlj+ni_L zs*j=;JiFY=nI-inI3dn;bWbMXKA`p^Q{;h{th=eG*aNLc8C91){}W3pUD$l(+ESs> z`!fpE!46zOm%95453l|6Csb^_qGLnu5w^ z@=~xakg&%}I^EgZvx?}wa&s*e4x|-UNDfIuw_`UKrM!=1HGLltUZV_H`GF3I$dJ1Q zVaWsMmgH!3C`S_UCitSGWzJ9>9~hYKT2oK^z1dMDS!LHS-F_o--EnA&Fw2YC-LD8q z&AN^gILdxM9&qt4oomOydZv$9LAkaDiEl3aS+56dIJqwi)gJOMH#%OE^;L_!DI1s_ z!4DqxG)kL|_%XOP_g-r`9-62_^<5ZP4Ylw_y^_NFo@J=Dh;BN9NXZ{vUU`hY!ZprE~i9Iv6 zC?iJAp*dPrS@LK(j58&RanrCLXzT<)98~)0p&sOehVm8j!7X_0BJ%P!_agh@SS=6c zP8D@o4v;+LP_VO*t?_ohYkZ6F@^;7TIXz=P&tvJkS@}$D6__0dng!y}2JC2Yp@Np9 z`igkEf|=xbO!i=H2{8S{o+WI5O_4bjp46;OS^}9B;@^Dbl=xcWYPgMkWv|71;`~G| zzLAcN>`b|1j^6odV{Z#GHG4`K9R}>lAoNAKqu`v3RI2Kc8KD(V#JC4|gP8~|EfV1C z&Rw51%{py-$~Me@|F0Q#3$2_ptuuqNk{ z28{HOOSoz#3(Xods$JMrmrBk+0MVo!9M2D-dA#Vte2wNbxOE&~#tN=E=P`XznV@-{ zUvMT}g(fxJPag1JiuBkwn`>|NVYB+o@thzu%MUcOGk2OQIN-~`GwItRT6KEnPmK9mvOH+|`Dk;Q7_%gFS>zUOR_ z^rdeayM=~-e37bfXhuvfP(y$?og{a^^jlGrMmFP|ixUXgpb z!hj)gQ+v%OKVa4aZXtWq@U+bgjm@^sJ&9*kzhN=er@VKMMu1Rc>dBLs*P8M9EdRJAend%X^UM1c`7*BxI zTb0*aog1~;gYFE6X^1V-Z}a28pI5^0m_^>sK6*BSi&EApc)_}1;trMhcyKfeMk7D+ z<)u|rim{>)w=Uw(UXs$*Cfk>k$Sz&xm3cz~Q}mABmzCO}(^G<68n#?}xw72i`g@rA zDcaWM93-h3+NN#rM=hJD4@U#G&LOPR7BT0fEM&dkf&YFeMZXSnrXD4#QCX@U>||Y= zy3P|~1d;%Qi2A#Tfm$xgKRpPsGte`_gpjAWl4!OmureI%Of+qc@)-7hI`fs?%`E`9 zJCQ1sEZi$9G(36!Tjmh(sr6r44AERK+d{96VEVu+PO0!UGoRB9+2?|62F)u zZVEy-OPpYhx7ymPU z_Y+VrQ|5Q>DTgWXw(5;Cr*e(-wRq;sT9urNUIol|>gdlC+(i z&6<{m3AWRbQl}1BF312@7=DNo05Ciz@AFd_EiJ+i59ji1rvv zn_|pHq(BqKL>I%cnPuZsk*l`!nUU3mWtlXNic2=b6{D@J8$MK~g!49I#u8x|u{!Dn zqkcq6oU7NKn=Gy0V9X=sddjLNzD ziQ%Zfv{RKLOeUPXmdIju0H;dFBCpyVyiaYAt%l#61nvQZ(8 z{H6={Law#eqOqawbS8~wW}nkjRmf}WTxqLtClfk}svVV;LC)PCZ&H5}mmd!OlfA`; zGS?N@bZ3$mR2IgDEmjQ@Iub^x2W$zR{<|gQqo5fqL3+gvVuFIIqPRtOa?1UTG(-oW!>%!H=HZv^lmw*) zi@*d2lS0g4m@p48ZIQ}@s>R#O*J)s*{qmuw+)VSnfBl*7sTGKM)@t+LE@xEq6lA51Av2rk%y>G+wO z+6lj?m-^rJ+!z$))|K*_qAA+@I-zbrG?s#(#EI|@3TQq!5*wgXp%Y znJ+t_8@*)h`%f027Df}jwvGF#7@BM}!I&&HC1u70d-N*c85osQb06-GEn1WP#Jn#N zi_zI=S!VQ0d(3EG8?4N>RUU@d=Q@>stu`d7wyqcox0FZotgEsW6;9ZXbhk)oueYz zLq?5Xh&X@1(T*-5a6a$kae&|2Vm9v~aOlwLfzh0=5bTL^mh2P5RwLXR!$`d(M)4xe z21=cw_nA0#LT4}7{btYE2@4={SM6zf$__aZ3f~f9P7fzJKZJ~gnD;4gh~6S%PWLMb ze`H1@?_N0v-ZEl*ytGGsz5-)1?_-tS0CwT;>6G2jf2j|2g}*Yxe9`Wu5q1&p@c_GE zekl$<34KueHt%^Ll`;Bq4^jcUkobz_co94RZWW9PDTS6m?BIShhh%};&}0?M{sNF4 zU4s0O`F-9&A@oA-Z5zDW)PFjDvHN`vANhP`3A_s{f!_Ho0J*{M!tC)de#TXKi>>s; z)~Z3G?Ahm{-diK|qTXX6^cKq<6IKXUf$tILK`QooOKcCxW2iVtIX!aWpE)}P zG5W4T3}ovDY^9UU;J^j(jWx&lQppGNd-?y^9GL+>Kg_ynRHq--Dhwti$GF7htYhXJ zN0YlYJzGOnG+%S?IJ)uk+%hz03~HAiALy&DY+6;BK8;T0TuzR-!H8 zx(<(<_8?U8Rrc&vO4GGE3|qSaQ+J_=Z$&31W&_W))u7gnax<-teRKmtO-aIpo1p!K zykDGNVcqjz=!lhc0G5^+&UAUH)G6N@Ripg&!sZ@`7aMq*)2R5fjtkQ*#@8zLrME|_ zxm7y`EY}pD%J#r=q+uai&0Pw{oW{E6+!oYi^=eyRmnv^}L2{Ja;Bv->!kRkb=m~6Y z3o+F~U1UI&VnZu2Rq#E^)Nho3Z7*f#z2J_x(LLJbIu^jYmJN%Hcx-TJs@_;>vy;2g zvTLT_m4_~Jb(gs|^Fi!Vl%{FQRwl0-p5N3rz?07=cV7!yIDc|D=Rt=)m}`ux0EGWD zz*pnbL8Ll44rU(}dTqEI$FxKq$1^5DOnUzD$oi9DgacW_Sy=m#lua5i zs|WPhPQChA(B;nwaU6#xL2?@(7yw}5-tX4EF)k!F%y@eLGI-sO0%b8cCtelCJ_y>J z1K_r~9|O9Kz8}AO{Ul#w{iH4AEhpaVvMox@`mwd<3XP&v{IZZe_IHx|tt+tC(+$B? z(}8X953SveVU~A5VXOfSuMFfjF~uF>#yTR`y?MyHam@#H=DDNQ6dk@l9bs^3mQYjz zX=Qp;D!sn(liY9;_rSfzLP_Q3kkNK9oLp;iTinatyrOCi1``Lekr*hRlfo$0x@Eeo z8}lmBQ3+vDYX+=JCx-(fiqul#U2Cqgbi7P!?g`<7#8JH^-JGN!NtI#do7kPEgS_i~ zSKs22Pv-FlY;})h=k4Nyr&%AI7!jY*=T{h&&lJ+{P`Cpd4HmXV+F^%;h!YP#0fI7z zJ-CdggZ+~m{9XQFaXuj@`UszUJ&$nqT+cddtqYuUmLjmg>YulI-Lntxco~t8FQm2! z3bW4wo2w~T!{AMz&Fu%*nQX6<`o}gpQ3~bvbI@fMg4N>bDx5oL$}u{Y2w(AX#vmn* z7IM7WT*@el?eL!HQmsj}6%gJlA&V127JHbV6b5B{nGfDh@`W+S$fu6Uu%%Z|p^6py zh32TH`1l&bqDzc(Fp-Y%_!ce3h00tKg&r}Um5pQV*UFj0BmMmmM+-T9{_E^XoDp}D zvYdcV@8s5KUEErbn#TjXEn)TqQiv9WW5@l+wp4o?{V+{BcB)|28``Hx9*%(OqSsb~ znR&2#vY?`?Il%y$t^7Tb#kx0=MUl^I;y~l8OUZTHscx^G%i@C*J#9M@iYy@)5e7Oq zrl4%orHqHs`x&N+7(TL@vX4c|H)4yx{>F=tK~tqWV#;#+&W|Vye9ax=;1k2r?RI#! z$8f&5OY_u@RzuLrrV#Nhv7HU6noFWZ=sL^S#9k5lILUXPTH9jc!k8{~;jBx|dxS4~ zJXQZ+;D5z*uvjqIThvPgK(+ zfg;fPxs{W!vL^eLkDxJC8>%MS3z=&U1_IB9RPwG&Mjf*F=tuLhCr@}RO-LnGnTjhteja_!@Uw3isAUWi)KMCF&d z6tvz*-iZIU7b6dUd92%xLr>C7mTH~jLdN2BNMg=d&@(?-oGs4P63oEUWp#BQAL=os z_Js@l;S6J2hOqU@Ndq2N>J$ka|Dt&7HM<}gBu{?deJxrVcPYP4;xiY#5_8S80AtQ# zfbUlZ-Ui12FP!WHjlyCNg#ZprV}>700>l|drzNVMYKkE+N=je0hhUmWo0vLBA92PZ z%1ehd-Ckw>*j8W77q>GCF9|Uqx@8}j+}L^rmFBnYcMz)oX`${i?XrS;Hr|G8mE3An z+5-CAgw{Q1>rpR`8L?Tc_C%>SSqCa~S|gy>;s>`cPWbA4Y78}traJeBE6#{Rc~}YH z(Zl!l8+OXNJ_K6_v$;0hckJsCZ3%trL!0;%LTiltM8=rr&KgCpX5JBNw&)>qNmEHg zDOIlK!lP$i?0bMCUSiDN8596+#Zsd*@ewe@%QwbsYxi8D#VztJHjDl8)*9rWW89|R zv?%Wq!k2dk9)g_D%pZ(d02CMld&V_jDMK%)l$TASH3fkqtmpgp7Dzd0S2rL40C3R% z8-)Jvy{E}an>LGo;dvx+xIlo-`#~pY<}@WFrkmwxK{X&@f?CS_hM)`*trUq?TdrV= z1iq1Q_rg`(#7X}8!Q;!{ONXhGfdYyIh~;c^a5eIt8XYy;*6skY2V|N%71f6WLgT#W z8(`nko4p^*8Cm92C)1%Wr~Ay@V{^>(k)NmQz7X3U388=J&)hrkpZy_BnlyD#8V~&I zro5qq>h31K&~2Yl1EKy@QNW+dS-l*#x(*t01^g4YN&9N?V)gD{Hl~~Bj=`xDo&V`- zR?t(2FA#!r?~e>)K6_7(=;(7KHu@SCMAem{Rpjd4(}e>;xNsTDlKH2rf!yl+)5geA zb_2pEA2yt}=-(+pX^eq8D6o`+| z@?2b$PdkDbZagenz8kw4XYQz=u%c*}vF~rHzcpA3Rvq*ebKT@$I6>8O*U}lrE6VR- z5>71Y??kN%?hLJW#kvmnke&J+NuJF|LGd7J%zEN3&1o%%!Q3*;g?-{LxH1-MC+Rr3 zA645QO&cIbB+dNvGZlRz1yWW)wtBdbaG4@$?4hu5Y%7$QvV=lXDeTESv_g!h{UXRx zC3MC8D#%mDGu6^>_QC--Fktrlfpcgu`y3JDh1vzPbm3W~{i4Z2vAH8F8jhT_a=K(; zx5!lOe3Ri?yH{8^oaEMi>)xM7A_+u6lbza76#HR&P=;wFo)ChMG^@N&CwZ4_7uM=0 zW&VpfO4_cdSX;Rz!#fxg@{DRA>^}OXS5vl_)(rJO`C$4~gVIv57Qv*n8XC&JA;ng@ z{RWKoAqH~Ubi zbs?i~n2{Nz2dolnvC!e@gCH$)GO7j}0?RgZu)_zcb$^1_+EK3h^qu66iHynxiJWLn z=p|eI;YD;Rbw9ZNB{WDKH)?ob0D$iQD?;g@DAJfg#Gc2#tUjNS8N|}A66fU7`7Y04nRK)@eUA!iRlmNe z3E!+2)2`X~`Dth@Kug_lT=@!T__i^9MYe|L#aT+{skrQ}sa{eXR+QV@U#27Nd@cv_ z5omSW3n46I3%s{e;VyMS=Fc3>Er9|VMBtAtJKN&Ev#zP*<+X2l*|&X zS&C>jaVUh>Ufhu(G@b=k6AN7HcG30~cV30NG+Fk3XyLlwasnhn*_NZo4C-8#_}SrO zxpnnWj4!6`{B@qNaWEroGLbos)T69=Mn5`_90RRr0r?KW)IBr&2x${bPyLgd-cT5W zfU8G9mbpZ{11^OP)4T(l1&Vc;N!Q$>5rgSqQg%+T?Bxt?O|w&wLg<$6sTh2Tc5a^* zzr{Fra~evs56vLZ63sQ#hKhwGpiJ$8PsR{7xzz*Z$nPoL7lHq85RUnOTor9wM0t3gR6?k>?+w&yR1_NP_cANx3sKEa0enPpYmLAWG{^kb zy6Fx{7dq)LiXR|dmin}RTot$1#d%(mV>q)s z$kO9^igi@5L1bB^+rk?IH{h}Q7jby@izhOZUJGY}zY^Etvkn>{t-*^4)*(fg%~Cu2 z(=GJHmm59e)6*2r7Abz7^~h`w!t91FMqa#+%f!D8RH zL-^#7QmiLe>1*@_{yifV5`qC%=%VofCasC34?RE=8z6}Wkv^u>ILJxD_-ooohpv!* zmA-Y+sd&Cnx3F=(jd*ttzb6J1T6aEYCnE}?>MTWAL=?q%4e!x0u*6+R%p zDc(2MX9hky1QGj9PJ_ZRwM)Y8&(sO80gGv!VVaR=n{(8_C&0Jg70A9np3-YH@04qm zV$tiRU3^Et7dq;nEEoYQFV5Pun=XEb;?QO~u`;6EPd@>;R!{OC;k0h9a|DPtAF!=* zpKm`+_eOuz*4cPk---hZ!)!UY^yDE&j$)c;t-??0`T z{6EPmWNc+@s_*na4L6*VJDndPnF}Fm!K)D-vh5%0=4_ ziFday6iGIx7z<-Tz%xmQbv|RO=+y-}kLIz4kU%762^`p+xf0qKTzu@l{sR25EmR zR3<$#+HLz zG{rEY7xMD*@9z4#C@Zjk5CFgb7?YL2fF?LN5Cq~nw-k7s*)Yj^-$etK zD;qdvb&JMsf!|75^GZd1N(&&fU%6kwP(^h?bqmV<_Qpz&RqriTGtDlCtBEODCSXAC z7yGO8jr*?SP4;r?@8^^cfZ~uZH~Im8%^yJ?^pk#exDikK{y-o&Qun<_y^cRVa5gV{ zE^s$@dopk>Zg#1EW+DFmozCUv)BPKj?|TS>4Vp+vtVN(tM1ZU$r9r(%T~@Y7GTT*R zM~)~lg=RO+#2Gj-kxE_lN~f#cQ(>a7tnOaz*V@%!;y!5ME4=Nn(P@<5Ta)!dTV7qG zrLEZ$rossfe!h+IjukPG9X+I={Z%kwnkG&Q{EX6!^Pd22SYe6 zx{>Zh7k3Sw9O4h5r6g)7@co+>qi>u+Yl-~$Y?Fg^l_ylL*cjSGk+$04$2 z;)rbh)*5CQ^JB|Y2{{KPayT874dEw=D3}2`IvV;4vh}tSf;w7MFk-*Sr37p3lH%Pz z;iCG+q7^1F(fTn7X6HDHvj6jvBWSG^RFJtx+)jBMLN_~nX>((MQBv@|a7SiEA~fqc z7Z3lo(US8&emtq<>0jL`vvANA2Pb&r(G7g}B|*87xWBZ{i8B>par+uT($wiD>1-k5 zSo3z|FxD{ie`$-xq9kI7{Ohhmw4efFP+awGbm~$WBAUrj?V} z1s=fN+UDUF_LN@e4Z@D3Cdq-`&6$+vhZ4**i`u;m73-3bNZgr&6;P7JjQde>!WFT? zlLg9j3Oz>{l~cpyQ;NVPay6D#76uqk$AVjg$h8{iQK76JLJx!p*jPH*F=3IE5lMF} zd$<=`a+;GBU}dK1V1`zg?UzoUawO~4&&EnjsH7}mq@*vt{uGfCSM!(OLn4N}ve)bd z?>yqVSHj~0f{;4*f#VEc+Ae&a1(5ODI@J)VlC*@6y9W_eRXknlo zHmN{pp@JeynBl}P(x5q!mZ{Nh)-1dtnkh&_Fw^5ofZ1M?BQM59>~ zZ__bW8}9I}$SR{xzZ|W?R^vo;BC-`7gk^1GWp_x)#@bOo9$mTJHWF>Qy>>OCy8V`c z<=R=l9R1I8*F#*k8|On!o2^rkPOR6?dp|6=j(cl`_1#jlg<{XTX<;v^53Sq*ak2HE zr-?My^34d+(0A*}4J}1tOZ~!itzK#K!gqq7p5f?{KkuHYtx4!90V0WoU!@YgLG(XG z;3-)GZo}XGOp4gn?5(<3AH*CR9EVXZ7v?c7()GJ36Jq9|QQGqK$ zpasm_6y_T^v1z9$YqfVRT{@c{xykz7D^;fkX0<4j<6|ui70^u*xbH#U8G&{({pAd4 zQ$vbz=iXY7GBVQr5Et&X+QPO|JU!c28!Ss{7h?DJsryiZUc z!Rur4?wkzMc6`}sqzC3hO<73=KKCnl{EmxrvXuTj9}mv;XUdEVWa~2v-Rq=S&(#oy zkPD|)aj04502*Rv!%g{gq2+=Z`@HB>>geS=-8LnY>_alg)Jy*!~t6;toAyNT18k@l&zy02a&S7SGSiyLyNIlfR$& zh6iJK=ZhJE9yMYQgM{IQGsqGpkQ3s_ARveoXaeSFmlER4t|1OF6^KXAP979ulTU94FPU$_uFKA%M87t=2N38y zP`nSezamG*9hI8D@3FrOkAeyJ$IJ{Fn1!39ftfjse~K;h^~8)EMUYvEu?)2xlNLdc zrOKo(q<;{)BwQbp6XVLDF0_9!!0Ikx%#eG*>rbGJJ!&mt8o`VSy}}@hK~jhYgT^31 zeClzY`b}`jioUWPdxf2~*mj9&O-%q1F!scIp|vV?gIaN{OyDriT$o)#WBlZBVx! zx!V5Pp*Eoxj3zoH049m9)t8sjF9BAGt~IrX2$ssYwl|C=wFk5F8PXQg->lO$?r0m~ zmzwmRfo6MuM!hKtcqS`0O(St@y2v-DL>r{Gq`7H zZ%E3Ez{b#)zH=N|IQ_LLaIu)!O1*{&#R_`#$D;PV<=B=4C0>l4v=;FpvyBfKLZ!J{ z7b%K{jkocmP}=`4;;$6%SM+#4Yi_xN2ibsu3P$3S{Das6UL$MK&ri6Hd_m-J1^Twp{<$jlN6BHl^XYHz)PVKzb zq#2}=j2irbBPI{PpK5^Q9-adPUA7&YHKG?Dnj0DC*5Zy$#qH`I?E_8i0~U*$#mvv= zlI)CZ>Jq(TuR9nv zarh^01+9IKT^;+TI?1kib4L4nQU-ZM^a>)3mZP2MH>7G)xs(Ttq6#tWKTL^55lgi9 zmB|$G-BSEhe@oIxC{8ZhNQI~K#=3F6MAk5ppc0$DgQnkfvRzW$sIngjjlvkAjBCZ$ zEfroclR!(&10TEw0cdsi7Y}lrDp>3yBB@dBFi4MfT*G?u_$EHVsu4NBvU*B~c+Nw# zjPHXM@rmj(yULzWj&_{*2Z+Z$62S-jX@Y91_6`i?nj#!+JJ?sBP)6|?!Yf1b=ckP% zg@4#UeRlPs?~F}d!Ug}>PwBd$&kW4iU>CM|kL#XYBJvS|&=JVNcgv+6l!RW;Fn6HP z+GBx*b1?{6^~=>KSIn|Tp}gu9w4n_bY!~bxKQ5sXja|&+q38%!FdjNZ=LOoU!ZkEB zzD5wibPj9d*v(6&zDakq#Huyn=ws$u6zW%q?v*@3M-d47_@J9QDylJas7^bdbaV`L zHg2`wxUetd#Ndz~=Nqwwq3xm45z0QrvC6xDjykkeZvK|8L@m%XaUP=A-8C4#P{f&|OuSrj`nK}Q*RwuQ_S zN_4%1Jroby7P$sxK9M6iG1GF?8ealH1Y@j?PHJ8IWFWaJ8E6eU3<;IG87+%NuB21! zTPx@NK_h-I-cd729m=q3lw8?(G3;kEIa1G!5*X`R#8AeE0{r2rAw_@GvljLMjfW>z zL3v*E)Wt3+$|!D}<}*$&NHfT7hVe#$$IJwF)=+IpkVER?WE7lt)DWCFsmIf96+dna zMUv`$Ap4Y3s@N#|rIUwqYIh3<^ygl@oM~2F?P!zir$XQ)G6w1P4O3$I^t{fRjEQ?O z=KLc(i@gEIuzfR{jXd;+J#%4-c3>^}8h?(2)BLN8NS3Eba8#H7t$As?MDe_N*}8GL z<3_xO3WU7P1rhezJtyI9k5J}PD&^$0Rw-Sd;y7B+y$0B*Ou|DNC)If`w}D3{HTtmR zJynn1nQfrdYJmFKf?B1fU*Wj2OsQs&^4No!LU)uc3Cq6G0jY(8?U3LY^-9%dG;{*> zi@zP}SFYuttzmi!w~^fRibO^x;vPuoj*ZtsfLL3Cr!YZLw)SYtP}G5EjbsE1!SDno zBCSUiG#I;_+diSoJ~Evxf#Gn)a3l)ZBM&1Uv0$4v zfd=;9WR^qH25vvWhUID2+%KSFsKR7!GPxInjt00>%Go?A_mr<5yy%HPTGd>k(-Zhx zd0l>_Nw`iFwEGyx#@H%4^s(no9j%SI${mfdsXix!>xLcqqh0mSX{;^Wr1v+Q=R4dI zJKnF7p02VBoo56r9`@Ikdr^t#Yjy`N+imA2D&tcW>FW8J>g?&5PqVa|+CTDHu1UND z)m|Y2$FyYfKN0K`yJu?NF&4+SDMz-{Wvm$>%;ps{iD?(9<|Phodk$^AP30WYirso? z757up&C5*6yiqFBuM|C+)p6A|>>Tv=rIDL>tyy(L)fEaR4!2>#e{e;F^*Ir zmQ2i6Ofaivm^X;@Gjv+%@&(7jf4`-V()9Dqd=cVU7^$5hmi4w3X0c$+sjl*&yh({; zIN9x?7m!A?8SJ;xrLdEQMGn&BjEG`lp~y|YhWW{l=|E+CV0$f1DH1t3WxA}1qD>cX zY+@kGVxY!neULdR>igt{Q_4qzV=&)vn%l)uuA8*E(EXh>4Wv3uu{piD$jWQk z=^lK2QhlBYx5-nDmSOwlDkkm|yetW%JkhmC+|f?=8#BA=bm28I+b=4)EZ_swEoNI9 zgM>$q3ztjnyx@e3vM1U(v>$^+i#EP=L~)?GAY;A>bzU)~t45PheSCiT2DAQxW5ga~ z&~~UD<%}&Df5p0N~lgC0__sTh%v5mLjAL+bHyp&{NJayjj= zuHpPmdhU_s^o@4@0rG(JOQQWN*pc%$#i>jggi<-QoKp9}WP;Ryd{|#$)xD&qQc7DD zqr>CvvpL6O2z9_jJC^O_vq9P8>8DOVGJc4nDkq3k}IZf<7h6=pNT!gkZ5U3sph+L&0O7 z9|u@?nm;8Y6#oJ|N=3B4G-d>u8Lx5KQLY9xPvu!ZStD$6$v|ic(MqoLki!|&M#=O* z|5@uw&eX7!1I%+t0b33&Pm~+4wlcDaFeL$@matHlFaLB17Fqx-7*E$ScB~cMC>C#C z;3X$+)*PgEUw&gB;J4(F`=Y!XH~0%*p_j-M6Tdy(;K~Mae4zUv+xuWP#nL{|hdPDd zy)|ke@QsRgW+UCH#2w=(BuF@w;j*?!anqX1IutXy;*n;}Y0_S4cL#v{Oud)Mj zwF1WED<+@8IXh~XoDFWb@05u(P3LtS>e__ShgC8EOZSJ@^34_Vu!;q<*pV$#r_54Y zeJLMxZ@smyWb}ND*w8Lrrx#qm{5=Yn4wJGZAk@Mu69U|IV9f#``rQ%YKeua*eAIIfpV#G zd}1{Xb*AuZZlGVd`J1b%n4&LZv@We`9B+?y6z(2v!3!WDO`2sdb_7f)CjZ@ggt%bp z64Ik0)J2Jb1t7puiTLxlswpXo=Ge?Dh^XRqI-tsB`y_rZNG3o_6*ar4Q}14 zC#oWLQ2Y_&0tvm0$2`1l-XthGWeV8c2$*}pmzMY^e7t3#&XMNc{oTjt1M)R2H%BV8 zROVy*lu>;uhnso*Q&zy`mwepgja5w}k#{*w_XC}EvsKlrba6L&^~{P(3itQskGamz z(UW7Q?ATPlFpV3CZ<5=(n>vX&oJa=mkCMbhUy)6hsM78(_08qT=hCNMtJ&=c*wUw6 zYg;cCp2BV6_JL;Bz3>D+GL4SYqVqL4H^i@$z?UY)Cv88!u0;41xA;!rYxE0H;rE;w z?*RS1t12i@$qQR^uH0uZ<>CKz;14;|4(J;d0N^j%e~PKo{C6>R1!o&4b8BNkTN@K| zQ)dT#1FQc^YE`R3xoIui|HR^Ys&=j>P^l-ZHbhxjiSHy+ZSIrn#0N!zG|;uw8FKck zi?1#WSh#j~0#5GFBR&9NrzQy)>fpx-iDM?j1tkZI`wgkVZwQEiOK)~P+HM=^VzDxsUYkPA;Mp!H*f61ZT!hsI0{rBESaM2=*^Z8ZDB)v{!Ed8~jn0a+>Wa(>YSQxUJ+cdRK zWb8S6_9Jo|5hjV|9>#1L(F*A(ts_-JE`K=$$YmCgluAUcb>}3aV%5*hSW=2GbDMp+ zFi-1~Uy59b;*aR(qtICi9!ShjwU{U#c%Q3Lj~&a#XKhEL``61^)M`(4&c&8ksMUK7_>sgMO;UlFg0+D5gE zCR}e;J5gcA;zYrYls70e9?lPmeJ%&CY6`BqS6w?P1hiID8#zbcZjyp2T?XGujV=6>-IM>GllLiG&Rd! z1kqYY6Wby)Z63G4iC@L&nBZX)j4O6w=#Eu&`?;O0dP)uSUCAYdIyZFj}eB zE3Ew{`A>s-z-XE8Q2=>^wxFM}+BN%EgVxa3P4~F~0fFwA?`eb9FxIX1b;1b2Kx3ja z&{_2{)XnyV`O5=Ubt-!YGd~u*OKl1;q~;7YU6Q0)d~jLdze|3|)Pxv?exR0xYE@ok z>LNfjbu!0&F?*ZJ6_KI6q&${!Bk#D43^WEuWU9E?I#|pPkhlSa4V=0`PRQ*V^o8@N8M0Rv-Q8sW9dV`e!N4CZ1eM_d9C(xW0wg zBtu1J94`)Ywg+W%nr@$1}5wLWsK)b4u9RZN1}df3#Y-i$EUo9Ktg#d3J3L? z7+Qa83Mb*xHvq|Dvd8}-aRDb6O%HD+)GH7bV-Fyi=|_{+@}o^}6B;uXcmY=rrOj-^ zkWE($$O>1%zfNPYuZi0X?ot&4iKNQfRvxhPfIwEHO!Xjx9u<4s5xwtzeu^G^f=us6qQbt1XS{xd7n-)Uc zWvEBqWwFQAL2JKF+UM`WKdKG#QXSKUddI@|r9AQ!=%GCV6YwEB68*CkjtBJ~3UD*9 z3-ulxrwj4E3viRN+4*(lJ7P?db02{fb|3%{G8RQD*Lvcin z$dW=N5hfdkUqs;dnS{~zZBZXr0l-r*0mxQB0p!N_9-IVbcGL^`&WislSP&6}3rD8h*gWGna7Mi#qmOQIeo)}&apmg`+ru>7%*Y0ri5%6fW7Xh7m} zDuJXkz&mG|mxsly7%U5K!h0P5gJn$EjkhIQ3XRsJE8-3C&&97X>*sRBWP)+jvASRf@NGFM@lp%O^}E9Pjacz-3! z!}G|U%L%xD%+ZZ3OEHy~{Itw9!Q~EG51x3p0MZA|9y)~3pjD02RH9v_ z8LwCjX%3^hX9d-D84Tw+I<0RNr#O{E!n?rfJ*&s>WJk)o_2~Sey~B%x>&mQ1fxTnn zoq8lSq_--?t6%weaq88QxrBPJOg;RO{}E}4>~>6cac>r0%y(qt3!`cjiAHY%qEbf5!jPqH#40V7gtC~2 zbM=$_HOWp&s3OAg!U~XmYr<2;fHu3?3iO!iIY(QuBHJCloMM@vx*m zK#9%PG_$(_e@o+uObz|V%OrL)U)Z>FQoRb zGRa`$TEOYid%q6$D4EV*8QrBl5ep>sUeakC7p8S*=&I4%!x)zhu?BOy!0uzDmugWh%uvG};#vbdOB6{J%W8!gT78O{o+e0!a@Dn4L7Le`wgz4l7{kd@(S|WN z*|2<<4^(71jd^paSPx$6rymb_uHseXV>r(E(l=^(L@jJI9IK5itH_uO*YcUkO!+c7 zS|@&6;G$~U9gx)SU|trgIm98B;r^HR>>72MkBAjru`Kn~&C96Ohx+_Cx+0ksv0_JW z2Hdfsv3U|Ev-|tz&C2~RI|)BxnljnWO4@Vs1m`}0?495?St_cOPDvpWrOPJ4gl7tsthATHscU<}yy3qBn5p(&t-Y&r3TJ&FR}DguvK8ny{OJCv^8)2<$5*6=EQ z->ztAU5af{EXp37(=|)n{w#_+%2yM&h$o(D^R511TR1*-a@*`d5MwkFx8`&cm4U~1 zgar{cR5B^NT&`vwej}V}SuXXZ1r}Ta zrX5#7ehYg+{tF9CGj%oW97_uaTW962NRiU9vCug?V;O9#a28xmV}F|0r7^jbGb6ZN z{tT!yjwXQ5axP!yqm7k$@~!#u=qW*!>O?V2+VP!yZLAq|GlyJ)f8Auca>w3EkaK=> zI#uiAg*MtCh;ve2x=5f0=JW+RjnZtMtT#;H1<1=FX`Sx$p2;)8PNfckn$Ae~1Yej*$IBi&v@WAADTE_ERv?txJIVR-_tCYrUQPmzE@>4fL-%KSz5#>?drZp>ucsm@pZ#xdn#Y`+qI&l7`i@S6Sj+0_olnl?!T0P z2&zX>^^b_q|FKvN|G!g$lD>nfvD5!|GmS!4Om0gIb(RKW%POiA(F7FJz_l2pTD5U8 zhWM-{mU4{PoT_lq$B^_=A;@4vvA@OQWJcsJ0+>>oC>bF`!wtci(a5DRlB{Q-e*`jV zoFIa4n%aKbZ>J0Hu{QH_d9pok-A{8KcN@1kYrl@5X8*KF!GzS21&zRG2$;d<69f&^YT&)E6AO&|DBXfKiif6xS79MRM!B=)0>jnVV(_ zQ6$EaFvwdnTuuo+B2Qy$Rl=V~Xr$MBJ;fw3B1j8$dUO^*?k~?rT?;*?2!?ko?-aFo zPWzRxT6U=7&vE~S61H;2QcO>34EJn>yTROU=RT1q%s9=6D&t-s=AmVu{bH z`@q?hIsHV!DD`EE=WX(rLo_smgelrYlreB3u_UKTNKQT;uaa^Q>EF{B3TKQ*X$eE# zVopjsO8GbvB1jeEP?5n;$`UIcbx;v0$+>mgpr_<4(2GGqE~Ro9G(2|M0$G3Fu}b5> z9I5hRNS)vy&#c6xoYqzeNfAkC$+NCwP)t;z+4re!+~H0ZQxvXd&MuO$+>k&dR@PV~ zAKgU6kUg%F$2r7t^70uth}V#qLKxXa(4j_ylrGvt?Xy|RVo>8}03Cq{G2D{z(1Whg z`VC^=Om4JoOjueypm9QX)i|$WlLpp0RKi<`{KCHnF70GAr<{E+2p961BN6+IBc@?) z!)+)jmoGNsVD4F-i7MveBQMAOdL}P1B=@drNO@+q7W~i8pEbn@f92ZahMyW(M zY-d8*RrF?iQf0*v-_#-jWSH$S=|K4pnG|BvJp*5Wen_7Fd&?a76<`ua%M$3N&R8~^ z3dt2`I)WIXW>@>yRj_ZK2bSZ;Uutw>vG2rbqeoC{pJpVHm zR_Pz*yU6O0ui^W~OqliQ`{3)4s^j|#m{48L@7gT^8aadF-k?+zqn!~_iup408R$&{5Bd#3Ys9iDxpB|hTz<+^v@z@441?_wW!6i%oN`=tm}Ct9ts zd+S-<4o{Rb*Sn3b=eiKxXhB2XZV0o=XjVo_8ou;z-`mFG+8)`~Wjgqqv#9}SYhx}s zl*T(+pt_GI$|y*VZ>5|w>=}C_73K2tiZ3ag>)z!ZKJ9)}6&cvYl9NLkQyFXcM=JPu zC=JlP<_67iX>rMK)JUGeM)yhKnssYKpFvH9(?iArHOLOhaZz#AY6b?Gad43BqGFsW z8E@)dJ42gxTSGEa>0t*!;WqfGQ0yNvYVyR7uVsz$e|(pQ73Qd&{98Eu%ljP|g35QlbhKF}Z&zG=7wBKV0xvn9wqKIou({mu;HgkH*+Pw7e(I7v(`$;3rflT_1aR zH|W0djS{~$vCIyL$G;cpAr^)$YBlI9G0qqDAtVkDie0b(8P8qwn%=z;6;JcwAnK8u zmxI?l9;kS0-P5#Se7sdb6mvl5Z3mq zjFo}#xorb0J=Md=;=;Zo(|twu~GDn_O;*l5_*ew$j0y%myvjATqDF$0VHr$%|DlOJ^u zw2Ia<5VV~$5KBW@3;s+mf0RL3Fmn`rSD>i;PVxYIyDsvw)i^e<4&u zhB#l>f65s!^px4hw@}B0m@P-?{)$~ncp3}RRGli1L9%#$^ll*Zh%9{ut#ReOBHR}D;<|^iH3&&NLobi5AiR1JI>J1}pZk27sHEE`mJ^bECW#|lQ#MJPBAPQbknfhk{a#A%q@8wn(idR5Wei{(Af{V zi0X`dm^ib8GAz3l#^#O+$>BlkyGmd6@OWx5wRh6FF4I5%QW#gI)IZDF46rq1?-@*b zqruv>^fL5{jq%YYj6OG63v%6Gb+W&CpliJozWbv?{k1*$I^{=0OI!;J_w93&$moK2 zb&xt=rBq4bcsOd@KCdzr&EwUt=z``Cp5#pR(+cy_11%_zF?NLuY@}xEbXL$uhPuB!b-Lu?N?!D$w1gU(=xD2oN9Gp38jy0tRwa?v zDS1OqE*YxT@PwmW*gGYx7RI3FGEasdLLMMIb>n)tzwAop6vYMdKG1FAp2*zVY$ybB zXW|MArBJ##TGb|39y}{(w|!rdGnLQk7kiXc`6j>a`*=f4TxoYzS){dBUx7?MGw<)k z{`!vO7T=$meFa0&`B?eiW4=>gWAr9d`Zq2~pE%#+w(`(mUFi$zYOdG!2E=_(Xe_Np z$egImnuS?YgwD>JK~>5jig`?MpR%Bkr(M)CJxgbNph|ap_?IAWCYgo(;{A)AX%(lR z$o@l7JN_d@#ryBsnWN=@op4r#a#I>c`7vEL8azpm28ibi@Pi4Grc*!$Mxcbyn@E_0 z2M>#2&CI+S=;?Z;`IEccGPlBWB?)q`tVy7PK(-#%Vj#~~ucBGmtnBr)ZL#}e-F!OL z-QG#%3N(=FYci9?emcc_I<>|9u|pX9hfUKBIAmEyll&g>kM4B_$n^AL21vxIFp|7u zk6#}DdqfH`bu|vPrC@b5S~F{FOI%tLwMG*NUY($-B02kJv2*2l+WJ4d##|*1C$=U2V4lTdze#-X;ijyn zxpL$~7&#STeoR|Wu4zljIgz-SJA>SCzBz~wBRYeLuu4?Xgh@OAfvAqqOx2U>S&pGf zqtOSGdKp^q8sGH~<{WB4c#ey5X%BO^lx)r7K#6gOwB+zoU3abpY7vqNQw=i-()N5# zQ;o|AlW8DN#;F{2>6WGZp@z#+4|%aVPZsep0`ok|BI<>Qf-bTo7J`2Sw!Gy=l2)odmXPub_c(87ztK}CYlYj zB}@1p^62vL98iqWyd2{3i(|1(LXU>jb9gpsiA58pl{&ik7|RZ6AA2dur?e)2{d%HY zDXryIPXDCgW$A3#S|ek%t-r;H192_79I2$vcyOX6&kACsapu>w-p@!KuQo3 z_VF#(E`oZV_$z5P;N^A;XW{51ix5H>X%|zF?38||4RfWWCJRp?iDHh)hwH+oYncms zg=OYty%`B->MU*+;Z})}9vZ-QLG}7#4;$%Z4EJYEi=!3GKDK6NXffKjIK6B!qPL`&I%0T~ih1|ziC zC*~&5%yL?zk?*!rG`jPW>62M9qaE?Ma1g2uNUNfbI)rp#B*=_Ba~8VhIDaI>>K4Cp zF5$_u@bS|eUB-}zTE2_r_9LVHs7&_=+?d&YcEK9VjD;4sIPg-b^8z>#C43%asX*C& zi6LYsI%L9PJ(wD$Iauv}QGJR#0kX95x;T9bE=WN15Gi5stLE=FS zXe5lTwX!{_5OQcqbe@s95jvnuwPOm9(tS)2L;LCg_!>nz+||b2SW302xq&)pRtoe` zSu(WE?;eI=>3~BF>XrGjQ5|F|>b`Z3~N63tOkQ8rwHjew`{j>gQ zXkCLhhCx+~o)No9JWKmnJc^#-yT5}pyaR37`hNTJA-4=%H=<}Z#%;TBFs=++({})a zHX+>5v2XLyqhCfpEFsmq=Vnka12)lZejYggFGQVA)y#O zgLZwf;Gbc8SkSNZS4L~Yb*cNC(BIG)A>Tei_M+r9eJml@PgSfWoo`Ux;*#^M(GVh$s$HrYl3qQfl#kFB5b?g)1@{>8_#m_ZE! zsBR6WAnA*1UMaIt(#!46zmDZ;jZZ-dWG_sQK)$)>fDhgR=Oxzwv zZe{(fV6i@H1bMc{5_Q}LYY5GXd}YhvRt`s;bY|;p^c{r{*Qbbly@>oSA91fPHQ>lD zFYB^zQm@DdWu03{WooQ$%DbK@Iv#m+M9h(%>KGN<5bgOs(JHMYw$Y`oTUSFCsC(l0 z0DApBjVc&=(0Engfx6TpUFw@EqGk83mJ_mw3%E2bUSsCLi4{orW(GSlUC(1}c z7{<#0QY2C%3W@*RtiX7{o@vKrsN0cv{p!JD^B8i|IPZo|gbq)(zPI(!L3t`bbxI^X zE%A_GuMJ#|VyHNhFD5e63XMF$?bsRLRayVKB4^>)y}jBZ)tb7%ntH^%0ON2tAq%_0 z!ApgGvm#-KyTP?)Dj)LaprI?0D7wAKvsyAw(qnc{9f9CW{Z9XDGJ-Vl^kc5Ai6^ko z^S&F0teW(_mcgxrN6A;u-1|(vtnw1<&S}y~lPA0Q8SKO(`#E_B$h(QVLr#F{3vAQF z7>>O*53UolgS0I>bkcY;WYTDpKYw{ndUqdwPFf)hmOu{$(14j@2$SGIK`8>AB$CZy z$T*FFW^~^~+#~tf@QVT{ zM#7iQr`g24{wWLBXb((e;EoUW6m3jp*+R`s`xhvsH4{$D=vR+D6jeT zuz4)EJj{(&@=5!2#j(k& z)J#ulrpx?y;v`{+jp#i*0h;tXqaD#SwzC8X9gj9!J9RHI-+M-yNXj$*4J+E76(3p? zyJRHA-s2ZnjIW$cLyWJiO;tv>L`{hlUB^!i(B3gbR{!4iVM;QD+5#=?LA85Kl89A# z%AGuc8SfrbwxKCL!e=s@7${u)AGm+v+kxJSqC`jlfLM(Ggl|dy6Tam)(zp9x{RLDk zU6EE%whghS#iZ&81Kg9~^`+{F4f%Dfaf|;LrZzR$*ZZRfY}PZifKFo4V`6klCkiBz zSZ6Roo^-B3H@JmFZOnc%pbo_a8#KP`;G}qy^wYP-X~-a1iCU z6hFrWWr(spbDI>wc%}w@z%r&v1TB={NTh27kocAwr>Arp26E0`v{)C3hJ{(S=$B|8 zehiO98RM=VwpeOz8ip{m=O-b+og;a0nO;&?*9`Bnrne+^SPu~|{qwXg65zPeIIAPg zW)hOILYxX3ET3eyWyTC19Q~iL=UpaT<)fmW)Q$!Vf5g;|%|4p1%=q^sBkR=%P+bi) z2&Xkf2&>jvrj=UMB{!$*2cU?UwgHzfd4vaIH2n}oSPIwgjUIOfgs>#;OAvi|zJ+8Y z?`4=jf`HrM|3FCSuSg%)nLnEu3a}S!29s7DHF*j0s&02=GhqY)oEB@6-xwGu4B%wp z&Ru6E-{elsrR&aZ8BdU(B~-sNrkUicuI3gO_wC) zAU*IH>7Kh_C=%FITN#OZDq|_&bjR0MT%R-K;Ca0mtdT{tlO@ihMU(BQt-jlq6S=~3 zz|*zY%C)Aye>n;Xb@tFyX2E8F8L`q<*FPU5zllK|RL^7(9qUianSSUYnohD~Rkv~d z=c8srI(co(!Q!zYSro)QJxpY-n?cHg}Pt5=*zU+#p2Wqpfp6D6oC;{KQNx**p+g>Jy%+P>0$NrLkW!FZdfoS5?XM zL`wZwROVqiYl6Fvkz}Cr*fr;n=3vz7p*>C*WvxT2-LQO}w`>R3s(e=m=Cz*MN{xgp zTOIV7!r*ke{ zVV-74W{u)zxGh2lKf_)@7>@+lMq$|SttQP|Rv2Bj(roZmc`MLVsR{g^n2T}<4)`c3 zf=s4zEeNmTEBB5a1%c~!wDq2l7txJB3@!Mr9-bFsk4^{SAPe3W%nq3r!XDqx@U0x4 z7fw&^4D=ofe+KGa1Yoy+Qa}ruZ_rZUOCgLE2z?+O;J`q10HqevUL>qhpo?axHpq?A zPyZ_lrfpE_?h%cw8Nuby!-b=pl$E7O^ZRC%o-6|2S*#Jdo`wv_+hiuem(^;bgD7*&!Fk! zs7ST}>n;)FE*ZeOMANEb56VQ@V>o}Ezwh=d(G9g)<2$Uy7JG$vYi!^(-&iHKg%PhV zWDGf-N3+Xh4>hHL*&4ma*p_yqt^CKgK}fz4c%BN~y%e%xN!|Wb1_=3v3-R{s8>I~? z*ycswSY+TsB`u-%giyMFvABtDkFs&eaYjl8DE3aC6NfHJdKb~7zC&9Q0!r`I`)lkR zkUTermcmC%<0C?$jjQ30*>!hF#f89uz{Im_X_Do%R=DjL+w1gk-!?ez92?Jkj(u|N zTF+*V4j^wB#s@!?bX-XHOh_{lDFk`ZCh|pnrom%O?P0DOWSxHGzM=h02f-iuwz;&k z#lR%VHjeTLTI3$@pq(EhbFkkGI#QLMjt@gUJs{5P8*BAZKD}~q_eNY|pWb8I>_Pwd zH$Hjg^z5FH+wM7bjVsdZL3I(Aw~pM6JgJtaTP zjb@XR!nG2r-l0%Cvn9}LI~+SEHR5hdBjo-q*m5D)dP1&2f}S&uPZXeRt%#+J?8747iC^`{Fu!^Yvnr)4u1KPKgP@sjZiA^wK%oD_ zA<=3;pdoX8o9(#r8|4M=Z5;zj#YBVm6X=U^rfhaQx}UE=CZzE-=aFlc`*aJ<=lk&V z6re_r6`DCJo{m7jEB|krSPFM%@!z;`N;YoWw2;oe^#NxP(^RTP8zznxJDABO>&=G4 z6pUQeyf}E|W=xEN?Gknj*!e#63j?7eS(SEUI2Fnm7{5d3x^B6)*4v;4r z5+yW|#G#NI)T)ZReg~J?mJOwyN7KuJb?OMz^otg|h!4V4!ol&@4MYSwHW;j$nJj9} z{3L146Lehb_W7=HXrD- z9I>pYiO4y)+vF9nTaV-GbSWzsC?c>_uIau$%pabYAuXvdNu;8WWBzmK3C|bbKc1UT z&H!J$4bmyhLwEimL^YP+he;ugY}NZ&OtuC(fgy0rQU?5j8X2ngl7kpj7HNGAA*pex zP00vdk+H?^L;>nsF@G;JmCaWO#`YV*cj-P(>Tvs&k&D}TBUy@WXF6xbGM4KrKO*o+(L%Cos;*E< z(jTdIR{?yjfJN!op?n1Qq6ZMGXVfA13H-vB{;(*7wl%o>h04lH6z3Lv1(MF)jp1(? zZ(yMd=45O1vv4Q!V32?8M;{S*MIj7}ZWB)o0l(wqdIXqVh$flj=41Aa#Ct47qLueZ zJb&gmY@I$OjlN?Q7hrcsSsFcT4^H1;PU__QkvuPsJ`?I({dv#)9n-ipx6CP+@_;Ty zPmJhg#8Q7WEPsRcO3Kl@g;#$$<;TZ?x-qmQoK|zk)Acx1>-!Dz88~$~dVJG8qq+Rn z=yy%q=OcRqNjKmqaXXXZJ^keM}bJJ3^!%gb= z#n`p%`t$GpWL1Gh(n~-90CiyhN0YMuYtwMjH~*j2TAa_et305fpg^E9BA_orNl9@- z2Ua4W{#8Q_Lf=_KT~6M=MO8~jh$5iHUj@av)5!K9t=ooDQkCKrIirWm13K$qca#M3a>r*3ReG`2H0Dw_c zQP5G)R)0}}IOB{A_WmUg82B#sQFp{YPv7_-o7nyLY{=ct`2WU+{+D$8BA`D12L>XbHBU>3e|agH+k@i$fd@Pf+qKL3%P zZy1zWW`gxAvY{qM}Cv`^+V93mjFD(oOkCd@rwlCpf* z-+ll{a6pT7A}IB(s}Sy^vvYZn3-3I=;X;chkYE+GIF-AAh%n^{G7W2MZjUw1YiZM+ z+tgi~0Z@To-}j?WPura?_uJ{I%=Ffq_gThSKsNPut~)omBmdPv1vr_fJsr3fc)l~; zd2~2Z!$C!qaVJShuJ{Tu=3q*LeItr3HTtkU93_O9kj%mQC9(j^p)rl#DF}MHHBDJ2I3SvET$%l_4~hqLkL4KonpDmxFPOA7Gmx zHI=gZcw)MkSP=+ZnbnNyd^TiB5Uho8U|R{3=B6OSXaO7ZaGG8+ zgd7YLhUG^&Z;$-}y8yX4J#or~UGw}CJI&1m>x-AHpfCfM*qa8o{fJRi5!7NN{mN`e zVS|AKo3K`@)uNQ+7Zs>t?m`jFkF_AgN_iw(oAA*m6X{5XZXf$L|4yAsOFTK(1FEfM zbRDs?MRW-2h~dP2%zV*xm~NFyJJ!#8Bv3e%qQd{opKy2t7$uj@W?jkH%>4;LpXrxr;AWbSC_TQ&s z`jz!6IRQ(dBW>hZn%rRTHOUNt@$!42wH7$bVZ8~a?(qSVO|c;r6$I4d z6tjNND56Bc((SzmYMaS!c@_9Kc`Q~fKVs(j32S+h$ zAKjgJrhZu16^3&qA`NbycyQ|4NFsHCTPkM*s%_?<`n!cHEVuSkwi-^8VbyoG)wlyHDxKamRz%%4I&w}-Y+0%b*!s2- zJ7)^qSdvP10##YD#yM<3nDI$xAv^T=)an#x1lg9m7Bv;D%W-XEoCDw}ANNu=Qe2Ow z{j4_bGczwy-tj0WDim`UDZ_Wk-L5KY|B==4GIWk#8KWwa%xsDWM*Ac5U33d^2uU9- z9mGxsR9#HRs9fE{)S)X4{4F!bleF)tF2y3?y{eR|7J-xZ{b0eY6d^$F=D#z|q5{~{ zu;jti_>|*lnlPUOXzJYA3?1s$q*oZ!;dGql!Bg|pI)A7B)aivgqlCFftZ^2&=sl4* z7&PG40X3w9w+g+Fta;T0sf|dT5DDi@X^$>PB(|T6usJ43i9du{C0M0OC$vKlrAz-6 zC-n~-$_kp-?GXJ?Vfi85G>$duyo!%v5-q?lH%y2}QQ#$d2miXZ#!4A48t^IfoFtgoior2_Yd+f`eP!7)i%-h3~EDHx6nrcR0-oX*%u9J!(i9wuL-?n zvBv_`iq$sQm)%v}0lR)c6|?M&^C%2f&}>ffQa+gp>{g_@9sehHyx93#kS9^%Vgtmz zB^;*r=7@V`DR%S@z{28GbY=$fN9qfZX9Yw`kPVVQ}|`JPz*_cR>r%N4%1I z@Nx0%CE3pXnadT6@=#V<=ypY{TY{}n%;?Hcq5P!f6Gu-=xI2w_u8W~e^AO?jwTJ_a zoO`lJVgX9D!>p|lD)7^t^y=^9CYEc z^3ev79!plP+2;x0z>w2+^{!o?h-1o6d`6QO&IU*AIPX*k;31BcOakI@guj-rplXZUb2IH&i9Q$;6L+ppgm zmz{%=8qbONit{H1C+cZzUulDbO)|#&zdMZfkUOmR%>JLipoc(6yQ1~sh-oA<@M>gt z#{PKVL37hW-F*c9wE3Okj(4I+g!iOKiNGaLT2yxBeanEW;8DZ5($M|7QeLuotUne8 zO?@W*j`!)|kH8~POW;z-X;gBQa-??geNz6Cz$Q>!gmMA1(r>^tNNrkskp3Wm)qt^3 zR`6~LdWn75Uit;tzKr%PKQ;tmzG-25xg;`!z0zC(ziDj%q0(FvaPm@w2G(&5_uBsL zM-29;?b1*AfJooKIq+?9kkVWtA>l}6V?#<0kdpOvbV`Vp4MA$Ya7dT8P89U>sS?2} zgF|c-i7K*4kL9W10M9J<@X49zBHmI|rASg%gt_4s9P>lzfQn_c;g99H5WFyS_sH2s z2Dr*;X?#GDc443p(5UDHbV_<@eRi}trQteVe5D@u1ksNN#F*rAq;XFMsZPFBK%Zp9 zcFAb9^KSl4eX1ZeF9)Pf4SlM>J@|Ifea<>vGRlCZ5K#ze$HQ1nQ<2|IeUZ5ft6gk- zrBGSaa)fq0eIS5~z$Oq{6m+tBJ$)#E&w%>=!GMv#8o()T_a#xVKxzoQanE5kC+*i!)6i`Oqvt-NItqx%wqamMy zl>&Z(8P+C}9sj;8jlA(!IqI>I^YY$(x@mN@^JJwN|0+=%t2w!lA;kAcQ*l3xvfWO( zam>T#AjjY5ToZ1Sg~w`*yWA^Vk@-OH!@~lS38e#b*pP=ie|YA8ACr~!V!uD73KIIt z0*W*JnMd2IH0?OJ4gaBTn${JOU6kM*wCKGw|0wBwFz?WBoGSK(fU5o3@wH_-{n%U5g$yPihA2!e@pGwX}$ph`6)GfCJ}YYC()@IPD2f(4k5xm zN%s;Q9Zx;Z*2;8!n21RnbSG`)u#k9|*ZRWIP*;h|&s-^3%FSUXbYY;)8% z%l#UrXWRotk$GId7VW%2Ed;l?e8CMCY?a_|bv7FtvtD)2<_A{`l<}6ws4bkSnWY|D zm(>AYOF<{Qz7mvYE_f7cNMp< zWX-epm=CW&m>xXRJ%A6#yje^yzs3uIs(DaX$!o*Ss$frs&V#Y$kLTIBSeCc<&fwk| zi|uE1o|9#s{bip*)dx+6tYiwe>YR-XlsA%HpkhtQ_G5>u59~t}ZO%u>m-O6Ax06{n zwA@FUpAplaQTiD#_tljR^V;UdL5-rlV@n4>lssOHQMJp4n(F339ZS*CW(l`y1)a*M z)eGmPW-$qE&+1e6nza&nm9^;n&3fA#mo6q(sBNv2nYn62)%V1F&9(O3EdkdXJC^0? zcBEM@&_Gf%Z_^VG5uXSA2Om|+w_LJ)UXN$IpDtnnd(@ejQfxJKH z;(>OUFeB_t$fxsUOL2IOWeGqs05D3~j+a>3ZUfCFg`BB{oy(o?5jLYVJX6*QeQ65q z(LS|wrG+;$d&#px7$EAdrp^VOiEYF#2NcU4U`hMvs#AuZ6uE<&Rk0Js!h>6idiKxFdmLl zVX=T>wDG!6J zG+k?HcEBzpP~M4rWI;=+!2L@hZI=1%IBYI;P5{adCb&KU^?)V99yUx5hWezzlV;Ua zvdKra4o1}h6+2?L{(3bp!f^k#of*a)dZ3nlWcJWB{H!a?GB|T>g`4dqcDNcF%s0O> zhC9akWzPl&qqsTdl%i!vv1?i_D&@p2_uNgFcl48GUAP~)<(_p_g2nK(cIkB=EP3NYxrJ8-M#+Np4al?b z7;PKqhl=>`&&5dqaya^ zENq6bU+?To?)y{nn3)p2&gsIqm zVi)5x&YplO{#rgfo(B(=W1uq`xQDQMzUvdPYSsTEenO7#yF4W_HcoY%qPpK=nl_6u&=vp=9AbFz*Kk94N7gIV0L zjjv`6(Co>P?C%^tfz;+c~bbICbXg_&|l=TIKJMYFy#kb$B!bV zP1dTTy1V%?s@-yV9@bIZTT0%$#K53XKwgr=c~?TaI+H%Q zOn@7^6<)yuPP%hu!m)XwwFeu{WKZrcZ7grlc)Ss~vvYwCwzsEQC-eRVwX=l&1!84z zbj#G_Qysqo9tpg-G$=ut&YlT&ct$q_@hzFW!H5t~r^5UDpV|~$pT>AAAgz=3DOd60 zylC~8+gMsye`${t*Sa?tHkGx0`C$aYF$4Zspo3N*unA{J%}>PAS0J920n8{ar{&4; zXLF!1E}N&-iWKTZ^9yDB7hy)CP=r-3tE&~yj8tD>Z&i=zcXOb{mff$Fk?dhO^XSMS z)vHPmTwVZPsW!{JU=8}tI?O!YMRtb5LJMbYdpy$kPFDMWNt7K#tnZE9u-frrNfJE% z8TA8m@*&(#s48)ie8`h*C35U=mTWNp(>vvA&*G-rxoq;a%<>L3HN6@g@z$)dx6wDz zNiVot(Zusrp-rk(Lk&AFcpd`qYhC=xET1#ArMo^t6f1XA>+r#G&W%vVgVDhq+Tq{G z*Jpk#wnwFAK-|BJVEW+mClYxq0h+b9OdAWZqpgwj96$8b2fuUV*;NF0!M1bxyLG-) z0!`T_mvaxEp-HsXCp+>oS9N=xR5HqtW(m4&SqiyA(ykyQ+UG*SCDFZ1<#An^X0-hR zGD;PSPCMAH-a<%?dWZnUI5livqZ!yz2~f5InSmm@+Jan1dGanp!~b+!<~0EgZkMY~x-p0tas5yHkEZ z1jRd@=G#b*+f>$6IQ7!OK#;xmv&W^{p$C11Q6K%e{-^?RM;4)W$B`3uI{Cm1s=Fq4 z!jthS1o*wR_|YQdWiplV_0PM*!H;>LgfIv7t;p`RTOwt^R1?KzfenP6l6x!4@E=OW z?oJ%AlZ$fAGxBLCvC;V3^&g^<%@KXf&9ho9KF5>RO4HsZr{ykIH8o=5r`+Plf~KDW zO$?8Y=Q}LrAMDZ3n&ow~@pqx4ERt&7$sizwS)(%qdyLAz@4|D6#P{K)Uc7&!bDME} z*yCWrpKzUwwHl5tR-o?N}iYRk3Nq1DdqLPf4w`wI95!rf8~ zzt^7i{wu<&ZOQfng#rLTNdJE{4@B9<(b>+<*1^fxh~LS{!Q8;v$ynIU(Ae%@3A_I) zOON0F*F2Em*_U4CmX?-_VvXUJAE6;mVY&HA08odJKMKDgn6Nf1DV`UhJ{6=@=}3a#8d{vOJCRqH0?i@OBH;*(Qfjd5emqRN#@iE z9VFQ$w_2v3D9tl7P!+QE5x(316*?@<4;8L_RXw9KD>ECTqSY{v5cgU$XcGXDRtn5^U= z9r{S_m2Rs>c4nqWmYZFsBMxpC8E%q0W`LCIY{#5%M^jVzTRk#ze;{5T9C3*{N{ z*aMGk&g<(5@hx7hEdb~m30byX|1r6LKUa&M0Ad4 zLwVeb`c(J&-HyKhQO{p=qYfJ(WH5g`2^Pt6UI|Et8A2doAmV_Jvy>hA&BB4^QHG-d zZW1=^@6?J2%xf9c%JrY@Ybo#-h6i;SDE2f|a23k3Jd1)TXXe3nUPItz1hgv#9VvA; z=~7(DlY5*CX|pk;Y?A4EyinNAy>PQ{dJ$fC02iggh7T%X$&5;}QiA~IW|pK51&-R8 z~p8S_P z7@G5=cu);VK}e#trJ8Ele;Ldez2#Z@AA=eHM}z&hNgp+9D=Ax3)BiOE)mx??a)1t5 zlC^mg`5wv$Y*wY0A0D`WkVePS-3hBXxdrkk1B|yX7O^xy6bK)mDDGc#n(F%E@M~*W zR*CBIXAqlHdI|U^v7^JdS1#*fi#Dz|!;1@*dc{8dPGq?obd+9VCh_J~;WA&Tr zQ@$p~;K}HalQ}(wFGt`9-&oUob@PBl@pOyy@TNIQ$l{zeoG?c79M}KtpBA`GN}2x% zGy5NNT=f6%;wqV2|4$$NA5;APYyNAnjiySU!#$)D)mqAA%U=pKd72C{Os_nAgM&dQ z&LrY%nsuA*uD6R?`uQNqxgos0ScaT+>baE^2^MzK8TMVTQ%=Ul-ruh`kiWste>noe z=-v*)twCG*;MEwU2GvXS0`Z%k$DLk+49}qTYc314Vu}^ZH}p;j(#or+#w7gku)!H; z^TG9U%Eh&v9s8+e=oi2cStben46g%tBYx|v ztUjoSbIyiLz_#Lq6PeHC$eVz3q>!ffztR&+Yw*_wTta>zKT)E~(T&k%n3vkc>sR2E zsSxgiF-R*Z^zi14G3AgIj~-kLkAWpvL{=`w=aDA$Y^1=nn{xfsj+Jzf{z9E`V+7Rd z%KJnLZna}dE2f-mQP}*=JHRxc;MiB452QzFEjkww2#zoUmzNS}#2L{x(}#8^p`Nx% zgVaE~!6%0K_Q$bQ$;m1Dm|zO-RyjIu$SYk>q?f8!CqE9#K5i%YLx3T9I&5u&#ZW^s zsHrl%GAt*^yv4C5n!b9`+_vf0S5m$o0N5 zw=XFjYSbKf#VkWMtUbx|sPw8VOv8l6e)h+L%*HV3fcD0_F1gmed2zsA0A#fd(ZCJfBk2~&8-8@pw}#RU&n9bR9GNv_T@ z0@dS!+)K^=8Z%{F)C^^qP9@weh^zVS-;05~j_af5pLL%P`kxj9(f{jW_%Hughj3F; zPWh2lP`)jG054K20w4~eHUbeEuEY4NCx8n5C(6K3o+}|iLb=KVzrTCib+g#o-d5P$ zRZbkRslY(c(v|a&f#y)EHDbZ~dtwM$t)XMZU-|BE|qm(K+dYY>{4e6c7i>nQEb4ZPWpW(z)r3O?Gsc!)C$0 zF-FsAtKv`w$J6O*^}ZrTki#ec5C;%ENi59ovWxjww zfUc3X-B~VI2RTwxI3As~dsq_n^E+rOLESlGg|b6t{t-MUfkU5*_;lR#WPrFkd%nQh zga9La6cuH*JWE^4Xk_4iI$rIw;GnshlHw$?KgmRRVFQWU9quY1(%_mKH&;leLtokqM*i26>apd( zBElq9#K@*QS^TUSCXa8c>CWdubYink>gr+~+%8wkI6-naaKe#A+d`g

    !Ub+h514uwl_V5ZV5 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 z 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

    N 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≈rj(jb``b4b_C#(bHNMW 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

    |Ddi$Kd18BZtSiMAtQY=@j`U&RI_IZZM#hL_P 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�WeHX8mj&byz*J{*Ee$Wi%9|?qt+;obRoVQLt6OhEYpDZQMO zMJsfo8<}T)2Ve&2m*9ZK%4X>jj#I0bwvw?hDU$%JXD3-1ggMPKZAnl|brV9kA{xH* z(3Uh}UqkNz<;Cjf>IY@u&c5aHchZar#dR+3^*GVH!Z5@!>8`0MMvZ>8JYC2vzuFo# za!@@}2s<;aD@vP1Ot7ZCUZAFCaPEWn+GNPz}X!law(msht4B6f^O z5Q5=deWrGf0wFZ=SUbm}bTYA)Hd#GsDmerm_tHZf*xJrUYKz;gamHInw{8J-Fy9y} z6mQ%WS{EW$Nm#NL6>y2Kb{(&|KYk_Xj zp~v^Y1dY>ccE@aZ=NVTTm=7TMlUrg2AM9RIblF19kN1>iL8DZ6O2^HyCTeh%dZ?o5 z^xMZF`^NmALLgOmLp151n;oC74A#ql2Z4m%QG%G4YK!_` zVaYHc+Y}JO3>XA?yp+{upmN5;R>~!)Z847gWoBgs*#hVj(*)*HB-pn0W|pv<8|%hV zI)~($#uj#qGw+z9H4YmbP*xcz+M|uS3V)U_Euv!%Oo)&Py>!vx4VIg>MH{IXDYr7| zs*MucJ`v36fgdO%j~)=@Ev3h2@W{<1+(S7ltR^#ts2TIa=+5yO7SY=E{hsPz+B_HF zg(LScM-iE4;S1qLY%H4_2jwq%Lr2B4Ad%w6W_X} z(+S?kX21H_3=;$Gp~*w6)ronG?ZO2Nih|L644wC7PrpT@%%;nCYFWHp3pg38i@Oq| z*Ky0~2Vq5Dtrp}r%@W`8PBUdGS2Yo1ZVOw1BoLlLft z8dP$I%!}2D(%SYN7}=I&DaG9ahGEgy9Hx@tvmp4p=t&AG={o{s{&YbR)0>c!NoURn zz=ZeCy_dF_MWuCCXnHKLV%zB`>NdwaCL6>XPV@al(7u3uumi{s(#~TVDOo8Z+HRp1 zrJ~00v{lacvggzV0z6ph@oP%6(n;bpnU!<1v&rGM#o_7U9*M{&%Bhd1XY+dojyD=p zP%Pu$y(S{w-Mt&(?1rL+HBd5S!ZX-0L*)J*tBLTW0(r44Fr;g>U@uT~5G5Fmu|>#I zuyU3{Xh`6!WBi=yg$3+qG)J%KL_>^a>8=N!7FShZ>(H&sZaacbrR33{l(US*Nk_gGcMdXwm~ zsD2%}VeL2ZyOh2}CMi1!y{z~CsU@tcA8!Gw0fM^8pyiP>akET77slnnt{Qaq!mb;% z_Ux_@^s|L6Z-9>JZ9GWN;%*E^XGLEQ<7)$m&)jYe#-~(3kHu{^$j|Jq7c}?mZVtw$ zL;x()t7w3a#Vs!McSYX_hG%|X35I8J-wB3iUSA4^XHnk@hG#)v3&y8RzzyST_GCG8 zTYS2>k)4(LkzixpS)=w65*>6|Q&~yqb$y4TgmLrupM2P=CaS>GiQV<>B3XWSc{;(t zyQVKv#L$|-Y?>~hKhyLc(jA}eIh(~Y_}64#C($O&ixuy*?nTGVi*ECJj>$O5?~*)` z++7cg+{T`#ob@s2CX#SvGp*h4Xy{OOQD+em34;4%R|zAF7F{&rl_JkW;(f!Y&vI3n zYoZDYGW!+husfBqe|VWKNZA9_N=hocQnhixFZQ0q)kg-upX%iy&*is!sOhbUoMX5; zr1sO*zRJod?vN9uPmk~=6v#d^mU3A&!Vj>N%`cGJ26hu+hNTcVhUd2xja!OnWKa`s zYl;vpeI`jMvzRCZLbergT4sZ}Q+OgtvsN@>?Z%S2Zvz8PqJ{3zH(1~L6K%w-y`j8n zw`yLIDehVs?o!{fkrr4$XKL^hQlX~1@e>?Qy+rVjRGve4aIjkk=DyNpZ@}oTYTuv2 z;T2#iJUGQO9aXz54+iDD+%+_GX3W{^XRMFgOor{yOHwcIBR-zrCI|b+-?1@LJ@|7r z!%llUi$Zppuqhg(uTd@JBWaK4OEBd3150Lp$E&K{CUU1;adN$o&oE+pykwm%uGuxb z#tVeUaD2|0ZFjZQ;98teECdWTdba^DL_FdccplTq<4Z#1@HIwJ99XI(U0+FD3O7L$ zI%hu9%WzWqn6N0fX*DrYQ+{Lx% z5A9hF>9yX8$-8Ut%y@}2ua&@#XG-9#r!UMLfHRY8WP3YLR@HHsJ_`^xPY+w0ysQ=N zY@zTn19;l_6H^x2Eq211O?_&?_=X8kO$VcyFEtI-s|sdmDo7uSvI}%sBKv z0hKa98K+L$k^}A%lRyBxGHIU%rrhb1X!`Lu?MrrUhArGekaUKru;l^PIO|hspA5FS zb|Hf9PDz*cO-W}0jIix#vu=a;=(B>CXTj-$F+9TMj_(?h>Xz!38m10Xp7bh`Xb#_^ z4IDtp&|m7kLjRUNUN+v`59C0*Hfcq(aoQ&hrUzK{Z(-8|-M$Xo*~6B8o@CfOXe#T{S{4gt3XX}KQu$h3tWpa4pZc$wF?tw3yM=oI#S6TUc+HXZ(W zwLtYDY6WXy+cWFj0p}S3&Ak1^J*tCizaIxwi;U~M&*~Xy7Q>F$KN~2+sz-F~*w23H z+%Ft#d}+r|aBZ&-e(lVUl;fB`EIUja_e*&fha@vhhGUOch6Y=5J zjU;*qHFGwahJ6ntSOwj)H3yVuH*n<+Ra!NO=FYT7-*pYV;})4@@K%XrGrY&Rdj(C~ zg&(rJkAKHduE(xF;58Ys;jRU$XQGe&Qw4^3?*{$5_m+8p1IowHHDyl*%E$N>azF?D zd-&ER_yz5|@0NQ26za$DHFl36*oWaWWUmJbm%+3DmTbTTDu=yU8G6sP48QNY~PeE`G7rWcJK~js5>Y%LIAcZO)vuz zN39e~dHoF5EkAF&MnIK^m0#Wyy;OK;NWli^ z#cZ^M#B`I!rFOcYJFp>8biAzYxfM}Xf zk4(b>BZ5VMD|Qyx4^;^@`o(}8Ls-E^P!w3Le3Vl|MEoXb$q^+HSiyO1uE}VFw)6x2 znwn(MV?#>&g_@Q~B1igyP@_Xn`oI0zDHbPDuNBGfcGLw^Tme5_8l%^ibC~8MoO*hF zA`QNPt}`dt0wVSAYm&{s_;x;3JqlcCme)%$|uIooDFk~;JkG% ze@f2@ce`YK`7nN55aR}6ycMbvo*|tcenbr?2qb&T|H(hGg%P;dqI)Ct9DDIQ<^X1X zD`X`;L+Ute5ca0=XU9Mta)}=icq}vSshB!RI({H`@Pr7z7lV(_W*1T8RR#L2NmnPK z3;+2&3kJ~z$a#7Ozroq6@QS{UwoIRSWe2@V#@>o&5S2W>1n4E>*e^Y_JOl$c_ z$`KTkN7si~Y@C|zvq?66SIQxT=umy2%+Qh#g&Assedk%LkU62Ft|koG(g{U@t_&~Z z>#Ds?#_n=EkEA`$jwbX9Q%Z|$ugiWo0EGtBpof+TCDO}@2I?dW0jUSEIAB)`B<;(f zOU$^iqFfrZWXs+tKu}rI;y{Mi3b)+PMEF3=ifJ7pp-Z9pn`2jfRcNCfwYm3qE24G~ z=xz)I#iUs&v`oLmX&CG8Vs!E%H?ViuKN}4GD4D5M0`fZ{l&`$vq>QbS;EVZgltg8r zMah+H#g(2jp;WnLTDkGo=?g~QAa1vA@spks#@?F5BK8W$2nxn|C*XB@Jgi*R{?>P< zsHfTV>yd$$sAtH#9<#fkq`m>PKy+r2{1%b?t^t$DBe|HEX+r7w#dZqo&anV@c=_c2@h3V~j&%^H_t8Qd_% zcEP>8Si;$QuJf)2Rd>Vlt}J3r3g7bhI_0ZREgO`vP0Z(^2sUEXf8PI zpaK(|Tlyw3u3goc#b3oGof?mYGObvwUs$4RCV0wYe4D~97O{D^44py2w*1wLop3yG zN=3kwBN9z~NPAlDX)#cg88kRBo8jv`dWf zI2O+XaIii09i$y1mm45Eb;>w@_%DoCM{qaVhql=zPT_|!z6g^EBV)D5gH03CB8<2_;)1n6cM4XDr)<&fb~LKQpYfAkQ*Qd&jW&x!i@3S=@2%~~ z#1=wMDX-ATsJeG1`3881r|~P%@@1Hllh8y<{Iuf-tgieCUQ1mfURru}&8yZW-R+}H zkb7&fagKfLF%Mn(HqSGyVzm+*TGFBawCl9znYOeJxNcep1~C%21(nee^v;G^cI?yz zM1Ih7%E)33Kit8*bt-7~%G8Nz;^nABTnsJU9R!K=YxW9?Y%$Xc~zo|hmi%4dl&jgh-X-$&{g zAbR?9zhZ323h}U$HDQI}Q4YgA%F?sOA#@#(b!3EHkl~&V2DQSc?6$e0WQUk6Y|e~8 z-jR2L*$hS8Nt{Yk|c89U-ceo;YOU}^Tp?u=BfcdqAb9PEa_H78E zS9z0h&ETt3SR-59o#Z3lAfD_o*MZ|ArR)prLu?XN4~Gn8y@s~J;v&NyINzah6KD62 z3_TRC>%^}0_;c;Ev}&|xM*N8p-*0opI^x1Ov!Jc|7QQcZ%H5?q+$$aQpSuOh1V|?( z4jG`*GVBv~4K{ma<@5`<#UJP04#eC=Rs{)%+YNv$Et)?k!IWQROS860b;ZzP#ON2T z!&Fx2PDr|3p0&c&#$51va5&7!nSs-`VH~)C>s*?iY5B{CrWtm{^DV#GSBDN<8oezT zeMK97eZ$p<+g4;%Mmwtc;Hmjc{kdq#B#Wnv>8flxtLG+E!!-&uDoL-0s4G!Xy+P?9 z4g6x(+B`8N)L9L2N@H{|)ePAxZVl?}dNf?AyZhBTdf}9cch8b3i_oOe*|dd0kVAkc zFYM1F>&Tg!7=o>Lq$gnK5sSV!0fL2RhbgakM_NaY2_zJt6eWP8xvYq!6R@ z%)FUSeE}BF#2!$|X3XwF%x#rmo+U8xsnFhvpl)myY-I1(uYhUQGpXBNImXyThAw&I z?vN(3I$8xHkp^_;?HWoFfwysRN zzD%biA|h5wh+%aR+_ea4CA5P+)PqWEla26tGjhK=ZhyMCR6kV1ygjOp(E7`JbR%FQ zrET~*wBtD*@Q$Xy^SmfapUX$G6(&tHVuDm#3kGmViB?=Qt8wPe{MR15MWP{r7=j_% z*c7uc{_FFS8%L_mfGKjPi+wg-1$NcZ#mY(U8c1YPoR}@)F^Fi&0s7c{uh_5DXEe7}C#Bt+nCZw*aXm5~* z8xVJ3tqo@JW6}~6bZ+SHImh3wB`f>}A7W{=bAx)ohW2^mi$^p@>Q=cgtHoFbHs2ZVY3WsEokB)%p^h5W47WxJxELSHphUxEI=tp1v z$aLm3j(bjIH@fnL6JnGuw3bzK%_{80W5u^!`_lP74?E37&M_(_JlbYN|7b*_7~f?Q2o>G2XaSM znXAMYev_-@32QOL*UC$Gjes&&t{lrvQ}QSu06#0}_rg9eiM}X+d8Qa7CQFi#PN~W( za!=gpw;;S~c;<~rRHkWvQ462l59tc}cE3aGdB;!yQoPv74r$h=`0@R%8fB4NZ%^(W zNp8JhY)^FOZ_%nWbVNu#j;)$yu$c_CE7Iaxz+M7*|DwA=4_h?VQ#wsHo)`71%-d8j zT8C>Njx|G=5M?GLWORj+Loo}SP|hSVygN8J zsoqE$u_9iTlX;%|bN3C1#hBBe-t_uwY}{${2+Lu_xHi{zUR6=-Qh zdq^grn@W$gIZm5ejno%54whOL8Q3;Xs#+NttTe8wS``_PDi6g%ey~S;B-$!M=68}P z@2Y**dm+x|S+3Z>B94qghG^GF4^Bd=XiB

      I#irua@gj3a@02l}}J-p%Pg@brD8lTaROPWTfE}!)ndO@FmsoWN>#1^pJz4yqN^-UH0*<6Xs!e7@kpPdX|L%Kb`c_^2RVwSPZxoa7W423`}YskH;1Z0dhQROm$Udx|=w-<&v2xgjCbYLBujCuE<(lM+#Sq0h)dO;-xF)fe=q2fD!(B*K z#W?&D8z*O&>LXvsulKquc6x8vIx?;GBC3*^+0+-%V=c>6;-X|9L;J^)R=~O>eZ1JEOn%{zR^oV9Cd~1T5zsG4`jm?rglARM3R@yj-*dhL}eAQ(zD8CraUB z#t*?Wh>T(%<>a2e?So*v5PLi!Z+InE`(#@Cgw`c1ZSzQZ!_gghWRF=)AHvWcfqKiL z{sb-h9ie=K*HMNzSwd3jMm$x*qN#A{s%6&>iu(0Nz!} zJp>R&EvvnY|3$&8>N`SufvtUi!Oclh+oL?MuUBq+< zB7{>u^sf%gtOU2kS}Ufl)v+c!)Ov@Che%<+2lPfZbVceQd;p|nvKxEa&BFLtyTjuH z*b0mB4GGL-=dW3&Hl7Y*2*OdIHa<$P|(Pn{pl7Q=4`b+{w%N68FVZ442UvyyNdu>hd7C>$kVHPs&cO}L$Iurm~sm3et#`TWCw))_r# zLBuK+&r_^uDgZ6-KA_!UC_)=I`*9uZPD3G2$53y2ApfOE;o7q>ko98a9E~!O3Rbur ze>9CSX_mSb0-upu8qQQ*o3GONjgN@K6Vla#4i>Ij*lW*)2Y;)%ASSME1;n)W0~+vxmNjfv^1=P#8+5~=d1rhLV6gUELZ^|*HBU(iqVam$!}XT^4;bqC@^OOR2grh9irK*xx)3LsY{7_ZkR%=gw*k|R7G_W0 zw!qP%MI6hiKTG&F@L+FkxO|$GCkDniAE=;L#SAT~(BCsIj)uvR1S6}!DyhASMn;1P zlN(ejGsKOrMk+EsG=Bc0j42a37ZVLv(jsu1Z>&?SBo@0Zzrh%3(oI=3EDt?9tbU(f z>~x5akcYtwM#muC|LWXtMvXLJdDM`59p!D=Exl-47s!Z8N$#(*Z!jSQI>mche_0fX zqA4yW)|?+=EvL5>)yupm!k4;X>P&u^OHWxvMz@xi(3@9bdf&y#Qoya+FpMfwx#%Y% zodGf_4!pw>X;;Bn+RZQ5_W^B}S!1A^&|rO>;mQx-UokM;)RC3^PYj^_ zm$HRI|1V{D016yP3|Ha+hD%e;XDdv$2F+o zH&!o)e#GoXi={~cpRi5Dmn>d(cx4NrE(_>pJ`J-8YX?k{^2NYS|te+2w& z{wV5GaIWm94q>K6F~)^C)^b$*(#``GdF+p%63omdadX6>0!%3@L9{tjr3_^#Zgj@E zh-MZAl3N190{ql4z-WtyC1HdF(%XY@7Gx(g7NOXlW!Mes$JOHkL7JB*I*fysF^=6{ zLhX+pG-(}I7$i;Rz&46W#tEHHoKZLw4F9j-02kD!;dm2*C{j(tGiV}s2Gl9tyqEky z6V&M}`EIaDqp3fJAR4Y=NOvwJ_zpVUt279Ps4g__n(HirXwl(?6ScQcT~0)klXTwZ zH8X!}5%8Pk*O&yTxDv8Or0IObL;ma^ikQKCvv~HL;MjeE{@683CLgetNXfit(-JE8 z+NxZm&{Ppk-h!E4{ytm#*DH*Jp#eCbme02eAbODni)O=6$EW0+65g}&$HBT>ukt>K z3d4Zb&Oo$*Y*oL1FSR@6w7B{IAn0V!|1}}p{@aqU|6B}Qteu@`?H%pxO&pyqOq@zI zryRF95qGL2fBPqQh*cn&k{%5$ZD#}%j@4tSuM(ZJw{e68k*yJp0p#O8J}{=4rPQ_Q7dUt`ed%PKg4Tn7hORiH+pC7=i0It1DrWsHXB*`P$f z#ps83?)su|>YXB+wCaKo>I>&@VZ`Xp6d9!PP5RCqY4+fS+>uA3*5)Q*&lg#^K$szO zw9g7P+7>lIov}l^-!`S+{EpzALqmE845tKkbMI4Q4>B(kur$Hc)tW=$qQfsVu;((P z)PPC>BXbHn%8^ z{eh4EWrs4olF}JMFZBH_y3U0?adc2o6&b`CCO)_#n+t5(I4M)qp);gCNb_(NgGM08 z=8_c|s@WCJxjqtjKpHs-(+z)c;$e+FlXPrGP5_7U(5jZ*8g1VugM40?!ZZvEPF31z zLNfB9BLq-je0p7D4H-P%)<^$DEry(NBblm}9Fq_YHG=s=PrDi5$^nlH3VHD;|_fsPq9Y zt)ET2ib4nv7{p&|l73Xn#^3@>7E4!|qvfTw^AAT(1j6r`Nip*%mtt__ZW?_P^z0l2U1SmoKDdSQ$ zV@Slvh`YUM;7Q}6XtD8{tauwhhCD9W*l88RxqZQ!c?WTHM`6aYdzL0qI1wBS9j3aH6Qnjv58 zY1)4HS`4$c5~)Kr{&3(HJROb=`*?@<@$%~LAVIKksNV^=v3!k>z|z#shAhF&0-Qel z`5we}euQAZlz$xnEAYBKz=J|bIoureI89Z&tJACDGVBJBVQ3JzW1996tp|Xb++pi9 zAVrjj@nyco2{72Qy}W%!7HmMS)*t_Y5rb^G0YEUB*SK zhzzKm0q&65d@N<`2u5KbnCN(K;fJY_K}fBufUQ6MO5#P4na?0nVLgrNZQ(bn1+f>d zN!YR=dtfy0-6A7Pk_r#@#scRp$aT=7wdTk25N=wGHJFU>m#uf`4dN`3nPCtN05qU3 z+adrMaLm6O{Pi^BLj=4)0mP0HcxMdx*9o=IvlM7(L}2-R6TaUpW9%ULGm)~LN2VrE zwm$L8-oyX=4u+!|By9OdRPY8K;LPOafEdxAgUp~ZbbA8Q5CCeyPeR7dPyj#`_EgeX zOcVVN9LpPexezRPOqh=JTT4x=zf96P*D${GnoufSdF=Y8G6oNhn~S2%wexj4{Z-`U zBu_pqRfs)iWPOY{TdwV2+y=5fIE3Ca$d4Xs*|1|>wB^+g+&LutVr(aAPf45b$dv}# zUEZo_lx1pcqvwArida8`I`=clP4IMO4xCsj3wAYB`1O+Dd`M{#h@W~$9+ir}iZkHv zIuw88bT=2H>AYv=CQx)f<0TOl4Ss-h#_54Ox9f6|q=@Jm-IOxAOBsc*Z(QAizxf|4 z1d9zfb_>YstfmBKsBoVgNiA;nh?k5srV>}lNo5E1gSF=|#4Sb{P2R$SUQLrV6 z^0c?W!Ag5?PC*}m{?MB8erQ=0XuWv;(k1fs$Y^D~KMl*OCLwTVDU7LBF7&}kRtZZi zPiN5BIqBualWVVJlwG_2RDbzeA9J|dwnckgx%M5@oRJ=Je}N>Qnvpry@p6q zlN$h-(W;JcW|20e&CkhEj=RY@9iGV&b45bXSn^b{G!cB2mG zTccTUxfoLfu{*>AwGRvScr6YNTDB-`%J9w=x9EI&bM+5y4hG0?d0fP7fr#;kJPvx2 zQL%OR2F$jszJU}yI`u!LkG^KGS78E^6mpM{K)klaO@~wc3^`E-)oc&giH`k&jvu`H z-g3u5*%0;(cCMgPJ?ij_f#YY3xwUnp8(}7HFE3HN-6Bj#>a_(@b$zQ2(#a29c%Hdp zZYRro_cQtgvLU6Jx;x70R^yraLj5ARk=N;eo%W;sMp|3H{?I>Zzu2#sVK&7^3HAs! zF(q_FO=$wgAx=gSZmz0cLXQvtzQ6&@DicaMBlgU$kzuA@2y;W_^{ts-<)d|Kq|`Ci zts~Y9UzskWRCZSH6;(SUUp)G$8CA9&&zx6y^oL5lv#)X;R3CZWv6s;JiE`)NS}o_> zVdV|8FI?Oztn7A3DhoLl0;&X7kqhV5v$a;+(Lk$ok5#^aovTkvr{L#}WVeK$$BL|N z%id@RPPLJ^&7h=Hu%8t^!lmQ#I^d3`vNs4PGw7Rm*+FWTr)QBk`s-ZerU2^)KiGIz zV>?6fFqSz%W-$(+J(t`#b@mL0S?TCjS*X?$M4#2Oiq3e1=8GhrccaZJXM*fnYZn zd7!+xZn3|AMbHaALOMZ_!n^6R7ynT${BwFg%OhSK)oB#wXdg#zzdeXOaKr(ExJ?By zKEjRo6d}}6W?cNlueXHmOBFZgRDM=7_QnD411Ad&SNG5~^X#Qbu#RuMQbOJ_#+629 zb_;87>mT$`JLWYQ-gOoXH~qHjwS!QmLn2WW=Eyt77fii#^}rP8am9Taz+6p+7ViSXZ^OeOX&zc(;PpbJOMnYl#WJnQCJ8_G-^Q@ zNl*HDfGs9sR9H{io8dv{`*zxu!o-I@iQ{bBY3}2;g(Gp3F8{^dWNr=;;zNnRoFEqRT(&{o>B=ROeWg;1R#9iakp5!%(%^U;5LBxHa_vsfdA@`FT)N}=9^{ZL=PXBhf41_ba3anHv z+umxJuEPXZit|8DG5vAUqe5Xy=uy9h`;v=AuQmwDP1zC&qwErybSGM`BKZ=d?Apw` z%(wD9x7;i+pGhc@btpz9CzFZgT$RMPy7!szWh6@Y@_<6r$FqAELStO%uS8s^LSLgh zLW;MfevI+olZZqvc_*kc?Y`Qf#f1W+oLDcA&8I24Znb=_U%#TVrA^~X6jd=tizYVDnT3Q6#rBKlAYrzpVq=<>zkSoEl;SnqI($=D*!#?WY|4} z*)23ds~hPkQDkTJKhc!c<1nN&L{%E0oT)2k4%uE6`gfrvGx&JtM9tx|MRST~^#Nco zLy5Va%VDTb>+S7XNnMDFM#W9^g6B-3>3t84!^?=m*|ia8?tr z8-Ovl@rv0sqqGQG_G&I*zAop}wRiKAP8gJF}MMc;sL zOOZ?1#wf2@7bHMp#JbCljf+?~Nes0t*HtStu5D=5C4Giq7G*@%un)C^b>6JoA>26m z{0mHpuCcfX)+RKpp-OW980)lOCeCE5Ulxqhc0W|+)UO`_t7W;|n34=sHXn%W9*~&c zFgv|MRo!D!-E%Veg|={x-Er^ky9KBueawWsX-$)qd(-8j8TML?b>}hiPd`pw_=PbyRzJbaZz17JjFa z$}N|Eimp3XjYM;c&m+<#uDZ4vhT7h(~xU(m|*WA$6N-ncft5_PdqlPugr z(1hvrET}D&cM!lojXAmY>r0Ef1s_8Yse^@*5lkqFwGo8fNf1B zBNz~zSrr%Og&C$Z7?+pV&mJY))`UsmC(%fhoZPy4;~R$$N!@i>8YL2{rxrG_mIZ$T zo!}TOYKk`}ay@u>?Zll_)l}8kHN3$nFq4u?8WxPvvyug#+CVgWenzGf(2gK1epJg) zQD)MIa2J3U9x1F*3hGmHOvt##h2{)pMEe~kT^_kCh)*OsYb&c8!31*3Ts}LofQrw{ zKQBW$%gU&>Yr%IgAVRulcxO5WrHGkmgQ-oqyJ}r^fd`L2KPeTrF01Xxv)1P2Rs7I5 z240XsLQtcK+H!M}gmSWAoxg@|G}pHR>01hN2F>3)H0j(nlF_cHw3)Zf}0TYl=7l|<6BjpG6)Xve zrNqx7)iAnDR7xpPXCss4cj z@h$+0vFfXhbghfuBDk^TLcIng-cfxWh%q7>Jiw20M3bRK8nXv>WF3z}mQ?jOn zO1f#o=2*L?j}RRuzJ5{E)B>mD!RuTw!Q!?_Tnk@ah}bmIi)=I8QmZ;-s*tOAF@Jjr zWzpHw!?^_f!C$Bj>YP_If?iA$Q?f_WFRHFe#Yiy5HmSsDED)?2QK~t$-qx^pY)!9L6naZ&#jWrv+@Y<@5Z8P-&MwtjzHU@+lBb_fX@O;>F`T zO6mkk9!w^G8D#KrShd=Ef%8R*gLxED3b*`u$7rqvlha4Y$q44< zAfFq=Bcgai$Hu0bde&OVi@ttvX`1Ueez~@OO-<7xGzE|7lJgkMeQrfM$sq$oUqO`>!CSFGJRCnozL|M#mhBGauP(^fsa&38rI%yeAVOIK2(>pZfG{}Xd z7=5P2l3}c^h=bl_Tj7RDc5XOr5jiJmDHlS}jRjffaxF;uJ9NO=%EBBElS zh7C4Mp8^d5y@Ijm1gXR&fxbnYPE_k(oE7fH3sve8dnh!!^>tje#EmLUH23}92e6T_ z(QKFq=O#5xD{d@TjMid(E8ScQx}~h4@Ani0lw8Vif&_SUoOW{Rybgj2u;PA_?K@L; z>^lFV_As*tQ_s7KQg-d)c;a+qP}nHukb@+qOBEZQHi_s_N9a@x4Fw zPMrHi%$PsMj2JOyX6t>lY}tFuyS$*M@mZ3mh#J~}WF_;CJT6-e48*#mks|2zaH59X@9g=_7%|I~EX^ zZamg6JqgL4$Ij|6+>&3R6mKUUC&(&wp^!G(gz6oF#k)nmtbp&1P*GvnJA=O{KAA*) zlW1H$pXh$^s(l?>9;qA|sk6t8S0v1%kyM0d9}oB|t0txf(fYY#sHk(u$A8n4x&S^j z!h3OvAQNRzTOty6vdf(ARsun?i0#YFQ0xr%@;TI}(vZ3DH<|MOp3GgNL}C-28v|y-p;-(Bt=goKfD;;qMp-Wa=2ITrq`@)^`}>3GrGGD zY3Zp&y04dmg>Z?RsUqU{1ijyG4Vg*rr=4&Ir}?V~*Fq5&OhoA$XGst-MaQ!YBPW^8 zsB^Ht%bEcs(5Z}FfLmH2s`bk}h9(B?C=OTiVFA}$hAP9hbOS1YZb&S~v_L2hH#8d4 zXY$^k5PDpL&`kOr*xmsJ*H@ah%Uf1}GIV%vqnh8(f?!%|`RPTBtk*g)ekN)G{X zaZleu116wnkOy>Mn?SrfNvzL7?;jz&KU27UwjomJz9aT1 zfLt4U_&=hDd-l=o5N(^b8D5bWMx_=m`u}`YPkLzk7lqk?8*zbp`-s$PT0S zw0$rP2o|C{sSuVBm{1(S;OvlnItF(Pka&4mrr&pBm=LdYhX7`5;~23y zchyaI>S(!0EV+WaF^7ZjM==kPXEh8O6YRBXmf<8WV<`-&mQ>8EsbOvs^fkrt_$x5c z3x;*4sAt2%VrJqEQ=xC8!Y#|D8}#=bmUSuPN=HNBAU&Yb_+`6AR5r>y+#}Wq2fknH z{enh+E48~{lO`A}p|k47GxP3WC5Hceje#S(KHaKJj9H=-_w5^_o&r@aM#mO!2?0J>d8R*CnuQanNtTY#0bRc(3vpQc5C<>{i z=Tl9nVE3b)Vv|&8Nr5@&WOYz0>7eQ~aF<`>(XYv?3204gb2vNpSYj?k!p(a~E4TYU z-#oJ?bCir@yQe+;`ugy?*J)!>SRsvg-bS9QVRSW+bJS@iJCBH~*+%Yo#_Z6gcX2__ zM{UO)km0Daj<+R*VK&xr84L+bHoK8x6OLin_s)W*dCT7^|z{Vk+VM$$Ku z51$jpq+^^xTcBK=>5DK@WbOb#UgWJL-5$6P^7=RHJ1*-xEy)kj%(%_MxJ~*Z46Lj+ zuKeq9C2Y-0TkkM;JGmB@!(lw`nz?> z%@3nbEweY?z+H%i8zA--41g% zbVBNJSNb4NaHx zcj?ODI!(}cnbre7_8@P;v{dG-=&=Egl!0{LG<(+)jOk%O2vg($NBRIoq5b#*?8#%% z-Xk&82{UBrIsG1YiYYr!C`_sUK)T!>b)J33Jgk}9{kpr4AvNx3-!bwVh5q6&*_3(* zMP~h#A`dDF>V*1u<;+WdbNB<*2vR?p082o$zt`OcxbK$J?bTphio7^4WceS-Iwsm8 z#RYc?Y9>L-zb{d7n760Dxr9Y6LVIMREJ?29-6C+#2jUqi-#M8Vm&O*$%*wpn0s|#O z2oFw&=-$G`7Qua+*P0l@vWFrmgsKC$yO^)PScbj*JRBnOyO-@<&GCS`vGuA5ecZ-3 zm9xt3B^^H~B|X(f+Ibh{%jY$Gh{oPOW_lB8LVzH5mViZtD6sfHm8)yMt`9l z?Vor`Dx^vGs~r?f(-e3!H{-DoaoS_C*Syov()iv}W;TUB@)f%~f-3b-zLxBtPg(3k4o0inJp7HC2Jhf@JGSUo_ckN^>^$LDp7==>2;F!7xDzdm zoIPTZd<|E(*?}20Gfo_#$7A%HdEuLd>^rXBpXvVuI?EAhxm~6#83Sn3$Z6yfbfHte z!sns73t;vlOh>CUh)kAic%!0(RQu7zyse*#Dwi4dez4?xwYk?AaTh%OxQIrl5q!+^ z3*Xw4u*VXvx9DSZE(7f>3RVna_3@w-kov1bHZom>dc1X?_Cvq))I`fqNCV_PQ+p_&%Dz?cWgTKxv8Re{R)&k6c)H~`e({C>>PcteRQBB4>a-m z<)ZCaHK97jJM$!a=kz8=M`u<;b_l9MklJ2&24E-C;?rvn7c932FSPP%Z)6;O>>_sA zxagg*zW?GoJ;|y$`-GfdICb{$Vl)LDFXH<|pza%Fj7Q~;FO^v(ec?yDYo=+Scf)@i*y(`~(8*0S9SW!ri)KCo%+q4(N!X5T*OKL_s_ zzsg4N4&A^ae1%MoN=@?`d4y)lAR^B&XiC|@7JN>6%Hym9W5gC4s%GMg^3qpmo`^qK zj(vMddfD8F4sWnj(u0+V&;D>R2o5G`%!Y#*yN($@oU9wy?Q!||N(v_xBn#5#Bg~09 zdJLMDheU3jQ|(J_xGM2JQZ*fK5!4{vus!0oeUc7KokQcs_fgnmt-y|*<$6>|3**X1 z#|tfQgF-z}QfA4?r;9ov2%1sM_Jo}tLCXWv3;4K0amUdstZEPKa)*iqxZMG7N_~6( zJ$l7e-ThFH#>+?J>o<9&2)SkAM(gc^x|Pxn-PyNkgS#nC?1A|QAABY1i2}Q&;tu13 zfcjDrjv0jq1XB)2S}PD=8e%G#MrbprVH3!r0R{!*$+!)J)G61}{j5s1>SaNJ>|&ZKcR(KrO42@3h%UOgCn&JY6gJH0 zaSb_ByIp}+c7}eJX(916KFXeEV)u&~im|F{9%Twp2Wig%)7FcF9?vhOA2p-n#@~>~ z(Z)L+9+G=1z@+e{^5lFHx%vpcp;pHcG$9{#uDy0>gd-(%5iO78u;1eld`fI1Q2tQL zMI7CDDvCt!#Q;Q9e4JG9yk#Qq;Aw_at`rps*67~5<#L#}CWxM_IH0op!*l*%Bc(t8q$IP?r(sPKT1R~i_M;!MFGRzF5Imch8Y?V#PXmuBNvm$ zNjBNT)7KruF0vQ&on-S=Tt|ZrR~1vy2cvaFys>(I6-^dHaeICm_%(Rz%nhf|8Vm+v z4eAni@61r*DJ(G@&kRJHy%281ZaouWVK&sm}y{R`~zcDTJh81z^;<$`!g zyy++#DwbBhUFVln$ieVWYJ8V`xoA5wRd44~OEB^>bsFVhAEUa6ZZOOrR7hcut0(Z~ ztd3lAun=p2tBDi$x%iK+Gj@4fca8n}K&uLm6()_{rQ1>TmH1_1sYq$;TwydP(^D?6 zQs$YB!jOyT);brfUXyjEp(NYHYQDJ)2z^{}u5HBAn!V0OVu$Nv$iCtF?AD(Qjz!qw za?9g9#^55M+At5N|htLe@-Wk z<)p8}?_a;J|D%HZKb=mQe|-I)=}g{I!csvW-U%l0k5e>11H)g{Y$l)y@|D+udQ41O zY|{UuaG}OFMyj!TS<;E6`Dt$ES(*CJ&z=aEk=Rx6^l7$dd8%i*Ur@}!Lyk3hBaaq( z$O(_vbJh;W%|lM(+gq>L4$>U(mP#29Lk60s4gpL29vF*5wvh379kiV&0ZHKRc5PG| zXhld!5vU=zW3wjnEU8WqDQJ^KAY>pV%aw?z=G&dQLY)sVSRlp(DvCvqL4h?=fOzXtI$9mM7NA|kC zUmvC>I)x{TUuzH16Dpw@cs3obuHWoDYOBm?f$%TQA)>cxsr{q0v(RSbu4j zZs?J2dax*T#tt*Doy930u0&_jaf&_FNL|-8?ifun(lFXEm|*4+edLnDre4$7HFl3W zu|a)P*EQi7C=xk`K{cXeW5x5hXUDQBfUT&Qow($KBhPPJ|M$a$YMnEWy=rA6; z5GTZqRzy8d8ckTZ>Oi(wna(aYR5vwt=e{ zuEmm)Z2TcK-+olrM$H;Iq-e(AAs(#7)~;g8pk4tt*l;7Xu!>CJfRcGC7{K$0-QxE5 zc^-;cy3k#6UVu|L^v*44_!KyL!Q%5YXJ~;Mr*OhK>)0ZJ_ZP|bCjGXapfdeOL+&KB zs+CX_F&shsNacv|4fA{sLeSQf0@yufPtz5 z#}q7MpWn-=nRPj-jhFZryy|eQ1~_qzRrnWNb+|SIo(j_yU>bY@PfFlcnKPV}z09U@ zPf+T;A$78EsmJIhCe(DJ?=V$6Lh7G^{Z&HuQc4gF-@h(qN_8=V5gmJNK{fpRpWMK$ zLcSDHJ~8R|oFpiAsvhfSno3~OVuw=R1T)3NgiN>L=1$OH* z6t`Ygo0D;zTTqUXQZatlU55)C4(U`vTDw6czsq_(EmWW~j;V%V?b-6uLJR$57scq+ z`oz164ik;dq#K>1ncy`^gj38}J)wpgc4^u9a<|Lg;9~tnNFC1tVJg=7e0hYKT9-vE z5Z#go5SU1}_N=%;3Y3w-Z$ptrX^bjzh?ONM!}SVw(Cki01xH5>?TJ@WESl21vliP) zh^fY^g32=!xk$ttzXZ=s$~9Guq<>_?>g>`^HAli5%Yvdz5gW#^P)tjeHZE3>si9^a z$QUiepr&;MR|Pg;kNV()^nk^PjZN~_b_EDd8Lp5Z+t#^cS++Q3Q=MLBW#kz=v|zO8 z*Y-jNyJ_P4SC*QxC|wL6#^q6UDx>VEC&rw_dWm6Ehzq8x4ezpSN^|&fRnrVDnSh?j z`Rzn^8Dick5{Px_d*hPkAs9cYciD=)Nk8*HYqhxU-2C6GiZB`vvu_g{v+-%LV{%o1h94 z#t=o+)Ube*zmR#@6uA7jz%B!)s$k*nn=}7MrM>&)YgOV%|HkSMT)x{jjN*F&-pJe! z8rYfE0lE%p3=#6koXP%aKC1(Ecp0vdF+f%Foef-ag=6Km@HGSC-k~8}F8no#ycS16 zw~#=ufaLhERmQMENjMdP0}1&#e#@1DHJM-y?(ulBk#Y>^o+Kr{y+1e|;#)E4d`?)? zNUjj6POuR{`Ejm=CB@!mErQMf+BA!d9Ct=ewQuri1Mz5#6(60pCF~k)x;wk7?O3XwLQ#xA_fcMoCp<#(U?IzgDv@vh{|$z z6k8OvkP3RV?>DQqh<%{Ncwjrl@KC7L-AsoW&Pw-Q1L@v&5a;Moinl!<%s7T5h5Wx% z$i72z&tRLyPqe;|EBJ4T;)uG%3oaEiG?)h)&JRMyw+JP-4ATcl@0xrhHC*<$7z|qk zQzx&edb?cS5?Ojk8)|K#cAr2ois_8ZC6#xGL-Znn=>@!l;ScnxyKy`1Z)H*s#vW+Emkg&HB{U*R(de{+>pT+0M^T@5ay9&K2~>j_*Fjuf|2LfZ0HF zq`_7E^MEoqLr3^MeDPew!6y8DNFzcX)5+1Isjvks3nlplloILKK^!KWdK@-GSWOGI z{USou?<)B<`o;x7GH#9PElblx|4yB$e;sp8cD7)74pR6NR(aFebn#kWdx}l_1M;Km zh^x$o&DnYyGfGJdSGw>f?^1M;G|@61!)5g5P*sr#h9=*RJ%!4SfjR^eu0yu?decGt zZ`>pPP8?%lcmMq(mux8_Q%aFgk@1EPZh`w#v!M)-B-R88M{NDEZ z&Z#!=HriI_#*r{OzC$q+IqKmNghJ@>ET(Sm5$Mc{#Y%YBywRr-MA-~ms&9~~AP#;k z3(7gRh>SqwCqb!<+SG3)Nz@JWT~})dsY|D`2t9CQm`6?5b(wJ4aSVCzr*vB{-T~*} zQ17asu2t#MXkOfkBYl{(H~q-jgin%98YzvI&H6@XQ2|dg|IHY|QkAX?43MP1%b8X}j8V#)E8EMx_oJ zI!CUqm6cRHIHWB3LuXnYc66r1nxj>dML>@HfdW#<)=Ec{SvH0f9FalET%>kWk#>DVw9oe2nmYYM)MG3D! z;Z&0z9J?7eZ^eXrlD#l>Rtd#3ift5A0#!AksC(!{;X1${F`5FNn8Xe`^c3n{) z+g=gZU~LS0C|zKkQuXO?7>WrNmaJNX{18|eG;{T$d?i3ICha`@Qk^;g5r&FIyUHLr z#1^KKrE1PTJVfeD{gFMJGc=J4rSB~S68Ea~2(#C@V{5Q;_OZ9$AgPxWFk-JxkZeo40c4kpx0 zst2$q)O2s`v2*$!l0Gszc^HC#QNUbZrp#)2f-OO7(pa-+UZI}O4AjkZb2Dj#%6|YZ zNtBX>&UqB3kNqG}io0+gFUuDDm{utMCdygUiCbLBcVr#sA+*6s3sA;^vJZ$swO)3> zZ8@z2ksW5mVFH;(c8}$+<(KU1A92ZwmOEAV&vc<4V#i68FDz8(gRcXY9dgI126_NS z1WGMb6@x}{Zc8J#+yLRNHiET9xrW8L0m$MsI%LMUL3C;DV*9iDJAuptCE9n!xIr?5 zXVK_`KSF2|*cbN^Z{{1N^D|v9GW>BnON;4rsREce3){zrZE6Ku-SVT@_W1z4KpBJZ zQr+hDodEOF-NyBy0pp^slH7{;iwTbIO8A!wsmBud(?NL?1;MyW@0P=Z-aWyy?n?oA z0rwEzUcuK4JP>r@bqcj%#zJz_-5$X6hT#R-(>z0c5(iz}e!=q+Z^{^YAmu>qdCtAk z_fXze_4UBxcna=X0r4TfDuA;QlHEr2v4QlE+y?ah_P+u5R@?OgqEkKiq|kt~~jHGeW)D zhc?QG_oFT?Z%OD@y&Ef3^F2%uEY?;opBVN#mR)EG>8a~iLR)a9pr1nfd|v%8iJ9yE z=&k73y_3(6v$%?IR)>d9?C(@1&m-<@zidD+DjQ#oC5o%QAd(vrvg50lZ1fmxucZG@ z5>%Gre(PJtKu;FtNoML$8mphtD%vw#Ilt?x$oc1e8|Myl+O$I(pr9q}h`DdqECRf*;guJ#sBkl(RIGDnxn1rf6F zA$c4ib8(^|1X4s|W_sd-UMj^=PHxic9h&usXJ`WmV5tA9uOzF|{5BZUCE)N->A2M~ zTyXEX_YZQQR)#RyP}db2oDp)HTZ(5usa6O^nrTMWqGSi}RgXt!AMB}o)OIX&U;+!B z7cMdzK#>+~!5(;UDV-J4$R1)^7^q}IVWR4kr9EA~AXG6{J|EhSZT-N$H*JJBZKg!C zD|6CVhI-#4(pCSbbq{EB;_FWvJlp{xG=U^t$}WfIX6(_UDF*Crw|o3Y>TGaemPzfd zVONZbJ5pux0H#W`)M9&^w9A0}#B8A|K?(Ht4Et{-oj~7ah?Mmxszn;{GA{Z&*M5aq z!XY%$CHNX;uRTu_Kc3;)6Z{<)q)0!ObN0&?ddb#gb1kW+KP2nhgwZe2N0EFIw$UA_ zynYeYP7Ukhqc$QSCFNJ_5M+4?-;)EH)+NL66?3vwlA0B>w!G;@QQR9cSI6ZMO=KC4 z?lxe8+PYieq+^EphnAJ<8pJ;e6_b@+=icQg5ie$3_MT3#c44ClDcIi(8!MAXcFB!j zF5jFxJm@RhOl+aO+Ba%zdu+mvU2u&)L1ck8RTnT@)G2(eAkX*4&AV=2@OcCOl%sP;i2|u zG&|uV4y~zUmFxo@^uPb4jYGTCY08xrORn?8H*+N`Y=w+%+hEcxH7=JVOt7Ol;&*C1 z3VCpisess2252WVcWgE`_^)vVvwl6EV!HxH;N@L(VUwL>z0skR+~_PALsw8AP$y4h z6q|#HhFbqPK~|xT5k@}Hm>xV83>v*&@kS*U2RrTdYAoIiOC^k2`)W2bpLlhkZ=F@i z)isjt^FCjGMcw|1vPaE!kK<#&9Vm8RjZ`+;uAJ{&Y4B=wztNq*?FqL_8(nerm{X#> zT+99R`zQaa!~ZbKhWPa>7xDkjT;;#`pNh)=FZoMWUQ_&+<3S36H0BOoI_0Nd!zcXFLDkYNJU*u2EL3N^1O36-kxn3PNj64qq zC#^TXNb8XPvi;@%<%awS7t9Dt7h)|I^ct^$Oi&8XXk`VGV{g1N^aA;Ha42N81VQS|nnnY*AAtFm)Tbd2cVL3%1E_qBrd24!xuW2UJNlu=3 z+@@|6D$J73n*8kVV;FLV9$9Rig62+Ya3W`$$&;wx8HJcdg7O)c zm{_Y%HmQvzo(zARj7-bwY_~-v*o#a&DR^cj$j?ego38c@9WX07=+B$~87OZqE|3yw zjlf0erhHchR@qdXtKDx2@ITZO<*v+Q@o=aR22S)tXBz65F~mxG&59-aDRo+>pLYiw zZA+}+_GssHRrs824xJm9QDIBy`kXdg-nyucA4JP>60Jz>-@g^Aja#t8Qbe(gyGK{> z#B1PCdUHBMu0p=)$<&>g|C|%d)lm{?#6ULm#5V!%1h$vk= z<%aAi)w@fYD1qg7kf>%|D#D72y8Y)-bf-|BMkZC!srC0L?@@Z30zYF6#d>|X?8V2U z?JcU$=qO;DLR3?38LCj|VgcjZ#WOd!r1h~BigE)bsK!kwcg%bxIVoCDqEBG>T~`St^=Tis8y14U%~a=IN0b>O*ov$28ij)&{On zuUqOO$5h&_?E;ynp39_CASqv1#V^Xv(9q$-exLV=Z=r*S5)w4#l-nCs05a3hF$+v{ zOE>V?0`k*F>@w=*-3FMszr|+{UWB9CEP#1<^6L=Tq~*x3!-ZvH`LJVPF$GErLWIe& zp+!6i^4zT!T4*}GaX#Ewn+pvzH<2SnjBpR)5X932kzj|W{`PtWj?|$7&E*kfSZrkY z$b7iDFn_G)BUWXvphDn13lj~y-(j>XxeXR<85Hgyg<<$Er0`W2!Ug7$Av5&zG5n1l z@Hwt=Pq|#TFT;`{H%yBInMuBW(mCNft%dm@>TbTG=bi8TP5BnsPkPHnSi-YvYW3^p z!=z%Ck6vFmZ5Fs*Cz(cxe zQ7cGc$d&s6{A6DQ5-a~Nd14{FNBm3+TFwD#DMdd*Th9&{xL2c6u30nS8oMY_Pr>eR zbZ@k1d|RMBb8PD-e!n^!{$u?p%&=#;!6^0)k(A76ntI**`ga+2m8^E2TLCJq_(kE+ zIlj1gYV#l%C3mpG=tAhgxh>JE4a9SBLqUjPFKawhjFz3&zA4L!*fYVbayrO2NKP)q zFT{;u0^uG5ih@-IQXm>UgV4$mMgHUxiUfX9FHzB~KV9DK~CR z&_WzvqyQ>I&yKjjaI&6>O7ezgWxTPgI7VI~+5jyO#N zj=6l>h|w4_7;28-&mnaS7!g2`f_FCG^6UsmW)i)8$h^>``L8wpF{i4%>@FS2MET}6 zLItHG{La_m!P520a&)VuSJSv97Lp5zQ#LZ8K*N7+08NjV>RTrfX&bC_L9le_WCksU9?zTW@u*V+O;^-ImrEWW zJ6-*~chgb>8C86XKU=IU7}yp+jrMq11wWjQRZgB$<2*|H==K2!N0vEebr=$2E1(F= z{7yTJUqefXuoGQS;g>P4$Z(|Zmcn=powP|o49pj&=OkAHo+r;ygi)6QYFcs z<_QKu;wYZh39?Z-CknDrJ^l{1RX9}*wpBU}gxso}9YKC?6U>!AO@#E3%>O{{(94&j zdc+9kt(^S>iKB9gzD?G%*^E*fXQ=1OF(jN$Cq^;!>8w{{7y%M{GjN1VT-*b(gw%Mg zU0aZjL~4^<&kRUy)Q@o-r%X@NKJP3N1Q{RSOhU3m5VxWes;xXklktTO9<^kvM9&yQ6P*yo~DlGBb`h;UPGDZBQNNC~!_vpnMNnYI+Q* z+E6Wk-@$G_A)8*uG?}`Q7A8#i;Q%(?uY%rT{pVH4%&Z6Z4Y?VH9cnC7HC9>Vtni~X zqbsad&75Tpu_`&N#+2~qCf~Kjf*tR;6Yh^kDLF=VJel(b(6LQ!4#VQ$G_D&#;1r>* zx1z)G#wCyN2VH}N`!_}pY0fZ4sfWAVI7BE%4p;94>e|V4xOOFhL$#BLgU{az*;McM ziM3d{jj7s@Y{zxah-{G>YR4RZo$+-#2(28|z2o^&K~$p}xobB>XKbx#B|J>$J3Bf^ z>&`mE&NwP$V#*y18)n#j9L^Udtz0aT%1Zs_%LVk2z9MDSATJABoizn|=g%Z6W+^D_ zxu%xJq#m3t5m!m=oBNu9+@QEg;*iY=Vr8>|5d3X3YL%i;PajD%%N8s&ixP8vtCjfs zqWbO!jQDVQ2l$oV)v0K;BPr zG+qN`-5|M1Z%zDbA+u1!7W^j8@m$vV{SaRpWv?FjIG<+qoEgvjTsmU5m&$XukyL-k zZq>3|7IvI1OCC6%7%!Yrxa#_3>Gf0j{bdDc7cGdW=9NsE#Y;og7sf^sojU@b2;XVt zP{~o#2;~XsRr+Y;Dd}Yj5o+Mo3G9PKcXly=aQ)watXMpAQY{{VY8OtSXAskf>VymJ z?meS*_s@V>fF?jJSv=FxEFU3fkk#pC@n^~Fgm%9$eIidFwM*tSXpzz=>NNGE`&6TK z4>7Ec#SG!65X@tvw0DVFgK<~j+z=4KN61=)hsXOJ;^!)1|K=tv%2fKP`T@a!w> z<4n0b-`WdgH_zuc?MP$qSg)u#8nJe3OT`hqtDjx1j zrS3eEP-M3mFo7cv>kztE9`4<6x~RH(6H}E|+_ki~>zSb|<;b;Ur*Q4oU9Q}%o-*9$!>!D1j6_7VfU3_C~*?D6`kD8@gc*h&lquMG7b{Hso!*ht^St0Wr zFv+&CA`QYS#=L|xZdog4<)or0vEl`NUL)Z#O-WW9hWf{yr-c^Ub0)xl4j+oP+|a4!3s&2Xwc zT5X;eV-c%G*05f~Bgh3S{>6tRfoO^y8O;0@u6QE1kBS^@H}n^Q!!HfojHG*c1W~Wk zQuZM0ItYWi6HXLpb90-svZ1Jb1OF&V*0#gg`^C zj1M_^f2RcmGPrC%pJ^lvo8tr^ZrF0NvLIaH0luI`?(kVo0jx6wDF90xI~3V^Fuuc{ z9nYj51QN;a{E4RAN?soQt96lC-NtXuP4gBZb&;^}tly`{v<^(2d7Fhao1B6~*+h@t zW>54lFivij=uOK<+FJ6e^2eMKR92#=D9EYqV*$iu72}ZBSc%@F8R8A;hx{@LUt*B@ zEA1HzpSSR5F2VB@blgf`#E<0tnFD{V13jykTf9(U6Y?w=a?nZIhIz;nq|AZEeqhe? zPVUe#`g_pgnRfTMLw0g=yNhVGiC;ot}*5k%zB&%M+8GAFt-HR}|;tAZrZ+UsgG;@Yo}ksji@Ksus+_ap>>biKQ#u`JE%g z;ge{ZSKZf~%uACzP7R~83{m=&kvT8r$#uGur}jJI_QL|FsPnKs0dfb7K4HN|T*Wmv zTcdcJvi33L4M~ERS2&V*A&Wg8?d*d_*ZdmimlRgMs-2g4q|! z;#sMpAa{@QmBXe)Pb0$%zZo*)Ml84vs;jzP(xv5CgQNdmyXnb=CxWTpf)h9J@Z;{I zY9^B1bC*9&y^k4y6s){!Y)7?k$R!bG<0%cE<{R;dJ2(6HkSPR+vS z9A_%=8H@`E(W7W-t9=@us+ze=_PmPd>69!1I{CG|R#yJpR3n|V;rl12^eL$n01 z^;6`fuZKXhi8A%ro@3GE6VOUBwqE7fH8>{AST1#F_Dc$y1RQL;TNvdzsmZ1aG}Sm+ zzx)Q5$-2e&s6x{ABWDV1a(^k<)f0iH-ic(b%rv|4>=iOEJZ1w9O-j$QhHe~fztE!@ zN5xF5{=QSS_DRL>t5C~JNI$ZS8Y5;W>8W4gx1E*4JTzl?qUSpYAvkavIO=ck&(64o zj8>PDbdybJH9pA^Ce&NReC9M$;&ZEzxpB7ZuuF%TkT6fc|Ql3fYUn;EAwDyXp7T#jq6H0gYt_N3Il6H5@o|$H|UfhW& zIYY(VSlt}j{SSHlf;ERE+5o9L+v-D?E@)1b2b9Yr8ttKM?FnDq-(R!`nF0<_wa1|z zFnqyxOkFv-2NQ45D|b>|;WLgry}qG zuFc4LgXk7#jHZv+MH6XgWk>L@W3l>%2$slw3b}Bz0yxhn~gC`#WV^-lgM z9gp&17sE zv4@9_#}(~hW4JGigpf3dw;StlHt&Ajln-LCAaT6urMvSsozB$z{rw7|kM0DmGPl}5 zhR3uRb5U|FOHc2(NOzrPE8FIog6(Z%Gf$6>*~VmZ%oaSQv&D#U9(1|sDq)u1|2Q;#=3G}V{4AFm0z};u;*`M1F^9b44Bnsq+1ho|GR``7^*EX;ahM= zlQRV|)l3bTYdf=~bz@x~>?qXGN`PQ%I{i(9}+_R1U^-Kyg8jvlI*t==aqAOFC4Ccfvq8 z#KOnvpbr8Ma##Zw&7dZE8piOckt!4RC&sJQk zBm?dWe9Tp%*56yO;YO%>+$&UEZowvJznBCaZ*?fz-4M;_j;E-{o!?DjSrLB~YO~PG zjR4u^^d&DqMBgJ3#K+lAxC%VGNa-DOUytD##|{12;p2f}_XM|26Py}|>5U`;eU$-EnTkvnUXj-=boL8jo z^L1S!eKJQNxCy*>y)%r5=B(6^PukOL3By73tQdfnTPOJ7Usb~}#vL$^K)-$={Kunl z{`cX<_+Q~wtfXUy_)l@%Kl#eg>UVLmrAQN0la7US)cRxaVi7_mgv?Ip75Ij&+vv5v z;J)4Mf#2(XAf^w!&$AfD4Ruk(Yf$3kw%5!i$I0~O8XjM-512jN2DFpwQy4+_0Z7ie z$!Jrk|2f1_J9G%u%sV%7P)xUwM7d6WP6Pp9AHr`4Cl^fT#N$M`%@WA6au%us`VAeE ze8w$<0YZ(@c=S6Y_l{S{mayg$gpxS?upFILG(=KnG~_$(g+D|m^rd|RDJEe)78{pb z?C$hYy(8q7-cEn6 z4<)2{c_;PW9T8gx${$XPDQA!G*>+*OOXo{18pNw(^qdzE!{e0wu2a3SV7MUevLgt) zLPOj~UF5JJ2x)~;wc8TTO-Tyb#uZC=EsvFPpQdYUt7t3b#8@9D-z(@ zGJ6l?K+k>=b{psBov%fxbB%X5yKsljyx|Dnu^)Z{RTb}!3$12Bd$vD1Ef6crZKt43 zW|!(6o!0zLR<+X8_l;i5^(dnRyNdNb!_V!2>aZ22G08xN1AfG?Vl^%iPqQ+k@EL&# z;D7|f@&k@d$eb9PDf4ZcZL6v@w2L>nkvF_Cs{SBKfvRRSNp_|=q=`%APoZ5LpuD2# z&ofW15YIzswAGKigset!fXTGj3Yk;KP5)P64r^)TDfT~L$on7t$)*0+Fch_Ov@viN zaCUaIFm!SLchzLIqKuT*znpJUi)y2L%FaToA$81A(`~gWK;qRQ^N|&S_AL{l##YCq z)7a$Z{gwiX@lWASYc1Sr20wE0SC>`Jj&rv?Yf0DVtiA zMzm2Ux`TM3_w2{6=gBOB56}A6J6v4J)0N5DV1S$ zg09b3ag$4aXg0;xA?tdzusfJUTRo@_S+tGI3Zgwyq&{c7VLc^K3L~&V*AS)ip4(Nf zHv6FW{1)Lbn7DHz`lH1mj%gYSe9( zVKV%yz+$eufQGviKxmQa?U$63glt+4N~W2)_cw|Bc!rwW=nw}-XfrkMkR@wa{0RuR z&=KfAA+hd6v6J!p*RQ4j*v}yFzlMaei~WC}i%|S;vvQ>losJs8-@Wn($i-W#Eh6Cz zWpvS`#45}-8L!86QC9;E8<)1>pTtOf^av7*=(%4C!(5Fp>QxZsa9$_djW63y$J3KD zdU`#7$c@qsi1o}FjjuaM>eEBjh0 z^K%!Cj0k2aPG_7#&IV3toKlx8gS0Z7+zCm(H0h8&uVw-_(Pp@iDiyE7_r|wg6I9jM zJ)UAjJ@mhDqeYR=+&_Brkb$I6_rjM#v5m9L2D=U6SlQE7dvssta|D zix{6pSy~d30K=SD3<@ObWuKz8v|4nGsA-t8B+JAa7 z)7ulrNa7%*29E#!O_UH^O@&{C4-jqO2gg@W&772Bq)*2(Bc;~VT2bv(PgRAwmcp{u z={pZXXHlgotJQ2;TGs4*&8e-vs%-8luD$7g|K90tB$192^!=RS_y^N<>v_nw<8ae` z`%s!eoCES5l0n*HUXo$ja?Z%~w#_&yS+nKbk}+!=yD4F0Q|UZ&WZOC{$=q7JDGA+t z49kRNbl_FW>8X-A*^f+f&|91h?3pfGJBW0{>QS$qLpX=V5YVGupTmH}YHUz<6BBX(ps|TLfJUox zk8##dUqXS=98b#wI|@8U<8N%N9b#NKI|mTf6Il;K=dPjMTt$8uI@mw;iPpuK30X~q zyf3$eyvs;mAL?T*?86uc#TGBFUN8yDQ$`SBX6N(pGDSppMDd{XxQ-_JY)rYcK|^I$ z>r<{_&usvf6)u^wcNWblf_WUEaJvfuVME8%+I9F$>coNEJm|=Z^y+x5o>Ai1DMR{! zHmltXe}G$YVWEDDx}J4+ivm+YUdrmYkw?Xw#gbUlFZlG!FP?^F&ULpXcjc}5C;Ce;I8!rT9u?#{Smffy zj0IWSTrzOJ8}p^slOZF81juT~V=xpbFhM@7X>o7?d>HCY&5D%LxTefwVQua^4nGh4 zo39v{pe3-J>pRernoY%WtvgEKNa^t_e+`N@3dI7N4HTm?^i8`b>cHxDVX=RSwSZZS z(2PdC>{FxL%mIAVS$ec$S<>f{9QrB(=B+RN;nmovDLWm(&Hgc-YUB;moYK0Zz?^>_ zQSw*UllFqp+4{~!k(Le&|6*`G>UgS*R%te}*)EC}zHg&Wn6Q!Xs7g(3G?W^{VG(LX zF*TTFOuce8(jivuEEqhlKa-E;;I)f6SXShdSoIGgyAVGtY8y|K+h+_c8b|0y!d}GJ zR8Y@3Imu()qD6#0+MhBKY1(;>1VQUbb^3T{5L-uA4KaH#Tgd2{nVCNHxRYy}XtW^U zjxtjSRWkt$#D}iy5gy;cxv4Uoi>N71&g-w+206Itg>1z2ObtTJZ&(Pb% zEU2v|14f}T>C4s=Be2ATZv>R!8C*+U2j&_@(|7;W6Cg%j#KT%;qY#747b#7gnKo5Q z-Yju-L|3#~gczxK66=~sjNV6|akS6(Yh^ff$i!Y5Yi2mn#Yr9)V=(5hm@F$s%dqa&7Nm!d zRZ6fcIiRXz3W*5|(~3V1a|<1`bzn+H$#&S_$m+Z_ObK;^5beCW&kZFGp#F`WPNMuC zC5cwy950Dh=^QTEA$djVQiiNNCSR^pOq<-H0$JW9RGdv2ta7eEQIJrsSSy)Yfvf`I zSfhAmnOviArkPx$bOuG~qfmUI(jibxSN>>{+!GMUW{Os<5_UbzaE^5>YsGC4{AZ+S z7&{pHaV)ys5|xycIi^Yt1B1v4>2!N|P6c$3BAUZWRCIE*;`jUD@WF+sXuR{$C^=7s zt1q z5qXJ_lq(BHl}o%U48iPEIxFli!g!v$@Z?NiZk55qB0D@9-Ya9G)kI|kCJwM}f)DLw zVJ)}CO&g9}>E!puEV74piRt9%vuP#KNfWNeLj)!bTAhE~Y@s2XEpxr-g_N$qn%ayG zlfgvqdz1Joh>qY^B@0^behBzkLx1M%Z@C@h?d$Nq#Ic{$WH`rR-%0e*`H%T*c-?(s zOlDH`NLcpUca~cgmq$burQfv`me)|1c1-blD@F8rlN4p@g8g+JjAVceDbg8F^ zE9*qN*N{ZHg#D$2&he+)l%?~&b0b4VzqZyCCb1Y>9FXthNPl<_j*Cb>nVM@@^ z!K;FWoRH>C3ET7Lk$oJGHKJ^go3!>+UyY)j773zo;L?R-m^5f*XzG$m%$lTiqWXpW zm3^%K7RrRT{#CDmqF%r$3wSK=++UfZYLHn{e)HzMK4l6dUmAstz?i2*(U>5t;NEKb z3|}IJBtTvuxQ$+Tk*|JeuW-@RML&zDsQ#w!bkVeVy_S#oU#+68b2~xLe3(}SKTD_F z?|jiU075{$zwocvUpj?PkKv*+ug`g2X)G1{+|j%fu+h);N`*p~0SQ%xaIRL){CU9- zEbBA4(c|s>g^>QiRS*;G(LF=K^H_BB0(s(vD3?p-2xwN$baIR2({+bN+#04s(%K1f zwT|U|%KjEW3m~T8lgR8-La`6la6YjokdsL4LiqS~lR|R#!J&vif4Vk>Lf@R>U>q|; zbM`raDtR86bC2@P+>1kVOmh1a;b0qPRlgv5f6%IdI>hJc!JJ;T}DPfd8`^t(fK_n?4j5!=-JZfE%% zvO|5zCv=Z6{h2^8fiXccfHi?xA)6q*Me_hcwRgd|?+CTGvkbg?`kDNtp}J@uwNA}_ zl>Sb@89a|6(p~)ma9?RuAQh0O9?wwJ)Ol#_()t3wzy6v*P$Q}n*0ucg9Y{r<&FoU) zA6e1GnMdV~zL35^OI^H49wIuh=^3QqkB9KWnnYohnc}3l&!8SF)h(mYUod5ziNl zIx&eJG2-U2;)XrI&@iI=CSpW!hrJz)!J#{p^P zw)%f>pl=hg5l>;+a}I0z;BmHC``Gx#cz)Z>C3YReh3ygbr56Fskb&t)zKM$jhiw=d z$EG{8OznlflAE$<(ffpcgU~E|JqkE3Fy%)DETfQ*gkY58MtU-FoS{k$7-v#Z2zXjK zC=c)8w41oZrnrC^Z*hcFB}-_yDV{krlX>%hg?Fu71;$Jt&nu zJeO8Dc`4!?-W72+OGur7Za5`EbQM`(+F?sRAH0BHo!*RDr;@t z5L^c`3|5!C&^R&L?UpYKM1zI(m>am9tOoT$Em9hMJ=@<-T+v zdMDFxh3E#Y4W1K#L%TF zmWr>IT9+?|tzZ1zaXfqK(*03C{bq5ojE7kel-B0;_ak8)JFoalIo0WiS0jB_N7l;0 zfKR5@6$f9f+^S8pnp+Sv7 zrErq08Hz{O-;{gyiUUE;*pUShZhvRm0^4UrJh`F?4@O**VrL||Vl59$UA=|!T(fzi z%R;d?XUkG03XmCG~cXZ&|)7JStU_BgVxx#fba3-Do2!QwZH|M{qQdI!s0Gy zzo#yslj^-IZ`M{PnwvwG%@G%Gl3D=7%n??bzuob}tE=t|oIMhpJrkS*6yFTiD|+j_ zTzmA+UiBwI?hKyL_|7ZP&=eZw!JA=mn#&Qht=h4p{GF3Bg_zb@NJ9`;GRtN)^F3@a z$fN3Zx%L2$WSmzrZ45a<6Bmc6NkV9Om~+znMBG-fN|l}Xffmqft-Zr!~ub^a^}r}vRrx5LKO-uNzm7f=nRbp zW%|T1`N=%cJBp$qmseScFNB9$p{#GRFRTaMUw}XL3nYB4IoHA+bQFGI4SK;z3xS)j z!{1tq8t%yz*g2~WpyWTBdRL=b$61F}*oOiXdq>HMS%IHP0cuxfl{!boqXa8bYBVlM z9g^`#JuOd~WG{Y>lUhOUtMR)tSA}=r0g!Y+ryF0)Yg$<)UO_p#U`%747~33!D{;ds z^T0i@wYOi&!)~*TJ&BfYw3@MZqCKIshh7weFa0n#p-{Z$I$~6?4N;_XNA$^1W1B*; zd8GyJG$pJVfk`n&B@5puE#*}?=;HlOM~de{TVnu`7A>^Xx~SuU&0muxqiVtp+uWcP zqm^n2Yy&dAT%$seHdjA~GQ=1Fvv5aB`wJbu?5L@R@j0*zEpMJ zI51gnW|Esv1o7Lye!KKLiMzFIYMxMFZy3RG{o`P-T1(T4o3{(nOQTAG@@SZT zh#u>(ZGJ^QU|E(KC@UV???yFY?m4-IiY?V{8gdu7+bh7*8)`SR-z$8~Lg39vrvueI zZ&cx?OsrH|f&Ed|%)aUQ5VZQ>dSD}u~pTBkhzIgyT+3QToo7WwAb z>~tLD=5Ksn#Ve^GZ!UYQaVmM?9?!p~&kF^XBcuCDS4oBk*fp*y*aUXLD%Ow{OMh3g zcRO(%aT>5kL8ic}LT8;X=6EM8|1jsGmPr1g0m^f7$UO4wP~FRyqf=7RrOWBlFl{ImT)12ztPBK{0OzC&Hp3`BgfHHW@?OS>a_=?Gg*b zCxTeE!oHrwu}(QT7|E9Lw{pOzj9plyJ~ng+9^br?A3Wvd#koJrN~}7`iI!efHt%Jx zw?0vf(kwsZHtEu5?wJOK9MWo(s~8o#_0p8NHA_EaMkUX+E7QJ}tXVytTtT6C@H6xX z1;DC9PLr!Pto&iA&_;5gYTHt==9YUs%ZyG85(`k+wg5{*bUR8KxcBauN#00V!YlFx zablZz3NN}W0jevr_|G!LaFlcOc_zv^LLOro4T(H9kdNp%l>z3f+SBL$qu&BXUyu*c zR@B;U>m(OW@lMKjC=pK zo&Vo`D*tbU{9Ei+hjP~*^57w=ZmL{Lrm2oMUemA59Zk4wra52()$k1;ZK(g`XB})` z?@n0Oy^7fC943W@pvk9^Sr184#3z72$DaJyOAZeth+U_UQG~R}Ok$S7T%TpN0GH4d zx8Ho&@p5a{+)B1Nzj;XKV*2@XI-dOenLIz*@i{~O8+>lWyZ8!!Ymfj3!z=x?r-(=U zV9*0s&8vL|SmJGZtJ@B(gLA;UmcIpllgsBcCk^NprO!ggju?&_l?-lY3XBhmha5&S zon=RtN$(eCL~p+Eq(_v&G+>J7E|OnouLTTbqh6OR48xYYW4cM@Ya)-Ui5)07!F0D= z+)YgF{`Ktxhb2uAoyDF#=oj7uzg~bl{Ug9r0GBSRm|w+HQmP24*(oByRv6A6PAPkI zae1oQ+v@eDs>-oZ#FNd)io9^}m2b<05&crDNIpjdxt-Oi$TQH9+s11Ojp?vZW4&wG z38RXseuj?S@KH6kp73R{Q70Vh0P;Q?hY%Z9YTPTRVn=8Y61*R03mYe{zNc7;yC~y$ zDwCe1Usl)A`6v)LSY=0)Y}1^b6kca(DNBhx)^>++bBrq=jD*Qh00nYeP(`q8S1 zVmElYu)rXzio~F302!ajXYy1s>7sBw;{CQy0C|2VP9M)2I$v@rA}<$VZK@eN1bep{ zY;>ml_-jRr?s=|_M(p|)#7xoS`5ihFvy`08_E6t9DXc^HAP?bKwXRzZ?gGI#>B%7{ zDJk4I?J0qm;d-S#&KF=kfs09+z7;x0d7;5ri?b+EU06!u%nZ3kjW zO>ie-9Vxa>s8N0)#%3+oWCm!aoaSL8Y+q2pV1vzQmsTcViS$<&1-L%0QIX4x;!a5t ze+a$D;o{N@ni3*N1wXc7XlBL?6JEfDL=$+aIB8c8=hT6!bzXT|_6kN?<&N=+x>6?9 zmCPIETM_F}Rdu01tSxtl-p@rqVO#6Kv_xhFsP*2|V>zERO}V%^n2(AFw>bq$%ha1^ zb)t391J;PBGC8KhHnW+0u!*=bJM7H2>$m#laJxi?t}dI<*7Z>uhBBj8Ttpl*g}HnK>`Y@`B{lVKW% zJoTtkT0@?=#UJm2^`U9?|CU}dXHB?nMDc=JSxP%T7iW1-dM98eXOJDMRquT(>vE>} zuMK8mX1Y%(tp%lzlS+G?F~)2cAbc!Hq~5nH#TLVOrDz{N7Nwb@uapz#LYq)*v=I&s zNI2j+;Zv%mrq>~2@T7-Zzf-XweGCy|;1mu0-Y7+5>Npo8^v z7>&&Aeyu|b?S2hIYjwXI4veEU&Sg6->~PTCbEvey-Xi3~ zrX9=BII)qc?GisMVu`Uqaawua3bu7LYj1JLxqu7p7=CtL`Rx*ogCoKnZG$4{LVL9g zR~SM~lvKd8nhAe5ZhoS3;Nf8hZ^L^`~+8{BEe58jo@N;jOLH@U|4yrNh{icG(~etDx!nz|r|--nd?R5v)=Og> zrN(>4FKvAr?@odDx<`LJM(yn>F>Jy&_lNk04@g@GECACMu}yCGw}0hrSI7oP$$=Cm zDn!t2L5K_xg|~_j)3+o*&_9~JkicJxd6S49q#2Vph!duRKerEg(Te_#4fA+66VvoS z3v(Hws=t-R8flfHP79yrmcyS8+K53S^mYe`56xX_7Y)b`>Qi!e1?Y$9 zwioCIyo>5K6VmuriZAB2IWqKCD}WMd7Ptb$^3xsN45C62AK$*6zYtICF6Wn5EM;sT zHXm+3N5DPQTCBklQW+vR zxHMuK&FuaNL{{}6+8tK_W%;0zC1vg-QEx#7q%X49I?}xvrQfw%_h-ymTvPlql9{}QNvP8HVbTkSNu$w>e8ad*jGidw1cp4Kiu^geRct?iv##1g z{mPOv+=#~nV0q!-B9h2iqYB={nvAO!35*IJ1dJ*MJDFUIg`sLwj679>oS4olyW7;`jwIG%)ztq3i%tFt}}aaC^*wE!l_67ut*X#Zt7-OkE=&e73Uw17%65<*@`)H z7%Z(pYy1t&=M1WM0-rwFPc@yV_*%t2o}hBxYZs*XHxg7X3$0fESxq7K=1?IktB@Vz zg>em>MAvVcS}Qw=aVm$TugShkOm?vjGcIdjIVu8mc*{MA< z=f*zzMsa3Gai;NP&Z)gJXJX{EU0ZYHyqx>Cf^m_ewlc@>vf>1W*0aL$Re8$e@zQb0 z$-_UVqF-f(&kZhVS&)!Pp~MsgB55O=zkQoUUK1*uxfAgX`G}5~F?mIoAYK(wLoq09 zbBys0_BooQVYeQLuu>=7dp%pcEN)a3aZNdBR0cMlr$$&XSh%GF@eRt25DF?>Ta1uL zBy95p{wVU8r$>EZyPTtRt@})5Qj_D+gSi=exQqrV81ex!hm6xhpzJN_AE8 zeIjYw5&1&g(m1(8nkHT{Lmtz+W-6$Sz8BN*Cwt68^?FXK+9IYjBR-jq>mlV66=yoj zs&F6ep=*QY1CbAtWR@;IGxuI2^=z}YS7y$l(XyqN0*MZ}eS_AagL_+ZFcpMz^-`m2ePMR zW-9-XbSYZ%Pzlch^KEKyECm%@y{9)V*_F%bVR&Ji&O&`b73Z z_eP^FQn_n%4^KRGx@-Bs-IT996!Be%|BxQ#P|R0mY9wY}D17(EyM3f#=PInA4d29K z^x7eZ?+m?S@^~D&wLT!~PAMr3_Ylcwly@hk`VzH_dxx8{88ET5*Hk)}mo78q%B`Vd zVmw&!Y$o=k{4IE^LG2umHCv>luzR?L_{fNYOM;ZJsMq^_45;gu@r z2b8bP8lu6*3U2vHZu!M%oYOE@=;_ycVyRW=Il}n{Po1x<_P6ky<2;tTAt?3wmu~|M zTu|}UPHyo5SEy2Bj^B$~<~&+QE)K+{O9*0>8f_?G_6d@#`}CTxNy%bYn4iBl&><%U z2F~i<>rm85+!Oc);2bv_KihqfDF4f9@eLl0XczX^uPNgHKULVs8aP|HnlK7D8Ch8T zpOWzy8Q9+f$UzrxSb-pHb#=?W`@aa|SL^HpN_ienohO_V+cJXxuqUBgSE(qL+bJY3 z9(Z*ALC=#AUr|GYLyRVEV(O`DxO}#39upQDSUvF?B3lMinDfFy?kpn=Jy3NOcvE8D zu2+$YIVLQ$m>q^E^{es(02c!v0iy_7?PVP@O%RCVJNrg{y+{cfUCp$owATmFA}Zgh zU_6eA?jb5J@=1#ns>*-;>oCEP3V5-KfBfOkU;k-Hg#MR9BI52WV_WCqQn)J^)P0FKB(acx{T>;^TL;Ek<5>GHEcsO9<_yn*52;N(|eE9a|dqp>^a>4{K-8+ zl(|QX+1<1j7LNGhnS$->D!u>ezL9MmWo;j)qEBhr=>XEOmLg~kiI)E zk}%dSS`TJ_b)EODoN8zK87C-7N3c)j0o z`RrZa`bdp7UL&_RPv|I}!x-HRMUfeAocgKSSJ*0ydW9)Ouz`n=JwA_Vinj>yUWJV! ziu(zz16d#>STa80EQ~QtdXvxuplBK${z)04yaGGdZ3{j59l5?+gcKzlNQH$D;h1cA z3xO9hyLpiR8yrv&+Spe!qd%E)cdSxzLWeaP{%6ayfw$DZ4+*5`W7o^z$NlwK7!~m z?hx?UJF#&~Wj}M-xbZo3WVM&xNi>UxkvsaM?ltb727Uk2ulA55{9bSwKVT_hF$o}? zpWpusCl1YctZkrQzi`0*Q#f(_@51Td<;m(^-q`p7FF{g4MpNZTd*YSz$Gig3Ie!= zLE^=vCa{G0aZe^EZCNwdn2%5JIGk>>oqCpJu0-S0&8o)&=)hGbvaBs00x^yEovaH$s8)(Ku{%@n^3o`88w-o4 zOToP$d=ZZ1SNI4?TdLOZRM#IKw~c&=^U=`&?;w~s)>}H6d8tpdMJ|Js8 z;2=X1>opdcb`^)(67>oiA*`_)6DdL7FPrQ*2Aa(hKm}_iI)%oHXk9ewZ)FU%kaZ{T zmr+n*@m!(W`ggxe@3=&ufVe!o%p_LYs$SNLF*d^na}B@>i2&2Az8V&1z?tM~D;S;8 zBzCbdfb6Mzz918sa!)~ah#)~T9Ga(=ZK)m|7ZY19VVioJD4-;}N@rf%E7gdpRG;jQ zcvEnMh{-~-k4MPhxAF#{$#tPcUO%vhj2PG_`dPFNt4 zfpdahzXaad8EM`!Fr9NS9nn^wqHRxVW}YR$SwCA|;LIrK&{|%M^(3n=)tF97PvK>u zP|&zws4o-alu^**3k>r_$5-5etJA}-hM3@w;bOS7acX3cbwTCUobIo+Co3LJx@ zu~w&}RQO~gTWfKsOH`*1-Dx_5#O^`;k@BcPQIW$s{*|8X0ItqSWb;E-WV$pR-6w6= z2h)uiy6Mn6u0&>VHurv9Re&wfOd{B|QVm0~l(AWHB}$09jLs#K zRk&5F?_xZ2fwO{_KLe_ZMXZKweT8w|C)9|~K;^h^9G}-BxT~4FOm5tTh#by{`3#RM zz!z3_p=KCxgPFb*q@c>eT=;pXs+%0Ycx2T^mOHxRid0$A-JqkZa`m>y1U#%`@+yIQ zLGx*7sWM^zXPQLRo@uP(#6u~S@(kGNtW7NvhN%IRi;*W3R%}Prd@7$F^qXN*p?!0D zU;k*-lj?LKu*uTN;%L`0rqSJ^u~CL-AU4Gg)BAm;M~pH%pCKlvWuwnxSPj%4Ffvqh)9q zpz=*_X?29&{k*HkIlri3hwB2ZW0o0}qx;SxtzxfU>V#uOt!7d+UWhNsx%o4z$sLC> zC||DsyGC_(WFOdDr+98=aHC2!1Oa~=i0blN&qUMYQ9z<;aYJva7$!0s#62Ht}S$k zPW{rrfi6<7p=~BM@|Fs<*YxgJU;KHEi;V<&(vV@j0=b`wb(ZS0RGI zmzson&G-yw^$o+*qY`Uj6Q0AO>0R6r((CkRQ@NmWv2EJPt)4oudxXAvba2-V&2+w= z^>_g<(2GYyr>u5kt}xq&1aOhruYh(if|$HDQsh}|b@cNQvHVXR zcLrkDJrYzf^-D8{xFITP*kDk5lM$VQGCk?MVlE6dX)=s}Tm|rIP?0hbh;w@XG$xRz zG*Rv>k)W)=gRv2$LFjp9>`HdL9pE1%I)BKOLZ#6KZco&Zk_5Iu)X(R0!q-`2B5B7a zZD3pn?bA@G_0ftz6}y?=dgf%hT`Vvv=5(}E_JgUe#4%VQ9Ew5+W3I+1R~$^CL|N#p z-k3EH_J_q>4cHtb3-M2@$48_7)?ytNu{i()Q&2446)Y=1R@JP!No;i}ZR!Osez3-R zTKp;~C;jY0&{0XF>;uCo@Tgje{i|y7V)1T4VX264F8RqsOiWlz2>2y_5rv@I1b-=d zoK#cv%y?GTKUCUAiwG9AMw0|SEd4!QXeNJFR}tcbB;r?Mf3~HNdz%7D-@Xdm(R59- zxf&*Q|AbpsW}REIwwM~%t}{@T%%{m%7xA5UU1MNvF`**3|IRkmb{(}Xy6>SlKo&Vu zLf%V!P4S8Fc&&$8IUWE3wO0}AP1`&NE$=d&-9kJ}>`Jz`6QZ!4>4R-sWn8Q2SH;S# zfkN{lIJ@;n9zIkj9xAe4zn*4qODM5Hv2|sbCf=~NU^Kv9k92TND)#O2qkA}#ccr{3 zOxuoSl%~lu?H`v|%7~fAW`J_Rw zqaNaKq|rt(kPQN`ao0XHcxJf6MDhLXkb$_)`~cYJ92=M$P{=F>oMRnDNytOGr19c) z9yUYGvKH+Oy%EFKvQeS$PhW*L2}CYlPgnYDt9}d5w1Q7?giD2p7o^3?+#+&589kht zS+pT1^_Y|LrS89tcZ4n(e-=yO_5`~mMP4vnm!1lc;3N`Uzn`QsxW49YsQq`Vib7uYP6xA z>}?FjYnA03&+Fo8s7K5wYM_}aYvTHiw^gy{E{_7?;`NE(U{`1Ob}b#tKCjFd<>%ED z^pOgXl=39UC`Op$gf5=|=Zy7v+A+UUdV9_F!K3u}cCE>ern|df9p64Q+oZ)q6wY2p zK!+(m1CcbT9#o-`2HR5tW@2%`?W;*dFpyT=Qg0i>;XT^5q$%>guV$UF0Wc+X{*>4S z=m)?)bqalEk&4u)iKn)iQ7DFxs!Ht33UMuA_$`s?t3)xwLWZ!oNK55O`YbvtR^{zz zj(zh(&+I+sFEY3|a)sPcfWTFL&$q`ndpMV{N{UgbGbKx$?k58{on0{{4^&tS-$;k< z4VdFjw!F(M#<(S!!OtjL!cwmVg|%2}@v1om|vI^EFph5PU;F zb#U(m;o;xE{F3fqRTaVIf|#97vbbJywz=GVf8Oq(`WSIf;->m13337OfxK#KCi+lK zs2B}$-F=BO;oL^(+HMsa(^O_gCtt@YjZ^a4Zs*f654jw*J5@_tLG_p$I_r#5?u zWv{CTzLRk`;O!G%Ir!Y(eS8iZCjuj`CWjz6phTAuVFn~ooUAwZ%RO}_=oVTncDmM_k@N|S1K+7pRVZIoHK!^$e9kxVkOLs8@m0+T1ycFLmFaEET0su(g#~8j`mM z=q@6T2QvCBIG2Kw(ue(~r>?LXcG(X`?iJ`t+Gh(#Q~E@m3M)q)+a`;Z;VR@|`oV$H zixo;4Gfh_V3I_|4`T??sX|(J@@82SBmpm$Kgm@q$#p)Q^3^A~{;_s-`j5@F!v9x@ zR`#&}@8(LyEn7qd`0we4Po<5Trg_UHO3J(j7Tt7A!@$)zc^DmHHvY_6jwTOO&+2JLsAL`m@;`g`b$FV=g;a4aORdod$Yd(L8tk2p73 zU%1_Bg``1VI1 zz1n9&q2uK%Kk|DsXi}fShvW%lW>r!jiAJU+k{hhJj(eq1))`4rh28^19tDZQyVgZ36@;Rw)rQ0gKN?Zkg%A8 zG|w;*!vgcmo+F?RM~*+S-^MunqAAl1g&Oz~5}Ao`XnaPhYX!z}5*Sbxhuft7!PEaz z*HnDO`_WL>0MqlcJ|kUphvheWb@Z=ymmygAafCd%!ct)wlGF!W5U55rENM;8O77S{ zFcrj?_X{fJikAM|s#>6$-^49$6IJ{0tA2#3TrFVx#yHjhznS7sw8^aFUm(&J2>Y;& zt_$AN{i|2fHl&a9A6Uixk67jVzrpIibFLbcyYdjq_lYT6rv_^fH8C-GM^M-psey>H zJyCpIs4&}af;@GrE(zO#1RswVTXA>g^FYPs7Q<>gf$CvZs=NjPizQWQe!ZbH!G`;W}cJn&djL>WUS1aiS%?Prk`x5Z>Q-=-1n8j*x&33cpD63u%$Rkm*h=G z9XKSeSq5T(I8;~aWWRpvY4l=8QJL6sY+gl|T{qYki^YJkD4J(ro<>06dg%w4~%O+E8VDywYX5fZjMbRB`UIJnqytyR< z7GJ19BAp#j<07fH1F4ZL6j4&fz^SRGt&&{VBFQEQhG?H5>69iVbWe6B!`JXy=`nCA|$df9B{Zh)IwjC&cLD=!ue` zB+fc2z}Zv9igf|0&T<`;D87IgW8v5qDawl33?{hPs5GN(2v?+vR+IW+VkZy#;;D4P zf0&TAAYSnm_c4lE2u@#3cJ)IOa1wY0>az)NGT%rmhIG2|Yb2?9UpoxDf^Pa(u zt%O-5i=|X04#IUOJSXcKfA|TmFg~U!Op;7eWu3QK?_}i8OSV}!F$$WZ5R)q|Cl}?> zA{MZ9T+yW*wm_ihHtSQRVCejI%| zahQY?IOUITkjv_?b0lLB9c`0#yM2FTbi6EsUF;M0)oxDstFl~L0aKL2I1Hk@crs5q zLa|#}nR9i_^u~|cA2GKaU$Rlz;IO90Rpl7E`Cbw>+dPX&S4A-17Zy61s9)f2)*Kl# zqp*JsTTk}9h$8~6S{!#8Rf@E0djY4P2SDpZtpZHF-tlXNk|qJvWQA}{dUA4}~;Zvu}X*!c?<1L9~7Sbl)#RPCnxm&(30|@->FVHLT`V|D6>s{{bfn zIyQZcRTegP%=o#LWO&Yxn&(Gq{)PZ!zOv1Dy{<1J%p%DJ3O(@0_eKiX{Z%w2g7Q5X znb&gfeQzpa!nz(oIn5dHZBN6e(r{jWi>ox}$R6X+N^dq6YnE_^$=2^6G+vI9&iO59 zA>z94VXHCp6U-B0`N}NM=^xeLZb;4<+T~}<%7&Mc(To9==!{px$!Qqzb`R*zwb6JY z8;}y=e~V8oRq7>=;usP8!MvWTM=d=z4<9>|6|CY$pJso70A5kvi1Z`VM4~o$B7%LtC&_Be-Di zw=!S>=#KbNUN~X9zF-BLk^8?<0n|D6yN2A;`<<|5+?9rGk)i6?_WTFB*e~^~Gyl{M zIA>=f*>*RmdjR`hu+X>r(XXJ9p&FM)@%ndZe==`rP`z+gC%dQIXZ>l~La!S`#M!ot z-e3^E>a)5~tBkNb3J2%H_NmBXdNx)V{E&q;` zFw$Ka(n!w~dSK%|hO5N4trw%;&_sHyIYuB%V2%0p5$_vfMx3c_-k1{;@E??~W?*hu zXeY6jh=GnIZI_ZSY%oo=tSsW0wLF=6#jH&)t;moZJYj1N}eSB)3y`+(}P)MLs}mzGlc>s^i1jxnT%kr^bY$Az3q6F3h035a#Uub2sa zPWgKCe@_cPA{bsFAhceDSv78OC4?`DKeOTtZ9_E}@g#;XNvhk3^`G~xNLP6xQN_}H z*=z5j+h^BB)-bnqA#3A$-iid&=V7nRVfRD8MN>1k1{yx4=7c)XyP@4zmN8}Y&CG0B zJ#Tvg#jBq4x-gM?RD|AL!=HPYubD*cU<`QUYE9jF38ne``eOx$-{FeRXRm?e9)5!K zY5+tBdw>=T*T1cr*ymK_R*-HUcMCSJDbB?2(?KB(XG@kHZTfsUBDW?sb9&4k zcKT;_xxo;f-PRk!hbM@EPoDgs!omt_T# zJCQ$LeB;afTjuG2ro^+`EDA$d+}Q~fL-u7y&ZqaE;>l=oWHzO}c9f%i*87L6G6XmM z{5B++eOqd@7sKK z_HH#s*w;WlCOOA}A_XSFV(k|C5Hg!%YnkPF5 z{neZ~sgadkl6DBXZI&${6mEkbS!Im^bDo@i1h9jMa|k1HN^bp9%spTq1|QgUy8d$B zF&6hln&-7>bOo90qg27y8aBJboP@807qG!2+98S9DOz?#x4B0u9^gnuyVc8dg<1`M zw8?t^-53hxR8i=Vr#c(pPRX(s`D2lSsG>?OHCLL^q3x-O-l3fps;OxJ-_9g*D4Qq_ z(TWhPok!gUB2|_uq-sYXNjHUm|4JM$++CDfK|(uM!L+2x6rr7J{{OJ{Pf@xB&Dtnf zu2r_R%C>FWwr$(CZQJHswr$&9h5q*L{rBj;+2iyX=Wgblc@^`?P)5WfjjXi91=fCW ztHg|B6=T9-LLyvUuJ!i(p8ZOE9MQid`w!tb+TSSZon5NJZZ_%MlUnj#5B0%7Gv5#ZB7%r5vQ0V zG&5e&$mo9d9=nLd9v4THuij--7R0Y-Yy#kj=($ET=F6656Pg@DtptK0!O$wH{3A6I zA-U8jN;R^w2z#AoR@y6*WSMh|R>PDQ*Mi-xe3{4+f;7#z%xviz*_XwX^a+29FsQVm)k|(#8Ltt197Zw| zCQMac!I4)q1X`~W`mq>kk#K69*@Ac`9X(IDa$s};3o9kvD9fY=VF##FX|a(X`C*%k ztNrBtN&IQ;Ka5{aOLS*b!usL$^gwy}5xOz6`W3rDUsR6y`R@*xX!{KXOBf&^0OtSZ z)${$|^y*dZEM5Lj9fG#=mIx*<^;D7(cVuzfff5~U$YBX7m1JNGTpbe-Xm;08nUKi|ijfE}o}iOg>6SB4vJt7eKprTwn8^?VA7Z(-<=l z#zShDI!jOCK~9)EYYIzG`9V?G8x~XPf|Zdv=CKm1Udu(;m4}>5tY9YJwuza!jZ=oc zPTxpEy{c@pmFi^li{@jc>eZAqT9}P(V;_sW$eFZTr=D(;M4MJ6&AgGinS}3Qn`gK` z050A8Dhv%guH7%yuwYR4fYp=X>`yzE(lFT`VK*I77}18)CpW3&GPL_vP+@&DX==|w zJ1E3yLimv@PgoqNTCYS6j1%P#dt{t8x08->UN{cxuF*OFDRRyRYKofQl%p;=D%@VN zP73XqwKyty_lfrc1fYbV2B&8P2WKe4XAchUR#a>lFjMx<#qyvNp_)AnbQ zhlIdWJ3>~=4GcjgNA)2ss$Dgv0#lW-?2u<>(WkDNMY?w_0CJ{I4%vCcXCX+^r-@~g zda`oSV(!YdF2x9A?KVQp#r4@UDr_F`;4cZo5t$C{fz`qt+z0ZR7%kfuuy*eVEM}uO zLJqDoQ11Kwhq} z-mUP$la(=+s89-BFHpY*=-hZqs>omPJyo13Q$2S(3=NS#r!Cx1)Ay5aegs31l z^=GG`G|kIOL1o^NY06mbw!5_J`B>h6`Rm#z^oV zHa(+UF3wp<+!h3<_O+#_;wnb-mS7bZh zKmF?z4XjAlYxMu_+(N=lqwSN2@rnKRL!EBkP-tj@;M>Zw($0 zyM$d%^c#kQ5I3u8B}Be=rItxja&Er@T*>^uVE>m@#z;=O4Cx{)YK4bs>pGECT=q0z&wI zs@UTHTV4E*rck$bQCUIzxiv}3-ri0M7eKyeT!kcz6hW;HSWH5+GC($h3Lz2jW_C`7 zl{t-bzZF)oqu1iTg|^opzB*xw_>V&(|(sL zLpCAO{m%F=r_Ef_G%%x+9kIQ(!;+gg@JC`<2TehtmlXeXx>*K#kd+wM zE;38lY?`nPDL%WA;q8*S2JG!FTEVJNkh!HB&=5-qZmJBk#AurZBdkbmNTndWngFSc zorID}%Q%LAK-Yqny^HRm&bf}H3?e%x$QnMQuvn-qY1T$rR^a0_%l!0(t}1%!KthP= z*9mM-Cp^&Tmfbj@z;pm+l!kK74BBYI(iKyFm%fDYDxMrEi0?DtvieF|L&3-m8;+fu z^&+xcWX{aNDM>m6IQeZo?3sWasg14AZTo2?ZlY_`q)@+EoW zau!<0Wiz`F{aiqz)F%CFq)>}M3H>}Q$Vc0@uB<)UvIq~l`3D^o<%rD6vS_Z zWs?z9!8(9CI&Db4C7Z7KDo~8XzRnmMXDW&kD>iL7O0?iGn`r&$<%%7-16?;`?Q8*) z{T(Sb70S?Lj{ES~`N&g5H^*`XcZSj(Dw1>6W!L1?Wizs^Culq@#f8_F$#BClk(uw>LM{5Uq_WrMgsE zuC`EcOpP+7!dBI(HR_DAR`C%Td7-jXXjB@ZLaSEYme2#=3wNtV(?RypKU^@@V@Ow2 zSq3}%OJExvjKR^n&KKmcx80Xs`Vn5sJ11C}$CDL6=(gNv->se8}!ndVqM zM?QN5T}*9NUarh1-R$x;sv>{k#7uMhWSxF`Y^uCRw=2=4&8^M7#hX29d5cxsu_n`X zCg~t+`vWVzT^ci$oiT9-dSst9b@nT>o78z&-jDfQQ$Mq({BgIPK#$R^f*<&&k0|~h zUyy; zNL(|F(G zA^l^0h8Cd5M}LS2yD{1cq>p@$il~o#?~3pixkh;?2+KWeM?tW7N4-UR0EL6Nr5R!K zQ6B#GdCab5$UhyLR#%wnvv{<$j2)5b=CmR~er!kwCuVHsU}8lhYo=*&w@{jCBxqhZs|$TB1$n zJFkR*%mzGmvFO#{h|9ZU9~pD_EXTg1o$z=8p%dE)XWsdJWl`@$4~{VoC(`rQ@?qE$ zs~c7S-If08o!+DT@#6yTNC*eNH5%Wc807`)PFHw40a7;!*gKVn-<;Y5i7|=Wmcu0& zn{>QBwv>mwiaT)dg(knu&vZQZ9p00_hSa$Z)l-4U{za>ZL|P(OnZW&3i$m@dVNiaT zZ1~~qsYI;EN^VE(3COjDYr&H`m_GOR&*?(-6#qbs|6$O4_)|A5=)MGWfbQIkZFh3y z!N|UIqUSVGBmEgtxht4r9FxqFdt?@WYs@vaFf)Zu04P+PKAPOWgsZdQ&lrk-HN;8P zRf$vmRFd$%B$$k7kQ4=eRqslQ(XWty@eOa(<~d09Jk{Y24yeH}zW? zrr2yMn8Yo}-NCZO77vE?&N@)VjgKkvN#zfAEg6+>aO!$|5v<`{eclj|}DDu3XjygTX0*93zX9yziJC%51Y;^LX%!6#j8e&!a-id&$c!6hI! z!uICam8*e_^awcdhNfTqhuW)G_KK=^=z(qCF;(pm+}!LjQ@aJ7XGeae8pn6LJBh&v zl&s1X;8k+~58dm!>M&4y(#g|WGtH(tzXBY6+4I%kM1YnQIT_T2swZn~WJI>LOCr5@ zXuCH{I8ww@q9Ly5RicqhD5|LYjR`MzU|IJ{WA98C4kn64lc_tcF2u1FW5QQ6W@hxA zr{SLgdL`8-5VSIcJu|Gu6DDqM^c|_;p9e~PzPm+EPzOt1cOawDW{un4K<-a5%&#K< zpaDG>UsNQUw7Gxs92z;XDszpFJAa|Ll(zmHMCzEzB);l58F^GSX5GdSM=u=CB``!f;Yk935$ z9paC2fH&GN{`-4B^F_~Zc4w4*C`>QitE-5p2)*4?V@Ou@fwns=mz=(xjfQ9qZ%@!|GW4egD10ACebBZDMcBLRvQhDz_oiMe6Q=L ze~^BseNMdYdVv02_k(0?ukiT4c?Zu6Y-qLq00E^S{XaBiS;^GS(AHGc!^PCj`9E*| zXXaz5nxq4YII6EP4od{EF*r9AA|}iqF*ddFQL|(qHmJzKVf5%g8sbXY_(Zee=|4CU z>!5~E2IGB6zI%cthgBrx6_bSGbeyLd#&MNJkH0Y{Q$kI;CvV;U{eIuwzjv!&j#ugW zz}w;ZreG%9gvMnt|5Xrro8p)r(``DPub4yEkiOx@j?1o4_$Szf?Ni! z>RjIdL9>IzQ%WQ;I~g{j9l6jD94oTfm*x;(BF)hL}E`q)K5?#BZF2rsMmh_?eO7ccb5WeHxVhFfwcxlAA%yVOxX}Q zRUzH}Hgy8H<(Oza?jA*FBVRk8S39UdsPWsbsZsLG+aWEc?UPfRW1H)y#}-HK zY08UJlq!Po6nTlIkR0&52ly3p&sKqtvhCK393`t7cV-UaH7c1R-3*aXuiTHWvYgEk z&X?qJ>i!|rOBZcMccfJ;*;kU=OysieHUrKL*Wo8aPsV2F>a^(&!Lw(rUa@4ZvU8Q0 zh@~CMb8Zz*#VU1eSyLPFSm@N@%SwlLIt3(7)DabPnLlwCso5bXSlKkXI9Z~O)s{&p zX@=D$IsT|>)mgQ-%*@f}lcqLE>ic=VZ$-?OgJX)kpYxpOMXgx0}d$%8~`Z(Hp6^^Eysid z1^^bnmqsU~_&Jug`RIk_b9<~0h=Tbsc|1OcX|N#w(N$8GEzG5w`+3-UiliuIrxpw4 z`*&fHoZSjd?my1*{(JJ`w)Yo{QyJvSt!WL$LDmQ_Xf~mI<79zRoD=Lh26GirK?0 z0-f6YKW9VY9U!WI0P>g24XCXeP-xW^FuoR}5!twHq!VBU)RM)#Wkh z`RvxMg4AehA4asXEk&j+9OgBmZ}FoN(p{pNRV3ZfOpXU!R^za`;rY`aI2mj)w|N6G z)*eso3I0PsR2nNIMXwSF9FxBbEXek2GFg|9o$bZw zlwGvm=MzmAz|QaB1AMUi3=oc)TK&fScKbj-!-CtxgkPe>{zrd)1{J@ejo%T*N~LlV z%8p7@!j%_oa?(zZVwR(t7uj->-41)SfveKDbilWVp?D&66C(N{5cV~rqKvDHqRz=q zS=nc4`rNBe#M_HVqHMYAj3$5o%Zv>#%k%3%009-k{cmQB>;E4!=3rxJY^r2xF6!a% zKjk8tFdix^tv_oM(>W8zBncB!z#)PlP*9Thp~qc0m&1ROdQk0o&pxM zR@SXl%jT-X>b@*|RiY_Sm}s_WHZPxjeOA?LUbSuQt#4Mg^;*5wxy;O&nKDFgdVTgk z&2O95^{ua)*0sIv?=R^H{166oH%>-LD9O1Qhr@+(GOk8hD0<{pITfx&yOEr7ES!vM zk;J(ilaa-_8E3P79lc(WWRnFFHR)Z-p-HwinCzxclqiD3Jh*3$#Ukvqk&rmObhGzRYbAOe5G=COhGl@vys8y!VQT1yL~UbnTWv^AK)I}-NwLb1MI9^nOh=c!lG zw^$_$Fm|k+kgQ;1lf)Ox*+f=`IZUT1wT!mN!f!7cGm+_Dy6bgZBZLtUzaV$g?kaK` z6eVpUWHzvAS|<0ius@2g)nQ;CJ@#2*b z;~FuJMeW+Rs~^5%uF=P$6)y@kysd3}k!t1YNVRCuDdL0JK)c}7_3uH46maXGh(X4- zp>xw;lx?+kVq;^D3YtTyxN}l760WY;0;D4`L-+Mfe8xn7IpSjk_iUsKhS|s~K{hp3 z2v~oe4!lu;zu3vCPoFkw3R^QKZ2b=w1kP_E#5dQbZUP8f%!O+awAWE#!88V)_{L#I zWi)c((DM6zrm1N*wNcquBL4&_jka7)Pu#}l_(#-n_9Pmr{l!C1~*;6trb zHNTl`XmAWC3gqw#+rnom$+37>RVWX8bctbYy0EHJJ4vjimGF;f{;;){xT_c!HnPP% z<^_;+6I+CMk=EI$l~p}5GI#vNG&^u>-eubPl6u_~GUHhZDTRG45hmC5=-3p2ZI%fo zW>hQ;Qzkufn0*$bUc#A?u|JlvXJPJT61BuxQiFG=nxnaj&{K z(Jf;rO`ylt8TE%24Ou9eI>+Y|r06fY+zO0qan9-#$4KOy#Xqvj|9F{!ogm@Wf2z;b z9pj=RqAH>?qB^2tsn{wp6&f{1+EsnTM>?tcs*R$fo>X$`4?)oOlpl!E(yKd!MpCKj zlpI^5tW~}=Mp~)rlpTAcZgk$Yp9rX)p5QcH)5E2-n6LOzsI;Dz{mSHRX6OzzOIkXb zRuw~YDoblQL$fWzPZq_{o{)^2rZ|^&YCA_fO;U@g*bq|N|Z;nerIDd$2M~V?5(=GRL^lC;E!PB`_CS|8Tc zUqy$qpXoL#dsKv`*6Q~6Vb&ZyX=c*a;(R`=bpvG41`*uL}tR6X?vE`i$j2XvJE?(1CU^5D*-&SEDirykAmgzSa3ad6q9&|K!_pqJ3q{ zZ(S|e^g{w{Ie@>lM)Vwu3k(TZ)S_kIuvIA7#as#5i<-T<#1b<=} zz7k80fEye+v`b>u0r~MVgGea0))j~rYnFRwF`l3jn5}bLm zwlICFrANYKXr~aMQe}d=s7i=OHW}st8INcmDT9PTbYCH`5@ZRi2V@Bx-uVEj3Y}vy zRJ>BHKylw9(7xjya|X2nr2>OPZs2T)FY9XP2t@wRm(YGX%U&qCWhRXLf)mE8ax4ra zSYFu%NO{LSwUzS$)`54L8C1^cQ2#t^ps}upoWzy)0ojSu}&BnTczwXR3#rmlx7gkC8Mm|Dkumy3RRGMJp(0UVdm zK1HA>2rY;-xEz|s(U84`AW~jAC&(D;fqrG-pL#`Qq}>uxkiA23QD==Gt}CvIebmRR zQ|7(YzPCqb@|qNy*=rb{)Y8gK}NexmpFd~#U!!Po>2>Wl00RO2MvGna7;#^9BON=H&t z{?ad$s!B=? z@U1$OOF5*I8QiHD<;AixFI$-%M%XAXdJXKc>Q=UzO0v>7ZCz{JGl^Nz%dd80ua<4t z4A;D2sP;91ZEYuA*-cl=KIyE}nd2Q>%qIXimy?_Bj5MJttFb?!{;~hY=W4f|1+M5m zk7?`Tg!+WP^Q)WbH}%PW`@%y#(pA}iE5olRC9Ew^0;oQ(d%CtW=L_*OUlh5oR_W@;k6*^p(M0GpGSiFM19*~nbGIui+(1)Ew{kWyv{ z?a8d<>BW_ro=hB{7sKl>141TCSziYdh-KgqE%IN<-87&B>oA`+iM#`RKI+X2MK*{^sVmIdM*o5AvTDe}E*wqo~<0 z!iaB+!Ea%MLBuiN7ZDEN(d3Nz&xC>~N4Q0jBhTpYXb7z}0+jC`1OCPHdRWC=IsDOr zT)c0@>?^}OW27Fx?C4M^sN8sLx$EhxJoVUU+%MpdkFQ;X|-m`6;|% zK%3`Cutx-Vm)%I^FOFtW4+o_JjkAo4X|$fUq7P^e+GZ@r$1fo}ZG+Gj@C+co8u>YR zh30jtAFgPk__lD%CzLn|Ms|WOUfLy2!Y#8}USR-Ww>M3Aa-PnLBN*lhu*i z{xr-On)4I8;{^rXebvokySCm$lUcQH*#)V7R(U+J(Kdo^L;Z{{ z5w{zLG`Qj+bsIdq+$7&VXsj*V?v>+po)({57~sd@X=U-UgMu#*$W)+He?362Sjtn& z1K_-mc?|NY^(iU+vH-fEAmm?5wM$73q`CyCKo_K~I_p6+rmz{%<_5o@3g#GL7Q~9U z&~aXLt4L{ASeC~6mC}@(r>;ErI6?GQoIfWm z%F!h30VM(!%&7r&*HpZlIz zel|bCehYdg^C|3>A*8;Y$4^2&lb;ZOMr-yXJ2cBzy{ElF@`X=U;_~lz9UJ|oWT90> z@Rk@+s?)}Ps|NAawT?_8`Pg%2io>LurDXfinZm41;y8dU*&TlNE%u1lsLPEZ_l&SQ z30MLsdDbXZX;o=ES1fm5N=Q=`1tTBn@Qt*9rBd5F)A|6ejXIt%-uL!8wACr>9fv>Y z@LlocPgvuQLOwh*4VPt3M03erwbIDA68I`8NoS7kQ4EZd8r=jZPE_S`Et4d@)(AU| z1K9kUd{EH#V-HCh*5u^pO@cYQX?5{*)iI3n{VH_uZ_yuitqW8JI!A3zWg10hrDrN8 zbB(bK+N;}?`CvB|+0E(2Q3%!69S_PwM;@jawcG(vx5BUUXt@ZBU4k4LNd?vfW7aot z-WPO!FzY1s8~Y!w_}Qkn(D}SmdWI6()EoVzOWT(;+)F)JYVdw&9s%uD!TOKZA9$9< zMDQ`@NswlLl089xW+8w1IRyCugwLGt#q^BneL?b#hKYv);fKRmQjDuqp&I2K4wUWf zl%ySEnE`~QuTU4 z=crlZbBU?%?(pgI?-2gz`fM=oRF&C6nhlxxoqwJ^)7PIMenj(3zUYPu-4i+3! z5fd_#5(r|0ch?Y-s=zclCjZtF8cF4nvmM9Ekz#wea$dq}r59KYYiqU3cEynyu=Wg9 z@y0aQ#2Jj}vVn}i>j&3LokI*qE}uS8*79OxLe-UIL^UDNy{pUoH0Pz;BDWm$*idCD zNOJb#frL57>W$<}MV_l|ZC;!~lFx!sSC9?~f{kq~j#|>%_B8X>hgo+(cyJ~Dq0Zjw zV$Uu;L#3{?chQB(B!D`++sz}$i@w`(b0C8mL_26J=tqKK^+rEmDgl%{solK1#lxIK zaEdGFp#%Ghq@BBkWTp^KqR_x57u!U)BDg_julx45$suSPO0=b9(oKs6`?&L@Fa%qs zGB)zoMI~18yf&8$3rllloh_?~3>jONc4f;XYPy(blrZU!@C7ROwkW!fn6(jYSZ}K~ zX&dy=Xj}<8AvH0W+#-wOmy7?Tqy?K!Dqu@l#z=D@cF zM^o^u7=pLP6MJcQ*K){aCs}S(x$@OaE%nC1$){p00bN`RZZe)$YniFHL@dtkNsFyZ z3Fp@2S2H?hdOg!up~5-ng$l=^J=`cI5|LF+wy|||NU~1|Qf!%avEp0Aihv}+hA-w*2qF}AfANiY(>Y1Tl^&?xtz)gnL9UNlFp zJ%{nRpB$EHm?Hq1pfisyr?^}>{Pk%5*+H2PC--^=Jw<`^AuVEZDlwO~E_riKGWw|D>1r`0EOpr) zU$Zf1LMODqDRG(_gNbt5OF0c!lVIKL<35Nak*HwqkaR7h+dQmwbd{>2+iv)FGK}RD zLYL;uz9J=s$0h~zbhlu{buZJ~m?4Sm1@qEw5n1~JeF;&QidHanH0j!?di$8^2+^wv z%1RQcpLPZ1l%up|TQ^Brt4)GK>C}i#Nnzk-%R>;#7I{@lgWRw;1P)m)y+Lt^49Z-J zLwe|pG>7&81~~|sizI}^MXEqk7rBdc-ccStMh)zOTLm9e?@dAxk3!)_f}gH@&e#F% zvqu$7Y?*Cw8Xi|QkZ>wg+?=!M&wR@#u?&u1^F&Wsgy&Bx=~88J=A$lY_GH%PmxS6% z%^%xOHY(LEbLm5%jtGLx>|Q_`9b8QSSge4&$T5 zp5BdNI8UkzxN+)tMRII;M(juCqNP~7!C4t<<3W99BmG7h_Jc?+p5yS^> z7*>sme#8eZ8CK7f1JWKe$2dIz1`flhIA|rKG#?bM`4$l*jb*mK1s!Lu5hjjSWAcYV zXTpIM;B>7%Kg$4$1)hyHYyOT5AceJ_p92MjcH3tJf4c7oLc>&XpvqHlz|K=?fRkq& z1P&`l%Ly>=c&iCA;~DEc!_wRDgv5exe8&sBW9q3eK+~fdTzlXROULS)y9W&;VET$U zKnqjH@|(U#3Crhlr1iTQc6}!W*kk>i48OdmqI7%ii+$xBxXW#a=ri=p+yevrF@LT^ z=>6vIDFNnk+d*r&9jUSQfH_P(V~^ki->`lr9|?iEzt@BOIURTeoQ{xuj)!tRXC(Ez zM(>~ieaxTHdv_4Rob{<`?*}pfH>|(O`+8*eJ$V>Ew3ciM+dg|~2i9-N*vP#0 z(rOL=$z)cm1`}G0DFO5B_FL{Q>136Lj4X?I&;-e^O!Yqb>ZMDIu&fOOz7buYXW}(I zr!wWzm zg%~S!Q?U+D9^z5+VGid6)Y%x0IBaQpRNuVZFbOvk(~X21P0h(8T6PaKD_Fe+Dz#_` zoQo3SdqrY`AsQ>2_5v%!_IB@^Hb2JhRs{NsBoeH}WE)S!VQ<@if9vec8}(IQqMIQ8 z{dH^azWE+%?Lv6cxF$_(yS>6lhR0k^4PF;s{x(A2NVy0a2I+Q09D_4Xg*Ucscrg?- z+@#8l#LXKKJK@}g*!p{G@z!ZsQnsS4o{#hc(anyNyjYmgL9;Qi+)3G@jLunw2RgJA zO{!^3jin%P*4P+ZkR^AEnYA!bZgq1qlc3*n9s;V@F0%U42kaQMB{m;k2?y`Hp6J>w zI2+q_0*au#+at+;UDF{*gPuKXX7#3VokrE1E5)g5nmJpWS#7UC3#pXSxJAM4Za_9$ zJk6Ugbq}6Wi*Z16ErLNOhT1)Ts6=(3PuP=VHMv%ipd*QKLDl7=ZVa@x50pBS?g*+^ zeECS0+7sWAa{&Kn7T<8>#t7ja1*Otpc0|XB@D?$0jsm<*&2|9%_{`@>c8j5XU%&y0 z5DC*LuM;OeY}Jx`xE5a0nHADMpN;ej9@f$&iBjtWWR#$!)82$SZ7TcXQnj1_Ed z={~1zmOL9T{K>l|Dtb)Z75Vf4w?2{VloMgEL?57}>~1FahCg})yO}6b&3b@49TdzF zs|dL#@zge%h8;D~e!jX(TsL6qkuWKm-vO)bKws06F5Q^o#rF8^l@kLQ;Ym5ul;}(U zeKSOCmZ>TAM6=A*$yI@rgw+R_zLQS5??jd=8Yt+;(h)sSRw7_=vjsU$10m>S=XvZSinrLX} zwWm&yUkJ<;QU@J{&#DujI+P=4v_t4jGhaPJddi%ts7@V`jeMKLa<-e&Yka7W#a zZFSq+oZ5S%&So`)h%LQIdNYDsIs+f{cTv;eL7A8SZZxtT_3KSjbl)6=j`8b>TYJhb zOhI1ks~Tk%gBlBfIL$E3Vo;|M8fK)@0=3)_e5KyC2#s45hYrQsk#(YbM2we++OnSe z0-tSBllxrO7h9_`X+v^1pmtpx%?h0NmiYdP{nd=wiLGjf{J<|thm^Om$fXT^ae;Z0 zCmu)A=$~kCM{Td(b9834FK${)#vpyHFvT18VWY~V&*+hHReaRgS4_q!&gOv$AJhVH z`FV(Rg+nymrY^!|Wsz$c!Etz9e9$rwNocBm1 z#m9fM$#<;3V}8K^0hM6?Z;^%6|Mkd1`9B+M4b=>7EKLkuOiBLVOBs9P|LS#Z8HR-9T`HhyBB&vjjaVKJ>vd|=Un<8mA?NK?ONXbC5tE*a@8oR13)Z}fRt)&74 z0+t1c?Vu=RvHl5xDZtr-^C|q9Ap9S2pv-ufVS!kFPdsP0QhF0i0EVyo4e#0STh2Yt zZR+2{e11Qefo~7qm{SHK!`w+_oQW0c~H3@a03VK2dG-9;%an({eoF`H4Ek(!Ghw(_L8x)LkQ zGQ4bM^VSTixeR8L_%bnZaj`j5u~|5{a%GSkRbJjC9yUInBqW8Zwn#;y)g#5FGco0I zF=gY*=?<7%7q>BTcAglh7D*==gHals4FIZU!hev<%m&~VNu|_0F={NZ)|}XxwZ{3{ z`eRw)oTaK#-kNbtSivCJs<9kHLt8e<%&ZkzgH5?P(xlbk;i%beqxH@iC15Sr951VB zR%l~guEI@^NHmqO9o<2FC`hS}s%_3+V@9WomRUMuxw0xNjBiEG%vh|aGCdq% zTM7a`S)GPLAweC9utb#4(rf~AzM5gCTmW;~lQlmR0&1IVCCKU&nOF(4*`jNV-7MXe zh;m-Xj^}ROsBMRtmCI3yUQyz#l?GByCvPnpo~r~dAv73dcHBWVGb+|JgzAy6IZ3Lr z_@p(&HWQSp0LSgvQ-jfjZy%0bWV4brW5ujCl)})O;2`C$MSHHfQuZhKcd3)N6>mMt zB$F%SzJ*DLCR4Q5gkGVGbcPC}qD;_y8ceH(E1$5M2|r4e8ANdErh0Go>Ux!p`o@B) zxz~61M3WbFC=d~uaGPKVQpn?P2&C}4!5;$X0{|gz*}kRyQ~V#7lB+F!a~GndhdNm? zb1)0)w4XU)frP^6-(uk7iduJnU-+BeR&>9mE-!ZS(faMz$%oBjtNl9H|ezH+UyB<_wX38*2G%XZm2*E^Jc9x_1~`)o{{^m zGqfl*6= z9vp}}uJZb%%=3x8jrd25eBNUqA(CDcZV7hcd$>xRip+7zvHxvSkT)qLOcZC>h!_{* zO*D@fZ`MXUFmv4hhNEs$kv|R%6NzK38&~2@RF4=>rHz2?LfcR$B${1x0kgQns~g7) z`J%pOhkItMW$pQLm}7dq)fw%*lE~K_yU%3hSwqqqdD@ovtT}YH_IPlcQx(#!75!i@ zTsIFZkaw(5^=X>5o#zzb)^|Yo`lIg%TVHb+It~4b|LTnZW(9wJUw=@#^|q7bsS9xB zxm7!%kYyUSj)+=YpzVv?In>5PTw|crM4>W~qxc*e<(RcAA<#Z7V44i9dc#no%7A99QRhyTqG}Tt;tqhes_ZN6849D z-KWn;-|1SK?(0in4&nnoPy2!0C90p8?kBM1J-r-?GF^w9lrx~)1SM%@>@tnJ`y;Ef zH~5dg8sfP{Ri>e&NqMyEJI~&M^DeL$Ok~}}(Grdu$ck()eN00=R<{q*^@A+{g%5nG zuOi%c*OXw?)BV!dL-tc+wE9sO^%=$sS$*Nl{=bYip|{a4FC-9<2*UqE!?OQ>jrRW; zuj1*0GlJ%4Je5W>m2SlCc1=PA6-m3LcpCx)Y`76w>9ZeRhViNE_5L% zU5J>Zm!eQGzlbWe1r{OGAq~^g61rPD4=SZyCv@kOQoOgNTMIu$cz;Fk>2@|Vo&DD5 zK7E?%o03_2muL?X%lQ_$N15 z>g5yYE-hdRd}c{JxVIOuvzu27=!=uPOYooPFcC;NM^;(dVPx3fS!cX{`RMXu%R*Oq z87R)cRS+XCd=heU;GM2D$jpimOV!Xxuepm2P$4C1))w>>kqS8i&2rC;2$qflYc3W3 z_De^Fr$%v7n9t&irBqi)RE-r7Zncia6&}`+ns)7Sm)4J}Lu$y5n4rQ94xWO`Q%y%r zW_E8j3yhde3L11HWkSXtDJ$^n`Ac5%*{u&{0UX%pL`h!ZMp-1Hq)p|~;H@KBK`GgY z8as)UqufKx$TZYQ2Tc(vfopTgxj(bRD4qV#h3?aoa=g2$jFGH@DV<&e1-5cAuHhQz zd62cnGKHAO%qgvY9wV>vjP;AL+!eiC9%Jf^tb}2^Elwh^19@x4o~u1*vcvDw2wEMM z`C`Axk{}uMEZ{HdR0S+O-awv;YXO)?MMeIzE4jr6 zx6PI*^08uUhOI}t_GU(PTY%*1#Rr;*v6M>Oh_FK8-O~UgCwk(LZK4kP(pS!7U1}vK z_9`Z}n^bp6sTENZOF@h^mzz}b!bQ}Vk_ii8?4;#nyyH}@OcL)Zt;hn?QZv2MgA#`P1?XIN zym%|YiUa!uFBzD#%GxfY515z6^ew1(+O5oL8J&$-6H_fguN29%h`MOB^iT860EKWV zX_2aQA+i|KT2W?Zx`7$B#(2pU)=4C_l*WrhV#isF2nFsmgP-fJs-q+?WUtf<#U>Nw z^@J5G!^B(OEA8aW7wcFBglFm^V}zujYbDV^3kW+F9bP_jXmssf$JMdS8iuSsdqS5P zQ`(9N-PE}eTQLV>-;f2!14SGbGpR;ql&Ys)shSB)!mnu+?wjd0h+7P|GH*8-?>RP> z#9okEnsvGqc)uyDliGedF=3`XZFttoTs2epE>z^4LzO14p88hBspXe%*_7(WlGYV{ zC{1q>W^tj0#v6TVhD{zRA9~PMTSpNFo!vS|U)g%cGKNmrplAZ=JM8d>4p@s8g}bqMyin7rX{I~RHuIRW5S`~m|RHr&-N;?;SNjT zt~>+l6o0L&fYwd^F3(@RQ-AjxQ0>#x4I?$~Qw%)YT?;}Dx1L{2X#A_yQ~fu&(&*gW zJ6m(P1>ptUUzwHY3DVBwk1Gsnj5AHn-k?T@Hhz0J5o0pS10DerZgO-RlRKSUDlK> z&t66bCou+ruP7IJch(O-C4go5Xg+hOgG1lu5!_J{Kj~?#@&!-j6mchuew&%zonR+! zurY&a5F^NJvWuq-H@P2POWF=HcgTTG_v9~v?}VUp#i(E{EH&1w!MXW6CICw1s^A3{ z2MYp|tYTKM8;j0FVm=l=>AV`AD-oV!Tw33G-V*i(mM<)xVY)CImu2E!FbsjwC&11v zK}z3UA;%DFXXqXd(l@8?qJZ!-Ex2t-5E5>Q5Ylzt7XH$NBh}7*9^54ZgB+_&;~Nhi zyPTNR1$<}10RylD`?h{z)Rlfv4lB>VGjT5-#=miaoYx!T2e^j}Grw`c;x#Rwy7&hh z&+rv@@aDD&(0ZMp!~C%c|NMt}YyM6L2!=&q_K81W4AW=$iaKx%(`V+HxsSx+L20auj`EOKZoAKuYL%bk0nb5OP8oUb z82Dvp@DF^91RBvhB2$i|R8;{hD=x?@(Xm6|mBMR61Z7wEs5*S>Bjha@d?Tc`X=^17<-JcsRzmPZUHEvqfqZl;EZzU}H*>$xPtOf> zDQQP=oLz%1%B|ix_ik!jxEuqvG+B#_PZ+qj7NisD(gpi4n9~6zyvqSBInw`R#B;IY zX4!++gxawoNDd%ydhjY88I_Lc<-C)A;);LMO44gMdPym9Z?`VMd8m_~>;GBOFEw_c z9X)=t+|g||v$i%<^g2iFcF?!N6#3iBp_FU;v92s&ASGEFOtnh1Ud>0Qx#OS;K=p;Yv59D`QN)Q)Hc7RBF(8k}FU zPnIIB_P;Zv2B-CEmy28&dL@$129-FRk_{4ixKQufL;eeAR_a+e{^!Ho*afRSwJqtD z%^Fmw+4R{E_KP zm%brBcx}wg(7kHVwrBEc6}(~B5~-D-mDo zXxA1cT_%kf-6HZP32UV-d0^2fzV45BLz zne$lp48t>H3`dRiUBTKnZ5m1M}{3 zpLJhLa0Jx|T%D!)Vs*D}&8U0T#e@|5k=3CtDXjp?Pqdp!OIZ=o#}L&y_~cS%kv~3S zBj`&E+#SQtf|KYHtge2xb1kX2buqOhon2Us{!eQEu2TG8)mnP1+B2;^o7Whj7#1X{ zeC<`y(8GZ(Wd+4kH?;_H*^*|& zfY7`BK|LGs`i<5oit5FS9tr%Tw2}(`G#!3pLX8npYQzZEhO%i=Ts)WX0q7>M2;Z@T zr1TLIV|fDnd>4LlwNbBhSp}Cs>;o#F+jg;Y_c}saVpY?hRP;CA%G!>e4rA|!= zbYoQ7{tm5L@DS@V-KwQq9SAKN#hI%M=(W|tZeI;)%p8px0Y#6})0jBMK@7-ETb}K^ zbC{#>N_mWp#G-yK(b9NL-Cwy)zG1RalXF*P315 zR~@&PJAeOQ(0#hy5=Suu4*hjxi4*sC*2i_nT!%n2jJ0YIBk_TRRxMS$P!O#Doc01r zfNx;V4K-HP$!$zwT*?k~>VO7I)q3AjiR%S#dEx2_q3`61>U!p`O=sPs<(Th^#p3`^ z0>AXsLk*hJQc;-86|H7@p(BMZc7oaF(^Z;{l()WS;TbE4bXQ^PvJ-ZzxpEo^ zPj;L@MRyMLTke3s>_ADNGsG-Thrxc)fQhDi#6Kfdp*_bd(!i^eKu+=OqycOii7JlT z3@MEVX=U(Lh|~an_)}s-NoZpp#=PXD)}xUPV;=gS$Q2`;Y~4kU8*o%d zh-Q^RPTB5tO{4`6m&m@we9=4Zl1@@QT87bawl*?RoV^#w_W%&@b(DRL5Fc6jC^Np& z@GR`mF3iv@!($tqy|<&hzp||tVi}Rd)B7|h14w$(!?w>yYJb|Z0BXQZhDo_|*gR15Wu_FchuE%=I{3H&v(N<)R;Q5&ikASZ$7V6+@oq9MqcU?kTaa1%KH)tHtE6|JRBecNq> z_EyTe6Ac3@QN5~WVY|}Sw%X;|*uCjjySdu7ddK;e+rx}PM)K9S_crI8{#E$DE!J%rlTEeFG9jzSF6+9)!Y=EsoSI#=qjFW|#m?Gc8JcZm z_gR$PcU(r_eL-#aiJ=_oZpfjB_T&}<(x@T-clQP^%-E57eq-SHl@9uOw8o5HIn`a8 zVL#SgdpAy^gSw-W-O9CWblI~VQkc-5rz=@fHq1lLRW^E*nWb)_BXB~sR}gy}mQ(R6 zZx0DNEchWg^YN6Nx-+_XK_X?Mxn!jOeS4)^>+41)RT^Xvu`EWsM~$O_(!{VyK%Ajx zqkG~Kk+?UJ?wndKGL$G#?irN^Y8aHzUg^xF+f;IDYXb)jTmd!CRkTPO^ud4x_Q-$} zaNB8{*ukr*R0Vh(_44*2TIj$ytaMac#@XIPX=>9t@K6%>`!~ywgNES7kXa2l3n$(J z?9ye7n$*CF0Olhk_Y<08e`o`314kA9_H;Ual+mh*`|JknzIJ3p?tTqOQKLiIHV<>wDBEuf>DRF+oL=lyn{Z9ki4853%LcQ3by>SYTsvIw?PoOizo=0c}cC>u%%&Dv|;KUALRChhVRhy5W zXt(*J4+)D>1V7|b{-S9d=*7s`spq*0+W!SBKmN;PkY*|#y?}NeAx=^OlhoQapl0#v zB8f^WJZWlgU5EPTDyPmsMog@z%|=cg%ywmkxWHA6SX;e5WvOu^$aG{NG}{2(%^W-q zd6kIQ66aJ*J0D=8>SGtLU9z*X+U=T5W0`UbHCBt)7DE6j5DxvB{!A~zzR!1~C5*l4 z#jL4~hY*DmHE#p;_B@K@ofeWheTp!ASerO&pgw=uQu_=EQ2V_uS|_;pGfX@oR*e=7 z&PHzD=&KmE`MAsROoZxHW5Gjlg<{x3`rK$~(Q=j0II`uqk0{c3To~vP_C>9q{t-o>5lsShjYu+8l+Hfip^8E+CR}o&!oB6qD5V+EkCLov~g8pSqh(8hP9X* z|IX6RCZ)Nf*l=uBA=vp8$LQQrzhkzowXu4y6nA)gumKO{W5{BnRv8)n=(!SJ3|s!{ z=CVnk5K9i9|GxUB`e)AU*W7zbtelc@w_t`eao6EY5yc|0WmmFtH%(!D6ZcPRFn=veWF%!|TZEcl*NQ21JA(d% zz~l6JQ)Y6dk3ss)zKkZG5|-|_36qrj%b^7eot$}WlgjU+Kn*wDno>W=PWR~L{8*tN zqyjNWMI$+4tmcBo5wxxunC)iQ7#=TBqglLRmQzgqtYCf)vQto-qW28JuoR%k!iFvL zXDMAZ@Oy#t45ewJrpW;dg2h#K@{>2W!yJK-F(bSx95bDa%lFTMaX0K)&wsX!2RBWg zH!oNaAZ;`D7QQ=>{B!M^ZFd{e#1%s83{xvHJGgi zHMI7EdusosftGDqJQU5c%vK_qdFCD1$8#jl%!t0~8SI;d` z*ddIAD>Jw7*n~|Py}H55w=HslJ;iy;lqT0O%wYYT$A|!-%n|&|+hF)DHHN>1*W!M; zPQ(gba!(5~d771&$5Z09#!@FMa-Tz3P?ERdFwX(*$4X8!8EY7^%qjkXJh!H%{lOQ$ zghiB5vTBilT7c5r+`x;ctJ_L!s5B3u>&S@f{J zS->MdFEOKz%uU7bKKA@2IGs-*&)G9vc?8!;MUkGyecMy7^I$g-zw;pBKbwZrzN3#l z=d?cKF={yNeolZNQLb+*wdj$K3$|U~Ywq=Mp8YMx;L_Ox(|YrL z=hA8%HXxHQ9S8sKVL$do1Mibm`?Yc@|8Ovio>9bCt9 zP8D3oc8(of$9m2cT*rP65p2hDP8Mv(c8(rw$7<0o*pBtA8EnUX4j=rA=~6DJ&w6eR z;k#4N3&CqNUkt%(Hh%ZYu$Yrl(>}PDKhY9(T2Z1#q6J}>9k_* zE45)>^KJtg2E6E)h5stK;AGsixS-W!i#aeC^|!G3BO=Zn0T0^PS>@P!&h#=ND`j;G zAR-|nN0-Po=kF1Y6xq((iZE1pT88f}i(8P4tXd{bC%XyxXMF0+MJO!$U68{KLr8Kb zREa!hpNr`vC`_Ec3f05V`{@y8z9+!oeqxOA{rngP+6=Dnul8rCp>sI5jR8nl;}Qf` zc4ClV-KB<8Wqxp6qvM#wTAaN~mZ~fOCpE1JuJ3rdL>5KN%Puvu*5Y+C%j-Z|(sf3_ zia;@UgP4CWUJhl7hd~0(1-d;JwxydP5f=M-|}#4JjNcrIljsctK|1w zFO$RiH!ScnmzzkKXTv)s>&LHxa&B>t2z1nRlXJgsB4_6Z%Stb6>t8qVR&x7P#$^qG z37NUHa(nvG8qM2U$z_(Yu2e#XpG_ocvFzOJFIHp|o1>Pin-zgas4Sic-BVN*!Q-an zjv`aHy+v&$tE!oLo}Xf*9K8#?Bd}~8Ut35;C4mUp7A@%`93b(ozrtkTdhilu?n)8HMxIeGE2~$I}1<^k<1%KLas^>O=>$@g_S}{4p%TzEa{}hCO1ChgyrOB zt_Gc*7hBZ?rDmGR!TnDbYy4(|!@k0^8OBVrftVvC(6YyC(lO`c8v7KUdAeyslf5RD zyGED2=7syP&)AzVdE^R$@LljW*mL7M&4et~?iYw$UyUj#zYX31XS zTuFPyLJ2eGj3>`t$p=WSPnG1{;|1Bw!3deJ_I~@e(PI7wY_i{+U-IseT5{aIQ!@TO z8d>j5wd^NrJ#%H!9NPtoPn@Lrf<`hI_%7;sfg_o0;R9JNO@qY#KahHu9C;L(DCiy; z6j`qLxnKrJna{`pvR#rH_!zW|pFQlKv++ zvf2Y2+0W#Gxp%VU+p}z0uS9#KD|@tc+OR#dMYf+B$-BoJGTv$T3>WOXL*|^@UOZ&BK#KfFbe6 zM}Hp@pYH69mnW;A@*XE}&&z}7S8m@n&>zYNR>2cLZ=4>whw|PVLH;lw=1Xp09>gBT z=Z`{IcrVo+AbA8b`2!6>9w}YsL?0++3XuAh6<+<3Fi;P^i}c<+pbz$Qd4TOG2lqP( z;QOfq%4%i%S_kDPK;)pf4;h#P`=PjR8~FXxLw+AP5Duat-b)0G&HxV0yFLC7tdI1* zX8-~G=ingousZXrWuP0MFR-8XzGh$#j1T#}KHU7FpO+^)pK@R6Cv3nOTxYNz^E-JH+(G}TxAC+U+9BrTK(h|=6^8tiwJ-mx;pf9yX= zEqff#`agvy=h87`fb!53z>){7x*}yPS{n%wsZ5nLLp|MKV;5NIB{E61G-5TK;BXfh z^%b&8o%DPYo!~|nSmc$HToYW|8tFTBsWwM`f)(P$>Q~FE#`3^w$#Sj5O%ZNOWR~wg z)#CWKN~S>QJwp6WzkV*)d@Au)*cH!z%i}6{6#BD#szgO7_=%n?cmo$H2t7$UE%2?e zDk8lqg4`8JbV07^^E6#4r;Dmq2qiM!YM-F>gZEns?nup$z4cCiEwvG^CImTe5$A?m zFxpo?@YRoyFO#}9Lq1FD=?aG`C#EPdJW$ZRnN#O!S)%Mll-#c-dfKqPnRNfL&JC*A zQ5CQBAYn7XbudZTeanO_nvL zK=x$Ac45Hy1(YoctH>fK^S)SiPukwZ>B4c*Z~(I0Kd82_>&BpW-iegsIE5hGYO=RF zHe4etzX@kG^}F>|Z`G5x{^JkcXz91>%Wl<|MGPFjpw)d_$vWGK+U)?hQWvg%UJ~wZ z2bXTg=L8uGmSiJ=|b*@HvrvW%v?F{LX+8tBzH zB~}rLS0=m(KKASQ2AU}eX32+NF#3dOU0iY@;|0YNKj-PpMq8r)K-rAl!eh5B*X#9F@`hjy#cH3=~7Jc@{WoIFRiqsF~tU2)LiHGzB z{_#YK{sxEtptofEj+z}1)D!hDX}++fImWw5N;bUL7@ns0fI>emhI$6&Qy2H1ca%(M zGybTt?%gDXJ{oc5+(hy$@j%V5&~>z5MDv&KGMf6Wr}p^+@Nm=bLGb1ap#Oo_{{prC zBKLV9RC}j?Kis+)swo=*=bR||6l9jEPdNmTLgr#VP zOt}Ou^%79l{x-x`^jFv!Ch6lTkXwhD>|i(vqjV~8be7pC+9n)fNfuYYNheaK7AE6D z-f-&Fd!@l_2M+s9l?OB#mNjcg(Z6<$LT*S5vSGi`*rLaB*uFwVa zuW3LtC7wrPnZ=_sO3VQ+)|^20Ov?%+ICmVb1?a?*BK=V&Jhz+}-y}Q)K|3iLP%818 zn7iD4N{Dgx7;-#Id#R84i$4X@-3+`WzEy*nLK@3gQD@xr;T1z)$QS5zZAi5!tAb)> zIs4^UkxITyiLi)Td0?mc&f>dG#pKE<>snV9!exx%yf?-#z7_&_?p#cKq%AZfQIQpz z*%ro;7B|q(MzOjDR=oYj5K#)cWM}GaV3}L2`0N5PAi{9#ecL4|6xG z*NaDRjscbAExD-yG4&15f>+awX3#5{FiS&e^MEA_ek#W#U+oRIq=qM!6llaya0`L< zg0fUsK99p%;Pr73 zRs7&|X`s3eX}-yUL{T4UrAk^ z$zjsDee$>8mB1}X)$C$TKW~}76+r+fiSFcT zMe_2OxsP%xNA$uu%{=>QEaQoE`XkwJ+OvxJOosO?{yoZu?+N~S!}@;XD)_wy>Y13& zJD7g9%=%hD*IsbV9%5ys%5}!cX91e~Wah8AnF;Oq(Qzv%T3_(nQ@7<@G>EuiVDo#> z@nNRlWd5Yt>3g8oUU((}tkLO?2X$2D)ca6Lo$?E9JVsu9+wyw75oqf-WcYP4i>;k_ zHcnuljJ36MOKzgiZHiDfRmdU{l@h6CR5aemh~$Wr-+L3<6L8D1=yOoQK9Un}63Gl3qE5DnPB^9B z0arzx=uhbO3xjO+xb1B9I5n+YMH#P(hk&kDV!A@UvdKED4Ebs7 zr1G1hu&-s^^J;w1dgSNP%DY7j)4gNJ(?UZ0OR1KsZ|7;miwN{rL>td}H#El~Jh2M&Zz6$xg9&7Y#^~Q5c zmhfD4=jN~ZLC@;ZqBj9>PPq7&1ei7)W(#uXv;BN}G~|y=7o_iFn8)BoIY!bylGfja zL46_lAZHAt_^F4#Js6c?_c9Un@?~YtFLlT#tA`6Ild(@Cky?g0aopH zjI_h9M&Tg@OA&(ICrRAq1dqibTF&e<^(m5xh~5)}!j0NgI*?y-G_**4fU!j{&#H>p2PweewDjD6>iVk_vh0 z57Lr2sfC+SvbM!StvO;9Xex!9mPJ~ks#dJ5m8~rjwk4&PHjmZL=Q6HzwTiheX-yT< zu8JzIOQx4TU23)?W?{KG)llLWBzEE6(bFW5Yqm(f7@azFZ7orK;e3UcJ8|^x zOX5CcJ{l70N%`tSOVShazhY(NAF|B)vH0IpiMuszB;Kh+z7IE|w+4p;lDOeX{feE&Mcc7mGFZ@3j#3wy%FzW$q~PcIGk0SyZXNQe7>yLu7(zkcPJ=n^N~c*#l^|e$kpZl!zno@k0OZa+kEY2s|#i=h;&b$)kYRaZcIc-6&Wcx0$M`2 zU3Q}Zk*?XqeRB73IuZ;P0Y!$-@hFbfpGike`BJoD(&uS^>ix8Po%7B00kw~X&n&Zy zW6N&G`2Io*BQ+&O-8?i9k&QZ9QpL>RBzr9tW({r^?I9qto^ICR5^BcD*-QKi9v^!9 zgpiB3!AerMQ+6h~d1fT<(oV`QiEOT80f-&vdpRD9A@>#|)f)DB@{Mj$k;m*5jE1fM zsdc<~>C|t^LQ`uVs#wGEBkVEeJO*)Xh^4Cp}sNKaZ=T+{X zX4^y(0z;C@h};iORRrYV*{Lgx@Cbhh@%gh}C`RsD(k`uNm}HiiDASgnY#Ou^FTpKD zmd2*Jh;E}-HgS+sUrqeInQWg7+Kl)uU&Xpz>QwdO!1py7pBcwn0h;bAzQZrX7-p_Y zJ$2u(@LE1RAnrtzaLkxF}(qYr_OQZRKV zES`bU7tfj-W%1T1_Yw7fC?Ng^ zP)YvJvV^d!7QD#;x3Z1gq<4MGBF2Y( zg8fWt_8w0_^TW*id`S()1d07_kMG_apS_#k*T*Z~01S_@he9r4 z?}P$LJ>?;AXR5Lzod=CedcSq7(}N3MGUT_sQFZXC59ZVUxG4H& zQRMd)6uXZ$DZPCU;7`S?q!@5@2?&0l(9Z0d0O(ogr;gE1nS@Zs1pUmvr8fWdU=8x| zjgT-N45smtRj%*{ZCbU>Yg)->VIIefc!Z^Pg;ig<9xIc8y9Iu?4u|rN5675yp<> zH121|$%X_K7!Xx}AHZCh(8^FQ|M@DcG6G+t)aMXiv7y8MsW4WZd=)9>F;}RN%2OV$ z=tyaZj|k$7rknH`JZQ4xM)k<_aa9k2NO;Gc^sf#~~k#+(e(Yj^c*PPT?%G?io#eXBScZ zURL^4rdJR~ZpbZ8n?}2X68)()aJwR`JZ44~dWBV;qROk^(dWMKEZx$-o0QHeNc2vc z+#vgPQD}_zmRpWZ%^o6c$@r5%9CnN8W#qvc*30-j#()U;!FrWa%70ZPttEtVW6#|Aab;$kQRz-O~>@`S^J`*&X#rq)w#$UMqwGl&J( z%`h=&?zykS41eUq9A^+U1J1T&Ls!KSB25+ckQjwz7rQUaroN6zRjO-7tOA{9oUHDM z%87Po5H>@T{kGvF(C)N6u~c1ZYP01ae$n~_+tr_~p11pC6i0AxvN{1}t<^#HCS1;S zqOzT%_%HGNJv_X^cjsVZ&M667+yV=EH%#c4gy6e_vc}+^)bJwPgptw=<(*#c2drti zU$R$o{2Ad|;*EFE#|uk+X%Qu5J>y~=1=YVy5Q_j3Gc-$+Wy*Y>NZu&g2fclwzZGHt zI0u$&9Z60c61^N?DHpy(;*qt;2-PEEZG1k}5`?XS@F~FZ zjX9Ek*+J$usSXmO2J?pzd4&y$EPkPcCp1m1BEv=B1Z(#*NlGOtGK8nUilkOADa@7w zEoJ^8zXC?2S4_nn^itdP(nG?wICPd@>;O1x$yW;WS$6RbUF&44dfwL6MLQzxBQ4}y zax&V1uXxFK>fT+|(KfW2Nw_aq_VEn3xf)&9ysd!Oz=>LRVh`&4<*q-J_CUR0X0DX zZ~B+#|F-`9A5E(P<)d=a%712-lnILgVh9I@nLwHuLUK51_XjvAIe?^wjw7>E5`vuB z5gq-;h&sBUs3j^$8VzH)3M~{$0=zcLx^@+A`?9aq_k3$}v+wigY?oV_j5+Xem%cy8 zo_p`3?~dlz`L^eMZVUlg5$$(EOq31Vs@RZ?s%^mmC$?ch0*BLvWm4?OR>i282`6>S zA}E&1M#Z#v$<`$-cD7|flP$}nc!DjEDHp+Oi%bk(Snq7gUF%>_(2F{M_xySCKEg-grFua-pT z(!#lZ(E*1Rh%H_mCS1G7?^kP#s(tUwRh-2hT)7mmwtKL)*(yMC{Rd1qZuGLWoD01} z*pL>LK;DI>)}3}Zx|Z zD(y;ER1_S)PzIt=_T}9dSl@(8c~_+wu#^$D+)-R>i!^r0#xvs+OFvJgjmtV%u~)7C z7uQjk(R%Y6D$PJZBPyB3QI>=*!t~!Ym-rA}kVrYd`NSEUieum}4ues)FFR_3ULC<`1n$e0v$(V!01rA+-&eYNoBSNWb*#YY&V^4cZ(PE7oY; z(O2W(X#*lIZsPV+PAx>7KZXn%SRjM_Do_$z6%Z(&Wgb58`?+!L0+f!v;oVDQISR@I zT0kM5_AQZWx#*HA^BI+ix9bXcxCd2}Qxfc_&)x6rUt7`LmkAhyfC6(3-TcNIIP)xO z=;lLT7$M6rNM^M+Z{ww#y@Sh69YsfQ!bp3N>Z#8cbkWliFs#BrstZw7VM2onI~_>- zZQ3sYpA0TV76XO2ws6ySE2|dx-wU3b*yqSfw6t~vDI3yRAAwpM;CxFfCYtS{_LdI1 zjExYnXP0)N#xifvQ+WpC3O$QKhJw}Tm3Huu-wW@>wiyd(QA-QCCji0k*tpY3Fkx#P zaH^BXZw76gh<74u46B3&sWr$`v!l4rS{1DQV^O4hg2PWE4UGHuV!as$;vPt4NmETm zrd*KT5Xlk(=(^#H(HnGWSnNfVeKYvvFswE7NEey98n7@GFyY!%!?!FcW!-~Gl8ON# zz6yCD=*#3$mhyA;he%|fgN-gHRsD{I-qYpxRu9s$=RZ&2)NpZwm4Ge*ah9NtrR^I9 z1D{emzZ>lMRYP3e1Xu;-qqvsLFar}e2JHJX8!5xer+=+#?fqH^7c?}$0+co-{A{76 z_DQCG&4rtS7Y>Zfn~OyBtRBS-Mkhu);0Bca==T>H3B`~tqy^cv>H^xfIp;{kMyTv# z1qKC-iDT&H6~CyAaovC$%Oxsepcn_zI&Dq72p6d5X&vTbKL0AKQM2RA+l~>e4`e>I z6vxg9yuOf&=@@II8qd}=2UCUq$Sr-Sv6!Qv#)q8bEeMSRq1pLoe(e> z0wR!z#APpEu{=3l$l{@dmB|td7rU8FA?tdW^!UoX9y0EIV#P|=Lu?GGwBV59rL*mp zei?i=di9%Ew-JBj>-1#)+LS(n#f(rZ5IZt+JPMU{=!uODmj|UJ1};}Iq9CYT!w}bk zU_28E!evhko5Uf+n&>8Q=~T4-Ee+`|M?JW_boU(+OOhlJ>XsRHE@ZVa!86`OgQUVD z5$Z{2WB?3>A;rCU#)giz9z?9_ow170I))e6N@J=eMJ9|T*haQUx;2OfL1+k7Chix7 zDiMeaOHg)J$IzH+*50)Ph@gI_^-<=O)w+hH_!}4HYh6lHS2ZnrQ`s~ui&N{G7Rjh} z?MrLbJ~LDO>`HNJT#8fMG%v`gcWg>;)HV%EwQF3eQ|+1;Z`3|RQ*Rp>vSq5q0sgP)WdW_KK$xhwu3ttE}VBB6|t31V^U^Q7|8=G=Tq}i7s*geYdABL zk{LMJn0s7jNH;#Z%uw!Q=cd#1-uE-!7;H;ozm;AYpxr&4otP5p9CEuvc&XaBWC%xta(nqA8rW4p&SZ5PS z=$Lv`7B+kpmySEYv7XAvE0L4#A`155aK{#YH%2(onWCg-ey6XL1xy3sk|{fUH;~jt z^R#0w>Y>gU89|_-l=TqY7LDnwHViw-pr39l`1@j{u@+snI-qRg>WNTY>~Ikymvnd> zXTxKrwm9-UO}LhmL|YdJ!`9@j)+YUB9iZ&|Xr%OaEK^kqA_jAhIB!@`XxBq(&PcWZ zbE%joS285^bvz9W^`MpuzW!lK{!q4QWaB6e6%+aNVFP~^E=nvT#}VjUOF7WcL{k3B zY5krhPQ@Yp(3RvOg8lB{iB_5}E)oC@ez;QQhTRi|Z@RCXv2^{}vh)$?CG<;t`^#Y)j}Um^S= zdsQtte??1t-||Jn&v2>KXMQT)u_!4>%N8j)F40owP#v;kCqie77%A!yun>{ZFNN{= z5FK&j##rYD;c=q2aR&9$)SU7~PaD+>EyAhwG9}it>SN<>DMCU;LV2i*eZ3}G)e9@a zem1XO)hI`TR5QoGggz?W$#0b?heC!ob<2K4as-9Sz-SdM3KMh$)e9g55x*D(!B=d zFjFV7&IG6?g+e7>^{V4Dstw1gY1!%W_74`qau`nG@l2svWT&+5H(eEQ=tp}LkOoStnt`$sf4FX@cELrpiGS}}>*1n1C> zkZFu2g>i5pI^-rHiDtz31T{inLZtslioanADbXk7Dr6r|+|*z>N@H`%*YAa?_+7!2<{(#^wcz z;t~e#t!VxeG@&3No)8^c5W?$Miv9=Dyk7t|;83t@Bt#3%Y7Z10Xun*e+-c+5HNy|8^CmKRLJyf#oIUA3A% zJ!-_lSO8j!sEgL5r{_E5X90hZh5!ULfw2ps6XwmxteoGv<;K)ih>gSP^~sCe?vy&z z#yO8bJ?+)8_v@n>mi@?kuIc*2mtG%RXB*{4FZK??yss<0J~?;Y25tNPoFMtpjYzV? zt<5B4%S&PBa{i^opH2%7Rs|^9LZ}v4T#N;pa|1q0j|(ZS!k$5WgL13w^t_T^k*SvS z(MO|r znda4!scm4*RUGjZl3Mo!Rj}it=?;WuyLqB2`EEe}4$pE*>v9U~aA$Zsk9e=hahk3L zBTe)Jwd6%;1Ns85NvU@wkRMwHz67VK#9<0ySNtU9IK(L>j0^&fVUE(DIS>C#=Fxcf z$0-hZGvlu&B&cluNr247$|=qx;R6uecehI_k02XYhSSE^ zu<6r<-)FbqhTQB#$!_dLQ(mYSg1KTnSoOG2+m%}@uMb|`t5;XY-l0{!N#~}{a6?4) zgfLUY7OZ3U;z%!)qrEB88}(;4-RuactRq}m#}KFsSm0*~j1ha}dXtN?4@hS|$T**L zqOQec+rhQjC%vv4F~TL?KME6m+NSzhihr0SKA;bP_RB(#ex`%1@#>%QB*C%@{M=>}K_OT7=EOp0m7+ z=o_)=KPNJyZL#x-2aot0`Mkkj`UdFft8o-0-|>@3hgWK5VgCAX$1;2IZ^?~_-G$vm z=oELGPjH>;x{LyQp;>kHHrU79F{!zsGkr4ti1LnJwIx$Qrd&NvIU8+fGS{y2_>j{k z>N&>T`6lgJXBc2Uluo1(NyiZ63do^pXd+nqIF@74CHT_AMqKu|MC5B`vddAWvj!u&{=G z3hw|qV@4e~gX}b(*d_=6lSpL-)DgH2`Ix(v+Hzpy#lL&@Pm$b4g`K`-sftDt*?Svr~{hQzJcrjeT z4k{b`ILp_^x;JsLesipSSy*HBbqoZtTZuWRo$<);sKY8tO( z{@NH`y#pd;Ef+G118HqjsWai%b&=s?`+-Fzd+XJOx9~*meZAiIoo@6&F{uIZ8 zZBNM6hj`}5_T8@!ieQa>iELLc+Y@qU&b>gSJNfld&Sd}JJ(LUo;V*F86F_G~45}G1 zEmxda(d8S-U90l#CuY~I_l^8JZ|gk$nf1$(o{yldLF7X{62HdYD-1-%E8s^qe%Ki$ z^oxg?9v-oppbW&)$VXr6p%%mG3rzFl@5_O($AvOwANyawpf4+fNjM`>q8=dlS1_G1 zwf^`$Cqhzes4<8RMiGReh1Djo> zRMOD?13o9jxjwqOojHe_TFE;l8N$O0g^3@zpOeBPn?{p$B1ucsRN{93s`i=Z%#W^x z`O1I~ikQg{dX-3bHNsf-C&tHnb{FDbR$yt>fV5Ht0r*Mz3#_uuw18{d1aFzOc{VSI zJ!GkLk_V2(+`?)fWp$h>_~h0v&SoYG7V6+y)02N602D>J+5WnmZJJ5S;jseH$;39s z!W>7XDGKx^%1)Jv<0S`E3Qkn+SS2sTVkHS#DgVs^SZN9i6(K=cO6biDg?X{AQI&Zy zigS&uAoRwOY3Dt`v<`Qux{fU-+5@HF*e(0y^z~#QQb~lRIlO}S`)7=_RM*FuT%VEy z#XkHc_R;s5i8LssOI$Qlne{n;g@PS8IH=BELTjOzJw}l%xu_^Bkt!yb7=U}0!I?}x z{q>3{bdv9Ei|(<-IFT@bCsQPy3fa7<6nL#F)dh5El%1kn zaq#5DGs$Y6+H8S&3iE}qDU)xlOrd>hWepW`N4yh!yt3KlYJPN=6&KnP!g+qf2hZ}4 zJfIIG#0ij@z+?u4!&TZIE?DH1SJFs6$2b32Q(jezFPZ&G%-OSd% zDe3@eT&S2-R#8>9IA`%Fa58HzvdW2+N4HipG_bPO)FdmVc$(nWO=%`Uh(~z@9S_g^ z(vL;WkzE*_-%RgSyd3|$as^FdhnIgHwc6MhcJl1`tgg1Y67$jx$p!fa>ISZPZFFr; z-3v?{OnnV@#833Yc4Tev!osq` z7N*AklXFc~`{$3kg7!OmYv$f8^A{{wjM5H_a6_Ptr-Y5iN&`8oi6muM0Wo#rngnb8 zdN@}TU#(iHMb)SO|3%wh1xL~>ZMtZ;T54g7nN?zDrWP|ZGcz+YtHjLA%*@Qp%*?F) ztu-@yX3oVj`{(R2D=W*$tf-5ONcSf^UiVyEL5*D!kt=Vg$rb!rKB)ZuQu-~uew~^s zwO0rEvO0b2an1d_;n00-H+_-(-RTP1(|mhPwm@c{mx3l_g$$in5|gLGS5w+LKIo11 zOa{U1Gzu?uwloq7bU;=l#+l^F!SCpuNSz`9qm(bbEY%a>g1+_5c_`U?Lz`fq= z;`mHn;+*Vt*}0Cq;AFlqJ`mL(tZh57A*-S3$G=qWA@XMvn+tI{!*yxKlGOSzvc(GJ zt_?v4W4R+@M3{1Op-i{e>-2Mtk2-bHUSL$4RL0{RWuQT_h|t3IYb=8$^%;k*FiF)e#IBa5Q#u@&0$fY!)7ctH10J13M@Km%5cJYoh}E zZO7hjjonHEj&(>N71EAF5fPne3acU8<*%m1!Y9~C3=%?d`8Uyangrwp*YSkmQ0tL4 zL9&TKR7RQa&am`M!p=C}fH{c5%&W%645z~fO9BH|zMOdELTau1DujB@yCrY+o2kdv z!Q2!@rc1GT$N2_ghaj#>ig&T)sCF~r&Ir_`Vm${vTiKR{HmnIpmeuPu{hInEc)I}- zn%X-7F)Kv_j<{$eqsxLMhq!cTW0rY4RaRl{Bp2m{wx!!Kclm1!gBfY(gt~fTXYTP% z<#7@xFCsN}9H=Glcm?I?K`k=6opB00P6qQ8G2TwK=AAg!q87(8*z1(Tz=Oi&%GVA( zw7Lw?d$1vf6P~~n?#c}FmK**2KcWnT&ZXXlM@oVT_1@GPIdq2Ua9H-?0nBV}GBZ=> zdCAM4;?QnUBnL3*nnF0^^6+_&5#twd&%YM3mGv|UZNtCBWH7A4*k#d0fi z8W&gZ`DNm{!}Hbc;=x>#zuI^1Kpjey&-Ao3%Am@w(pG)a&om4j3S(5|SeH>@!b_Eh z>IHjKCZ71{?a-1r`~IJaa9gZ1B!kS1TD(67T63&#flJCQFC4_P8`b*cxQe&b7Yeh4wxmob>+nkSXp0oq zXsZ4x;mjZw^df`eFl8@1!HP`!s)LhsN>sz%C{iGkAdr4aAiT(?gFkDNm1>oCz(KYL zL&J&eDZZ7}D4KK?2P<7g2lWq>8hU_8U?_js$ZSOip|DX`f#w&z{UE%ku7W$W=x;ZH zJ#v28(2;|-w75vF(mQ|rbOvW)vLU!gZW4N?^;d$>K)sRrV{SZQ+HdF4qj+d+C3nR9 ziovoF*l2Dldd5MjAv!2-(t6J6H%O13-ET5_B0#!BcfC81`+vO@_EfK?6?c&_7Zxp1 zh#B5Xt6`izeq^n}#vl2B=*Q!kI6F5=$Y+n4H&I*pWPNy@(L}oqsjPhns*r$5O!y|Aq3a_g(Pkd}=WerSLcSb>vXFbA6T7=d{`2^uvM8WDx#a zc=Qv({`W=}`fy>OJuWGzG*pJTWRA}>+ZJaG>vUVlH(y60vhQMtHAWOwaVZIv?hso2 z)z>J_B4Y^73_FEtz>uXH2%_F=GM}WNpyP%#FqYAfK6(&xHysB+wdDL zCr$G!#N$Fj9X?=ij@1QQf(SlV(9D71FC~=}Ei{^V*8e;zCI)Te3=c+T792 zYk;ud%A4%99#j<__ub#v(D2ieUTR>q5+**E+C07XE$zamGxB&>cz7avEwP|Y$#%OE0qcG%5=W#IJR&9ztDZ5^V( zdZum0p+FuC+IhOVQOM76`Nlt-QZMXT37>1(^9sCrSYlk?4|?~Mc%8Us;iprV=*6rY zcb#Q+;mLVtqY?-#jj#C1S0(>^WqS3_xT9p9JRer0;O~|uaNCZtyUh=UF0AZXSOT+& zP-5CnYYYIL7w_+(+TQ4S?;6Hwh!2f?#`SE{c2($lQG$9kHWiwBQ9IWGFL{3nl zu`B%!_pdr z3^Ybl^AGb41pVa}ie~-riDQKfKBS*K0w)6L$75{4ZCIyqR|gjtBR?^JTK|UlwW062 z`Hw4u?YEyh)5ZlKr5sgSgmZb;`INYp69(TGhTbwuDYK_$s{{IL zt1%b$_c2V=l#g=!-%i5&*VA@+a2FKf=tIiX2k9MuzRV3wj`=G z8FUSue+^_H!bYIlKLaW79|!Wkpvm}O2hzsrzYk%ibgy*ZKMOAfib3_C<*rKq3?VT+ zJxNKJ*sEx!?6u`>|Ds>HdVT=BYpDJSq^H9=|7Aenv;hLqYrCjnfD2hz*@4lm?ZfM2sDin zM1q6j5uwFjkefbp_3B33p%0pf9JOPI0*RA`w<9K{n}M~cTvD#N<{!-u#cdRU9SWs_c#Tdt zhVxnV+zlu0j6Xf{T^xl8I&9y*4}h zl4n5q=l1vg$F&*HfBp8`8~tyhm`oK&S4}09FB{`Hw^V5~Buvbb6jZWNqSFNVCPzX@ zF{~6K=6K<8Wo?q`)0xqUn=MJxpF)2@g^Umu_MnvbY;z%y3XnA;@)CrQH|&yy>~v&j zzdN3dM{mT#b-KT8P!FX(z!Vp3jRDn&t$un? zphp2psBFEkre_odsaE4$Fo!{@7pAS;+(f=mAzpyE$_$meWqRB;xf$^J$^EMzs{Zmc z*!0-;dPmkr&#i=XZ64#CoC@x7;CDVDw*ZvGg`1^;ilu^OOUS#0Rj;kdg=0{gHaC!I zC@u0*m@8STV2CsA1m3G;mJx%Hd8pUadK`5Z%l0=87hTt4s14SHA<`-G>)RgE1}kM& zR?3Wm!K~m|EOp_k{n^-pC_TEvUQw<|l(YlaF@!O@|77%ZF1~m&czT#z z{yM#gHPaQVWIPkvO*~6FgE5D-Drzf}n%Y|0&RpFu>PF^5`%yy$l1x#fKk?SXf7buV zJM!ai3`beIc;+!)QB61(3H?r+h;I{`4q%{iWr>J4<*4FRuUnX|f3#DFv1Q1SL7yu6 zGZ9X0=Fqpwq&O0#_EZpy!w*QpifVl&Kn=c(1w|~SH+bJc4WbZBS_>prNnte0-R1I< zk0F`^(!3W%))ENdAsIXd1$Fgi#SKRZnNh@#4_*8~VLDo~5aVXXwezZ^6&tg}mWzX> ztHH`>NwP{&S)*ff&qA1%M!JI=KUyIdJ8f zI2s!grAw1mhGvb;eGA%GL=MbmwG$1dSfhU0*?7P5T{-|7vqoc)!$~{a%j%idnP!}D;A5+I~DUw{vFGtXo2c+f;w1R*E>#mBWm=+9er83y#RMW`y zj@H4feIGOX>%mgo((RaDw$PnJj*KL-miFqU!*+}M%=b+b*w=hO&yh4`Exz)KKx2nJ zP&GU$aWU1yMFt&XX`yFPH_m4|Dea_D$+9?4x@2mNSVjpW6Ddkg3-?vEpt^ZB%-MK$ zb43lcO(Ko%L@5(hKV`G-NNU#NPig4+gZYG-l|+9ADr%d=x5c_sRXKeUQvoS+HY#6* zUnh_`tiDb^E8ucyedj^gxP483*udzL`Ktct|7i)MOXSO1izVDy?nC?w`LV=t3@iNZ z?j-@a2#xblYF35T#kw>?If)?%XZE{UxMaig$Ke>&(Gu8XR@T`3#>&NIMa5$B(nbpV zT#~5}+5tj{WIQT&#x&`+#MaElaVK5(Yoa`RW3Rv#DRhKujR`)K4Qx~su4Bc4$(Y5; z>@ATxm_BAdnzwqK+# zxh>lnKbt@f(j&nGwBtU!T8s8hFue3Y6oKH)7ko4t8{ZC*AFN*@NI9r7bOnMcrEPdm zDo8vC8bn469E7JV)isQsqOK%9IUNC=Z#q941|HO|rYBpV!3_|8?PeA}x^GzUa=*^j zfqKhN1JoJPlYb{3Bpb1XITZSq-H)43GjjU(E$Rl+fQFq5eDcmbU&o(pxIOs|8rzT_ zZ9i~OT$nwE4HDb#o_;>f=zrWIWoYw0BVXD!wQX__8t5H}0?0Fzr`!&YA1$<}(#|=^ zJ18#VOK?wfK#M$V+n66G*cIAKcn@oUD{0pdu7>;eS&>t6VVtF9$L1;h)8neA{_2`S z5Dy;J6SG^>n>=}cL%VP9sixcKZ+oQtVD^g+C8s#xD8i=X$Og)9gVPKQR`*vdtca0k z@vl}}F#eLbz`boOr8tGBXY6N>ruWGfo%t^oeS&T%+V#30$JMmy?`%E-s~u_ggkwkE zQ|V(z%o(&4>DN63*o|yy}m-)Y<)%ie_`2R-9cBj>~ zKkbxBDZE%LG`BHl3|HU3h*;o$AKa+8bs$@3_GS0g-5f7MUk}o{?4@wGM85l|7a!g- zUVU)#x^XeqfG69SA9wLe?xMl9v4F2>MO-$hvPL|u;mp&n6y3jQ;K!i#BY)XF_GOxq zvui6JEq;fP>#7Y=#FSHJd*n52ioak*rx7Q#^gZ8 zSK(!hCEH{5JElz{rH1DA&WPqL3)f$-Ni+k~SGTN_uYx5m$XMBCZ3!vzjXCqgF`G01 z2p+JCA=g8ME~w-SD}9vXbM0*@TXq+YiOV-XR^^bajjR%}A=c(BN*%N?fN20ACSunR zk82_+@H0`+*&UI-BkZD@$R66sdGfDe6e)0+B5Y$0-!{gqx zgF;3RO296CEN|A@j6qb*YfKNc&7`JwPdJ*525>Z+J%xu&a?j#!>KIb+wddU%+uYos zjAwq#R4%f@d8~sl1?rUIzLaY9*^)Ke3U%{(NY14Q%cS}+Eveu4FP<5L^W}8eF=5uc zzYbxVQPInwO|`OSI-Sb8{SSVea;z>;eGDW8Vyy=G=qP5NGhL#Iqgo4H|822`-3~-^TbqCSl`;H$|FVVb{k8K~&Y=k@ zvlv@y^~%~y{OPjEXG8K1e2n<%`S;g{qrVF#63Ch0%fe`h3XW=yvVN|55Q;f-+aji= zqJ>=%2UvU=9H$~0jpAmDVrDp{BAm5sXNz2Af2KM2l}hpYPn~I%e5_#ti|*n_%Oyl( zJfBb8;6JXkBCL0Vn!(Su139R)#?>D5JR2eTr5Z}kI7(wC#~a;2bmv01%O^@NXy)JG z{{l$_gi@bP$R9tfQ2!H1^8S}WQr^hG#@g7-#L51@C)8ysYN%i-A%Bth5e51!&G;p{S&2}u$>%`PE1E)~m{}*mEn2G*Yq|a zflLlwd!yTC_n6)?@p-qO+W!7{;`C*`wE~@mSR;%jbS3r=4Ak``JKhZsOnPbPu7J=I zELA-!s$$o-I8C!yZCkNEUrHly%B{_lbG#CbEoMM+Q8})6U_4#W*P19&kXQ|J)S4)) zk9XjYlqwyJ%er24aV=0_f@=047M=e<=O|F7Xagq0FE-qHa(7f%ovbZs4w9z@OVz2T zqF$z{(Uc4GC@_r_D%3kJ&XQL6Yb^bF3;eu)m7qD17N?Xk?bG59p)K;f4&H!Rl4dtB zFSFTHZUEC+p6m2#(*Awr@W|n4Q?_0vFCXP!x1%~?I;W+xOpQpr4hESlS)NmZk|;(N zZI)yy#Efk;N1b$ciX&D1;#bAgXs_r&SzWy@-j+2va(^j#&DK~@<1J3%lpQE#(5ZTZ zi0+M{Gq3BQnf!=rdex*cYgMQ`6t@g|I0!?F=UBSQF+sbLQWsmeZXNcUZ`{bv@ZA*p zGM^f$P6ywqQt+DWP`DU?Y;QhVd5WcFVaF0KNwb&YJusDnDM)v^dUNX$E(Afi5m&e9QE7sL#?u<$BW6v-Px<-G~ILeMqr-S zX!3L(Flsg?xuNMG|)z9kvUl_}=NwZPp7{|6MLl~Z9Q|Z?IWX7NyNU>pis8`Uc z$Tw!lgfCR#>nSmJ*A>3(Kk*<(pj6>&h<5yZjeb(fMTRL1d8s1DBHf4~yWG$hzwVej z;bbqDy}b)XCcyFRA^|=R|` zyw-{h(3ZIEocb;!de9-wDR7B{X7AGb{CP}6N?xD@8ifNmJb z)^&up$_v@=nq7Xd3f@8HGglmRzQ;3^{46^PIvgKH5w4^Z`-S*Du4IXrU5%#rvM`@Qe010uIa2gsnKN1=xu6jH9v#)+!` z4do`K2LdhX=81H`G^nn**PWxQVt~u{yLv7aNgM0x^9z z?zJ_qaa85XqpKycU8ng3vdnLFr0$(rnJ9PynO64_t;#58a;k`H&*CIyGT^~qZ1_m` zH4rZrSOiGs(7>B2R`WR5A8GJzFZ=X>#3I41JL3m3;63)(zM%8z{b873TSt$VR9FQr z>0Jvs5Nq<^M>t+xJ~Y4|UALZ1VydoUTz1$rYyU0fkKyp=MH%QnCh zPFC^jG}t_Sc5Z)wa}UE^vRj>yA2)2j=eu*%uMU9zvVSvrn%YP;G0tjraru6Ip6>pU zF(l*t@&W$|0qN_zbfY_$cn<=q_V=BAbLJ8nWWd$anBI<5wHgz<4@(plF?R*Fb4ukp?U_ zS9DVP>uV_4=ro^0tuAwt8(<3Z z5vb8tu}%qExapXnALiWXw1yy77A;k-%U3^~7%}n?O)ZnRGbxcsa??_<8msBk#`JsAREqL?CBR#%Ml=Q7b~lY^h> z-ekI>qGjx(pQjiZOUtV=t+PrSjH^Iz;<`E+^u*cQEz)lEhh^EEYD>VeX&ZJ#Y$Rrv zBR*fa@+PnU8)Pwd=GgcQ-25fk>{v)PpL5t^w$irC##Deb+0U}n5Vt|+do;n;q@6(e zn3t3f*6XC2W{x@T-djsnv}hk%`B$voAeejHqI7}o>93HJjG&6y`iRG!vHRhdnN=!F2B6$z+pq1`0BPVa};+3Vq-ywVYDG<$)e z@qj+SZy`ZJK_QqhbW}TWP_3CR#drlKk{r^;&zaa;LvxvXqG@2K8;fLO-xLo?#j7Sc zU5CKV(`cLp8JFsLs)<<9m2G~|wzk(U$8QD+&!ypio@34u%q>wV9oHLmhxhy?k)3j9 z|7$o_zg^$_gl4mt#b;1rtd-H>_6h@-`gZVQ%$44d>jzbaQJQ>CgsyX6c80cNx!dFe zLB_PSTdoGu;jsvtiOTO?ZRbG-8%hbLmtnezN7}2_ukS%wd45)7qK6t+C@aJd(_~xF zdc-Mx>Av_8aaTxoND+G4UHB?d*PqacS-nb-!?sd=_pSl`TZXqufyuW`fnKtzT5&hn z3qRsU>Sz4Xhn-N%`3B^4?E-?320*RBfIZ^y@g4L*MyMRn0fSPgh4@8!V31>mwL^Q( z@YT8K141*)y=biW56~rmB4=Q5U74tfNq86CYqc$Umq*$LHIh=K2aD?1_*DJP%Z`D=r&qVDd5W4U@g5-AkWgvUR}9u7L2Mr>5S3xCgDVNNfAH81*4@6@4r`gLfma3Wff5uB(` z%T2hU<#z8K65N6O9K$Ob^~K%!am{x2ApKl`izP|z{V9$! zh&@TFq9Q**SsLZ;GfO=>tkOeyYBJ~ffW6tb&^JTEBLyci_L3Lrv2`E7z=KB;W zN70d3k?GhYe+7wAdCMw3(Rq~@BkvhJ(|RFPeE~VvHyH$&rIw@>T=PnQsfeV-v*e^= zJr9LgtP#L%^2O8ozW)04FRRV30`Djd_T$GC^nbG2fBy?s+tNtS-aya6=pUs0-?yBU zEnJaRFuX}uHCW=Ia|;0EBtcE1!H#kO<%+*8r>c*ux zN_7i*WLXUqTHi{RboB;T>gj#j&r{lL5uY~|pR@h<$qDThY4wL`kE!=bmnpYt7xs3a zk7+C$kd^Rr1V_OcjNUYeHh?NtFEv6%gsuT-C&ET)POFdZQf~kh$S1iA8(C9PZlwQ= ztT9jeJc?jQokN@4gmFWL|IUn@7Om}S?CuNtF!OkPXJbMG9g<%9C)I#mUNftO# z{QmxE7zSA8qa#(KG=-^)Wa%bT0b;%xm{qi%4Fh{(N(P6lT}n!Y_1qc8Q;f6>nd*K` z>FGh&!Gone3G)5$Nvb@(1=YogQceM~r8G5qk&r;OamK|W^?1X@)?S|S z1v6u6+#;uqdNgGK{6Z1cJw$aL3RD}tNB|lHbA5?PwDet3ksc)kC)4;ktI3_C#bnBB zhw(p19!#S%iq4`BW-)20SVobApb=XEk zp;1{1EEDjUWH}nqbji;>E19F&O=XHpI-FCauB|NaNL>q5V>_*DNS!?>gHj(MnfR10 z>d%ld8x#V=VW@Z1XpTN*l)lT49^}e13BN+ESNm)^?`Vo1jrt>n+OVLcEU|>@L@WXD z667oztT*21lxr4nNUMe4R!JbbqL`dM?-1yr9Li|z@jOJb&H}ue_vF2{QU1R7zb9wQm zF@Kt6_u7gkr6jJ|&-|1;W}-%$7BwI#OOUs|YgLUQr;s;JyI&0Xn)kJ54>IJV zw=?#S)Puk&tACE?C*<0RJ#6wkC3v3f^K@}g#DK6~ zYE2fSM)an4P5wRexhop5D#z(|*OQ+`?H28rJm{iz#Cx*yN$!D}C|il*K@sz#_u~d> zuPFf#%tR@p;Q5y6r}xzKIQw~k^7yl$Xv8Ye2X=(FgEc{Uit2{+bb@3fqy**eDS*I1 zMD{7(@*yjFqQjN0fJ+SG)F=&rZPCID$PJPt2oBYvPVBbyK>Edlz(IQ|?>NYDg(}El z_Z@>}A+jL_1=|SOq3a;9;RyYX5kCC@^P`3G6x%`YqlM-oxl!^P2FrqXmETeGtA_N{ z+F|#zf#9OOnIv;$ci9Rm2F*fsB?t%O>PM~WWVu}YYSoAvq>)K+xXU4W;nXs;?k|`4qZ1q zeLDnIGCy;$5tR|yn|E+x5ALI^ZGCT^tq=G)L709ZS{QTg-;miF{`!mZMTkRrXnHtZ zgze*jW6eNg>_r=6n`VEJFO4SA&Z#C+$609nMaj|@Y@A7(D}qPO2_>YZ-=*yzFBJBH z0&C>SsyOs)pn1PGVpY8lF0n#EnM5ah8$A=1y=~j+0$Rn-S;OW@cXY1rK3foy>rXgNJ@g|b8T!9?Ca@s( zX0-SS8N$5L40Kkmh|PrKjGQOzQP1=u-Gw5)+f3@Kb=p;5XA8e{70wQuXDDXLbOwIU zQQ~T~LM(@>bj!+oy`kvsuB65mxw$uzN)Qbjx_W z0ln&D^vsfG#Gjr$c0+x~kko~Iw~MZx2YWh|fSDhcmTlX#aLtWf)siMdUW(n-avo^6 zBx4!LtH{K2sz^p(8h7#tD)R_RNfR=m^Z-|f;21OLqhDo&^fM^K3i(c^>UEidpXUe?;|ayS zNp7UuE9l}Gt!@Ed5R$M&P#K|a9;t3pWkfyzzHnYdH2x#UBLeRx@S#O!pi-KavQfLs zQ-IcGG`_&{Z;Fk5u{|dXS^Bx*lcLd+>*p%bH>Rg_n>>4Isq-94c6_kw97`6{M0`{C zxR?#QMfI+WG&)Kb-o0g0(ti{9n$EP27=r)!G4~(!BYgjVc=Z2wuQ^c#(p6Cfl(6L6SoNCrELQfS|R+ z@J4^)_%Znk{7TgvOB9PrCvtu*jpwpOhbxbIx{jZ3hwopl#~lvWuh%|Po!5sw>zrA? z>7?vi=!Sx7X*7@e*wD(f(69RrX*$NiVxW;UQ%?Gb&`8?p27{hkY#X5&HD5{s_tMr- z{Wd|8MQaut(0L_Rjw`Nb6I5$-_~pE0{quQNu%b)!YXB8hhAyGTOTz>Gs-j|K`Ze;i z`VFF9T&c0L^3|nnWtFl5AClKG76(+7GDCINDxXkF^Zj;d2Pr7gK}dfPNmzuLlprgg zK;IX4?3oX82f21rNN4euxHG(hLz2v_tuophO6zMkd1d^msC+~;G;+NB0>d@yTML=- zb0u5WI2q^*iwvaq{f8kp@D0>Th}eNFtut9afv{|97*uz6D)eev zaT#^i&0xy3jUu{a`vgLTDZiC)%^G*aR6W$R-HjoiKPJx9Ilao%IDSwr6LD>F-!cXx z{_?0a3wim?bIg~&^GHIr*C`uO;w3F^SCp)Vq68M*sI)0^Ow=>za6d4Q7Ou3jjW*W0 zKlL~!BEnL90PWxjS{~BV+ef(wDcl?PS&Ac*!AJAvMdzQ8>0AUg}gY-NaZrD9eH3;i7bAQbDfl zxQSE5krG&7UNGU@m9_rL(iKF`h9L7?JKxcpsd_N*C{5+8--?7lnkOC0cs1aQ#5zB? zlD2)rNUXW#-sPO@ySnrfZ5e{8yQt^m10ZKABxPlBRZ6@}Y__~wA+nfpe%O3u3he{U zoAUQu^-fgBq@ko(R#G{#En@3W_vSVqlUzre>|5WbWTdf{CoCmFu{xw%^mq$8xo4Zu z3z%c&Wm2wgTO@8Ue!$qwxGmvTTy4TGNicjrqT*-^Nb-njFB!%%eFH-Sy(5Do{YKAB z)GPz0T}&j2r_vC1@Q;4YVCUdh7-)1<2G68j165jsKmC<3c)iPpnh_pGp6CG#aVz-y zzh2s4cm){yxq@MX;r4hiC~M?~-fO~Aw{-kz_po5#=(t91;QRYwV(7TWYEpOUS*?ek zH(s#2PKR(-`f4I}hpj6H@2x#?Wf(lSqiA>9tlT$6U$gMV3Xj4mu;)I{j9_Q!0zAZ8V|<6Q z{0?`dR8O&*KfMYkZOj>S`9%Uh&3TH|0VT8{%S5sFh0q;twr#rBS%kynW5e(%F}aPq zix)vTnnVPVoo=ZUO&zb5ZIB$Rm2AK{>g^Iu4dkXC#^rljz)t_N_$w8yCFpDwttHvS zI_$i|pdLR3w);I&FMRN$>JD}vPkS9+`$k-VZI>Fij}I5;a26rB-xAk^ZOAU9>DFDI zJ~!DJQodg}JTVr^s6ZB_lr0z;N2W|l5bv@y+ckt3OK413*z>o`e03lkLOQ^hkUE$7 z;$XcQ=^PbqKf7`Z`D;OW<1cTw2ddFlDS1amUj+F_ZnS2%)NW-P@|PAnL(sSDdGPIT zcAv(djSb1mzv+Rb*8?~WGoxd5$l8GS=ZE+{865HtPps7L6<^3!Ih12TH}c+WtRdbY zmEZJHCNOy{I9k$r4=*~x4>0S}6Cl|j@PJW+u1eXvd&(o_#(9W~BVqx8)!0h5)47%rTJI!?I1=XtgYfXP(acf9uw>?a}*`RTQI2NP)<7dPXm0>JT`OMsP zS-~|i34EY@Y|`8Cj1=>;E&b=4Fq-y;88Ibur+!=!M#JTSz{#obNP68uJbvXjWDlQk zZ1BJP@LxjZaX>1Zj2%=pb|>%X z!YkY$@>!3hV9>!~!sCn@E}j^+!Hn^V_vY$z{TOe!WVo0&e$inuz)m%hysthjh^{{z zWf34{<}4wTrjSE%&cSS_hx8B)H7SwwphudXl{opqJbC|s$u4+ZYv5QRt&1VOXWSuZ zbCYbWQk~2Ph?LP z6RKz|b`Y=X0}JG6d%O#aBmfvd!_U6R7xKQb)!^IfTi^mAlLUFJD@S@g0ZxL3=05?S zMSx{B3VS*o;AxVevO1+bQ}&1@U{2O|gt-VHl@yLWsZy{SH&R@Q!X7765D+>+`}crF z0Z1bu6n#Kx-$@MAs0hQJBF%#bW`PJMr3$K3|EpOy5jR3{K8HO`nui1w{0aDDYzC54 z$eyK>ra=`}(L`cTl|5o5c<=-wxMhQwY9V%@$^&#l6%2oQU(N6g5Gz<~*``HNu@QSZ z^ZKkPZ;snen(MR`PnRXwjIo>h#m-dD$W%UAULVT4LCugUZW33QDy?R?#-G|GUu2bV zItp!Q-ZbIJky%QXe%c^Zw3%Q=YqTbk`lN$D&owS-GM5@&pE{*#$RU|3En9>}K0kVI z5_gfOZX+R-$4vB=q!#j>ckuo1H_Efdbd*B=`0?}~w=Mq*iC_OK7fRav&-^3}Pi!NU zZyD?MRmm#q+C)^=2K_p-w#G_Ds6di&R0S5ac%~V1GtzXiy34C64n_$LutR`4B?tgj zUYs%y0I`CRYp`{(bj*%MGuG z#q&fY0pI*WEz=tdV}6ZR|&*q_E6%tg)wd3?A0x3MAp=z`~Hi zhGkrW*=edOVAAj<9MUo@z0LUi*OBJZq$v-!Hq^xFQ;zYe3yCC{1({%6o3S*eFhg8( zVmBgria9OhAT-4@kyQR^i5R66vVpKBk~tMdAwsjK)!?;KTYix4eOvw@V#JlH@tvV? z-tKdX@pS#xT_UZQ#jXR2npmQNRNyVYP3UQ9pf{II0lgmNVZ|uYV~KM&sx8V8)Al(2rlGb*h*Og`$}9GzLCpq9rUw zv(f^&%~*HL#aVK7yR?t*B>frC78p@MaO)K@C`)tBu5{_5Q-U%BkCHr_SX?$JjCX3& z1{(FzlPC4cZ0e>FT6jLwwjE}pwwi6kQ(urG0D4l+cHY(^PobB>9TFQO7GD%+i3~?~ zPERW|)@1drtxVLexf(hr%Jc)d%2cBx5M{M=R)rB#f%K#-(*|)Zs%@(KzyqRo ztuF8Kl@k39RoB(*xi~fMYFYC!4i6qaaPRdI)+{)khh0>>tGitZ9+=mf>5z7>&{w*N zQRMQAc@2~e`1h8#`#$O|v?^`2GiR0A$_b9@Ca33tF&&iVCDbNm#;&UO{C0+KPVT3W zgPaIwE;nRj*r?y-o8-iK&uRIm7;l2jVs;|T&x=?Ikxi~fdxRRVdIRU2+*LZn^xO&* zS3SZgzd)Mxqz5lSK0!P{m+*4{fg~t;ezXu5{$+b4*b2AoL`sg(mIx~pHBvkGAnRb( zsBA_9Fb_dAI#1_RueoVz4ae9f&U48hGE}5U?y5T}(KzlG~gfR&Hfb|`lE}=yOT~Ml~?o;utu@C zpB{tGhz&Z4@D;sYk;I7(GMGB$mjhck--aP(o>Zt{nYjH7v@};|CB5G-6%fzJn41V3 zxiZ%68%eX%%ED_Ku?zklPLm}ZJXVQv^sldj%XoBl+1#)CoNB{8Z=rbUSuHR2)JoM9 zXsws5D(q;IR3`H&ldRe=1!xI>5V|-X!`6^D1Rly>5_8eovJ`0cvHPKc(m-VBIKouG z+xW(~!bNRH2xI?+=Cu5SWr@=@77M#O&82j2+#0_#hR4%ZfsibY_ITF%e8KSWOTv{E zb!>Oe)`~ZoRb>WoEv}!|{zVM7`}A$SjPu;b) zKe=B5W(Sar?Y$P;KTdFV@W$E|r9-2eZc3F?Y@2>ed;8M)ak=R<&StOcg+trf7?`a? z6SNwmyoddfBEr~jDiqf$U7Liu9WnXroMChSbIT)Ek7wY^8y$noU%?gGlT+{g}W644^W2a>m)D&%@(7o{Pz$Wy)< z`OA3;-Zi7q8^p>r-0Fep{1xVS8bdn#m`wr|evtj5-wien8s{I$2_FQFfJPDakltRn00>S~V)wqBvPuJ;I!M3dxRf#N?PC zplvBFX#%ibueMeBHuD&{&Dnl#=-mvJ>CKQ6YP2Ho7$JR#LtKi}vXFThX|kfWT07!- zMtzju*gm_@X3Eu>x2%h}xXf>|ZA#5- zewDYZD^~~(R0_7McJ-Z(ALhX<$SbL{b>wb{poQd8sH-`xMJ&EX1o-rz6cZqS+0EX1 zFn!_u3mEG0P*Yvzx#Jr0P-v6Ml$?OcG(NWQv&>-n8Mp4$+ zIMu-v*UG9=O!lcxt)r~ZuFNLGu{f86xofK%+l#rEh;!PcNVIWRx!ODJr~9Z9NNLKkNb_pLWzfPy7o;#gI@lKu13 zK`fL6dG%!RQE=h*Fh!8Ds;ti6L^gG?arNM6QqeUS@s$0LzH%|g7KO<9#BQ}thWqcF z@G7P=$X!!n%OS*Os=FO%vpyS@$&7=}E(P1CG#zd4)E1ZB(AFD+lS(3r@ymrmB7Ml} z26k9|(JF9EDc&WKp(WBSOA!f4P`8+iLPU{!kEn166{(H|`LwpBX{qoxIEuJ{9Y0CC9!;G!p7LNdoJf zg_#{8%t394{19l`Fu%E8=F*j9BA1HPHsM2WG#}YgoLy5bcQ6K%e6&GR-3`|9q-;!P zOu>g25rtgHVS2PtD$aQQH30~Umv#dmx6JJPWjuvbLT8fD!JdC0gt$pgdlw#nW@OPe zfT?_nA5QfKP;XO6r;0(e*eXhLB+Z9h11=Z-GALuoiAnug0k<>t!yV-0kFLTGub&$@ zJx4#@e&z5eZvu5*%E744S`;gRz2-gvl;kk#S~|K;U%9~3jJM$EjR^6wa)z?hjN?U} zibK{Z6&bAR+u7!O|G|UpWSt@m`5IY*bjxteYS-jHm)9d{WHhwMUACJ@`6S(vng#Z6 zxT)1Q^xcyBm~TXmx~YNE!GBtG`m|uQVCaLRV4&$m`aEQb^_crBVJb_KZfLm3b~jx` z`|N`gVVdb0=r*Qmk_g6Z!TV`~gIrbpC+J4#CT4=+Bus}zh&s^Pi7Wa%JJmKkqs4p|4Ea`tD-! zrMw{akMpUzhVRP4lY5ec%6Srtj`IxO5cL;h@Ql-q-Z1qu!esv|hyx9yW5_mgqZE9M z0n6wawF}Yz&lwX};BF!QQ0ijfFL3lM12)V7uNMZVcuR?l#MTVfyD)|Mu(MwqCwULg z`m>NGYYESoaw2hS%u@7ukgH56h$icC|_q76aZciHH6xv!!NI2Xa+0678_TAswAY63~@iwGl zx>??!W{y6yj#;%0{(g&Nx^v`-ud^NGsSJWaIEHX2mD_%Y5*XIPTXW3fxfeUa(yr_w z8?5;kt;Y%`Z#?UaJ{hss&f?mX&n$mF`YtuCtRb^FA3*`kZ3>C~bv^Za<8kKsmnkCa zJ(PIU5!DDo;cTCM)oKboC}{DK6H*1&LrE44tp=wVDHM7^5#GpE$1sc7ocuZ4UykM= zzc6eG0wc3QWkvrt=`dOGJ1?{yg9_R|z=cWr@IP=eWBgteedTxTemf6$LXIk(Lat z#-*cXF|V2-z!&e^vTW^HcTj0cG-e(mG&EMrhU-k;DjmI2Glk>d?sZ`lsVXLIN}8h-8ey1yOJ=Z$R7Fj4BOb3A<7gH zgqNd8K*L9L4y$+|j+-I`D83?M+>kP4$`}$Llv4jSES4x3OdfIM0TOo!BKrVH@4}c6 zfJY#Lh%~@;uds{}(z>}2QH1ZtmWbw7!Ly7mrfqAEpJ!y&4sKq;4y8vtP5ZI+ zxXpu}u+yAyCpntskZ*b8WeV<7MTJ&HkG%j+3I&tMrP%Jimla$#GYV)dzd2P_KUk8_ON>$_gj=Zx?C-%*cHU*@9Tfd z<0cqT(wT$!@gofR|3bV)%0l1rf54NLE4I?VWHlGoEb~PLRy8b@VF_`TY1V%H5Qi3^#gdSvS@_HCE0YtL)9X_u+1#qZ8X7GLTXOkoRj%DxtY$R;}F;982vMZF5R ze8$K?|DmfaG4N+f2uIS5Y42O+heBk~clr6$imIGao3_|ViqHq6xi;W*0TZUV&XA~@ zdo(OP);mm5;9Fz`OW{21Ry;k!>(8MmB5)TTcsx8D9Ncu-n!Gh^F`^I@CeA8g=V*cd z;S^hKKz!JXZXI$qdc-wu5{z9VTUG7B&WtU)fn|qgu9YC+xnr@nq72F%hCxxcf?waI zwde$Tk&sBSG4}bwzeF`t9~DX0ObVs`i|khF(qu-abIxinkL3rI6CDP*)Y^G?=p1cm1fj(+TQR{F)r)4sNlxx#*mL^ zSDaSPQO<54@#s&yhr0l4Q5%WjfYHoptjuVv?{R0JAP{tFmWhp3e+1)_*{)onOLLW_ zz^0;HOn!Vt8dtt1MW&*UHxY$nR|0PDpfI=2o*n@%QMqZ@QqP*YBq^D`?D|#9CDRve zCd|X4IAS>8FQV|)K`9Ypqo@{~?p1uB#+|%We7Ry<%Gu=QnsKT)Uss#(AQVn9uy-pL z;`Kc|ogkM%2!{0;A2WIGJaL{}F~3(EgW8fi_sS>H46O!>Sqb8#ZuZ{jK2T+TcIYhi zi#ESsNi-di(=eHHQG2d*(pkx7EpZFRfveOAdcvx<{GC2Fd-8@MME>D;2-e9b8U0j zYGy|}ZOl%-b={Jh1Wq)yeZeI&ut}JXhjj?KgT9H7b@<;1{ZTwq*d=~$BR4xF!>K^B=i_7_#bI&WJ^IH12{WmLv zbT1xGHvc=4lJl=iCne|DC(`nZAD4|v&PbQcO3s9p(G;A4iP!*7K(N2{r=dPM!?xxi zo3lciVHC+X;XP`8jI%=$uI!jCfeH*96b5H3~vq@;f71B#&ve1(OZ6_`)eW)|NB}EE=|VibJzOBVN=J*dulS}DAkJ^pL>pP&DL?6Ou2)0f zpY#%JiKaJK_O$e~`5JVP!`UAZU=R1R`H5g-G})IAlh1W>MfzHC& zKIGDARIcezjul}zt{7aN)1W+B`K$0C)nVV&p*UlwU1dIBWS_ouEpuQ=4cult?&J`( zehS?eBq`jZ92&*`RmXkQho_JNk z0f=p3kb5TAyHf*`b*c&OY;*uRcck`ZNh3Zf_uCwTJo^Z(^T{Knm;mtrTHxoGp!5>F zocc^biBqWMUFgQH#DO6-P^n80_63PuOTrK*tfE@r02&u~*(E5wjJSFtP{8-4<2nk? z1;Dw&a>~EYAxi{5?27|0l-d$JR1QqAQq8p-Rxj)hHx@}X4tbVk8p%e_7Dtmv#H2{1 zc~cCpm-kP+GAcZ9qWByf^@6+RWT5bTX6$&J{BP-D=oqM)QQ$v*1pUXb$$zEJ!2jm= z4bA>X)I@331<48di$pA)DYHoy6^-Jzkfj10M2k{o--zhs-Et=4Ck?)J~4XCLnm$R2Y~ zoB&J#4VX)M$AKEMU`qWKDZZ9=lZ}2HD8Qz`mqEx0e>n`;WO-zm}d{>ufnzxL&csmnc$$)`jryAHEaH*$3 z{$@rc5U%Az31$~K)Gcc36byd|r(+1j@)m3E-8RPx>QOKA0I5k5-oXZERjpg8RIlMB zGLgc!V)L6hXp`@C(f(k_4H>1J22GjsAN8I{mG%oCX|l|w)u+F?gCmS7%7Q5# zdh}Y9!_C%bh!Mc75`-ZgGWYpJ59*16C>g<+8KhJEZFaf4G9-avy_^D(Jc1dX!wgza=7 zMbN#Fy0#5xJb7nMJqCI5Aw`knxRe!{kwdEAXRz8${F%9_lGIUfaJE)w3#)-Nvcj)K zn$53o=O#3%=|UK@tX_@+CaV>bb(hzwyP{jE-teI*a42JX6i4RcN%gZinB-;QnpOIU zLTsHr>9C-1wDaJKPBx32wUV2N-0P~5$9lwkuBv14j|KIL?3hr_#KY(T&Gl<%WLA+{ zl5ozvlZd@3va9gDE3&uzmJp5fEN*NU3e~i)Zq&J)>e^mnrjV&k2exS%Y^h_X=Yn&S z)UqIyMai*ERlnM+8NA;M5fEV9JD5d+uBX`s}#Mb^$$6 zAe3O%h@y}%kQ*VF6u-f)&{QLEDB@fN2PrNTYjI=BPWlWelp!3UsrqS9RQBz{%A0kO z+reP`B(c+DV+mn{<4mmW9XWsVGkyM?-P%TBY+nY#T;yo zb)5953-Z(sdQCv_JUc}m%XG32z3by(mvrOH#O9;iUiI1|U9h~H`hiL^y=y4X9?=gH z61Q8=_L6yg3sxKNt!qNK;)`l(dJN+!7IpTnPl$V<(Cfs-N_0#yZn`eGIeNd+_KCeE zLptv2!L~6yoZg+s-C7r!JnmW*x!#lUkCnRKgH_l&(&c({ov z^mc?75%om2qVfWdXhb)#9DuzVCR7a&vBPqny|TLq^xGWC`GF)t=ZBPXH&zo}imNAQ zU0jWPW+)qr9=)p`Sx;x>8Wn|ZFafK+H4dTYDI5XOU08b91^S2mlo?@0^f5|jhGNn6 znkh+^3p12dTHvt^CCNPTcFhrAgls$lIkmcxNTtTYcd(Qq*0=wLCP^Pp<>N>4yBUdV zY$o>sas3J$UID(%vMV`R!wPQf1)L}gsRuiKBb%Mfd$>yUn%d-IeH!q_SPqCq!bW*G z`d8u31N*DVU9rBHOPkeLYLR{(6N#NEeT2zNdXmpj?C-%)upsOt$(@@3;MW$*BvGB= z(9w%vSMGEwdnnbRvV`td|DRB7F2;zF=Rcu=2W5XUTz(6-eZ02zVZju#pxaEK!}!$F z+R}L+72ZIX-)Z1XR#8k==|b?^XS0SnHXxEKMmRR`74V{;$_T$j0Kd9K3#z%cW7OQq z^ZVZ2D0%qDyZ_~eZY3nPv3~#fq4DScO7z~y(#Yz6EI=(>v5io?Nt-tp}YH#6xt*BhWJ!3M(hg+O6k$pMNr;x?1H=~9y4+=E2`0#KNir9M48);lb?bhO2znX1PW zOV2Q~n;;sP*x@iD!NP=uvpl$~EzmhbfpmHrJH=4 zOn(@08c3KaO$YQb7}=~-^w-$A%nT6?dRGec3LbNCn@OA)TgZ(DNFG;U2@Sxmq1NVI z&7t9pP0Jhk=2xb2OcfN|%_E^$JIbtBdr~k;nG9%qt0IYq4aaJh1|tpSC88dO6c9at z4+(=3!;)I{54aA1eKPaA>wV4e`kp}R%Eh_2D7$%tK3HNfXd%&)GfK~J%1_mr%5FfgyI9r@1}3FJ{LzTRv|!xdcYY&{gdF0=aK@d>o(M^v*F^Uk)x`E3 z-KZ>!{|we*81-&8j0>O{B&S7E6RQB%r9L zhmj5e+V$TOka|&N%00QN9yFU89-`^JxNyP`=8o5zn;9)_)B(uxg5mTDxwb9Sg`IDi z*NJK=j9@BmHpa;F1gs&5&g_9SQ?_Qg;$;qp*hNJZLgfTniI)6{b+jH+FQ#r zmy>qlIUcmKSsde4h!5eRfUe{kju)w_zM0WwPvMXS~I~Tc_tE_xdDHp$|FgXB&w}Xk#)zYXau#J zHHY-B3`cDDkF}${+u`93embKo-<7?)Jw7&6$4RvRyxsq?7155K;?Cs@>zTlVWm-x< zlK8?%UDjeOKi;&{ku^7(2vvm*SX`dUk@myGV1o4^JJh%;pRxQR2KxT6Zo1yR+lVab7ntUIxFh@)AM{+Tcgz zs7QE59=LlXcn0u!ChA-RTNwflUH$pEMvmTyB(BNVcqT150`0iQpI))Y@93WP+=B1P zT<}bEO8~8-y4Gp9bBglg$#r&6Y8q+p!?ejc%1L~b z|75#1d!ep(cqoq~`JF{0jo^;rDH%{sqZE2O@jN=&0O|_`wU4t{$KchD5Y_g@44V>0 z(z67c>U$Fr&5Tcz5noB4KgwZ%F?5fE^xp{Fq1e2d{0G}vg3hi;>~i7KILQQ&gH3d_o%s>M1+@wsFZ3;{`$JYP-BTK z^LC+U5-l26`$u};R7C%zBFj~}y0{}+;2r7SG<^o=b4XArRhHzd zD6w+qiw(sNYU1L;IJI!mB>VWY%i&0K>)O*~>LUGGy9FZW zmk){@X`Z%VKE!nm=sWf_P>`lL zlBY!|XUUo%I7EkHk}f?4>A_i!UQ}jb*sZmwST5mfTl}MxwaZ}nYem<`XSyfUw~fEH znRbgXXG!@Fj5|y8xU7uj^^C2I_6E{6!u`N(R_<=~GWEna zNOiro6N<13Aja2#HTvjndcl=ut5D~Vd3ae1e^{(=0`7;$0A)zFKN@JhV-+powWJptDl2dN%iH4aG(=(e3y!~az&0>{*gcvcQnPbhm9pI-@wHO(`szfLO)O75 zjXHM5T*Z}1uPH?`# zMvN+2SLlvW#E0J!g}EuIMBG%242oT`YBTSR#&X%qv3=w~t|7 zi|`I$JjU`yy9LX%i(xBs}qGcq5`ZSn^z5eLu(st+Z;qG%3#7 z(ycnFn?Q=^jmNttc<<$IBnlr2lg22%T4;mTl5dTvZEWL%(B39u$;S2>tdmQwE*73AfJ=*q}U zZ%wKmmH=tL6-+auBRvs%8Xct`UjH!0mC4Bv0c7(|O(5KUXrP=Ye_xdAU;cz$(HQ1o#bG ze=WT6%^Ye0*3EX~6*!oa2 zsMpWnGO8)y2a2C+c&X`yoc9s6hgwTCO=6DL_0Fzo+aPnt{x{V09S?Vt!)!1pOxVroH z=DO!_mz{1fSvLdtD2)tQGHFCmhUV1>8m+)VSts8+bh6y!`#5QB_<)c~hy9!rxr3&* zla{s#u?|$}z0fJZy=Na{4{~9byrO4bF*aW@*2HuVC!hQgJF4;6%n)Z-%k^hJ8=n+>$-N6#Pg2&;Vg|0QW+IfjP9m_ka4(000ZQ{3Wz}h8x6nlgT5e`T$C= zFwcqXkyL$vMc7Ciq9BPDAhSzw3K_}lo&a&@8?Wl#iw0cy<3Gq{lN_sff6TkJT|0i)K@Jx!39Ogkxm_Y$2@RF7&3@n8;@e}zCllhL6Bqg*jD?YV^ zT~WNNn?y6Dvi;YxkN>U#J^jVz!u1cSfc{5P`9Dm~{fAWa9o=mId-b?NWi3x^C6w=J zlGRL05;L)NWKl8=a;rMCHr2Af;u7&zalf0yr1Tpaq2fmk>o2D!7#KCM6xZ%PS1Cf{ z!b?Jn3QxfsrE-+={Dly1ksd}>ydIQrKivLd6_F4%ziirXkLgs0tJiIZX>OOTx9One z9~-{iVW!Bnf&=mhq3!Op0t8?)RC%&{BF@FDKb1#NMIgTc*Ce;zGSW>zTYt%nTGyp=}RF}OD|2$erU zlpl+o`iX=jmx}ev%rJ{k>Pd|_jmgBfBBjtt(wqL2x*Rh$l%`m&8yi#El-B}FGdS=q z%q3YbQW6ysCj^6CsAVbo?P-e7h!$MU5)#CeRykAZ8H26mXi%bfmdJyPM&Dd1@*TER z<(<--s#3}<%e9O-t|5zra|R&tbgk)~itjp|_rjYl&Gjh(CX=?%zI^<-(PZ3xR4#vBC4 zh8&lHQly5&hMUrk$Be7DS)bu)4i3wRrb?2lkAB%!t81K9(yC!u{M42o+s?sAQd1M)dl+OpV`5yjMMS|p;>IH`@Q9}-(6s+1}z7b?3Y22)oP31y9}cI4kn zmS2v-XkEri5eco^p2v0F8#_gvTr&;;0 z-*y8B+v>gB+1?CVYip+U?=ad{o?ARbf&pZGkLY*EL$k}@lP?5ot57P zYDj}vltI;+Ndu-%cJ;wJ*-fmSe|{{YEG?@T~Ppms2FzjJW; zEdK7iD$y=Uum(B@hPBbkz)aL2B2U;S;u52!?#hHMRzGSmH;jsbcwaI)33}5WE+p$d zB_hjSIbxS@wV3H}C!)3C3$g$RI8nnc{yT2j;ATtAu6HmvI=&oL{2s*BjD;3nA z7)D9P4>Bkm5e#qaAiry2V84P~ornLfSa3g#2zuAl&7a_6jIPlenEqz;uE`s!{(G2h zgBPBDICO2@7d>PW@Mg^v;}_We2)Py4Xlv_IBx;JyLMP88$HDj^Hr9V2bB`r6a~ULW za7+4G=WN+&QPS9GTwY9bAm;tAHkQI9LNhV*ou7$_5o3Q{aU?93n}S?xm>%&h)2Yi9 zRNzaE8S37>^N_a9#jP*}yvfD=kk!`8b(9O+zS0ZmD)dWyenf0Xo@5n(U72J#wxdoG zHr`V!RkAzYlsq0Ru9`evfJjG!L}g$6-}*=(6F3f@u9qincNp}sUHCujA{M;ry6Dz1 zK!;S#6Jx-|Ic2+NWYXyZxgUzSC1f#PGKgMTsS7zo9w)9zV%lw1(Mz-h2zVZmw?Gc8T-QeB>*F-`0q-e6A+j~=U}t84deFfG*%Gc6%k z>6o}Ddh8*jsipmYu9Xbqnqy&qnSU%wAgKfW)fv!6ltJdPjA$^#{ zV2W?q3G2?fohTcPB(>JxCO0Zdw*Sc`1@;Mpy01nxEH^gh(6E18D%bfp)dN9nVuqMK zT5nb$3;rlobSJF(El*QX9AL)|p}rF{UKn zE0bml%g7=q!Xk)Ve@iVwy}DVs59pWn!k)pQphpW0xKz_^aGe|>?QbxB6={T3t;pH ze3N89Q^KF#g>E2=8V-pFLVzK*Ql^a1;~|){F#9X|jljl?Q2Pl+zlKr$Ap(FSv0ste z|3Ofb^BXzl24wzo;XSMZmM9MtiG7ze4j;g(h#&V9Y6(ST-zRf$^cT<`U^6Mk3#0+e zY59$CTrX9?bug29H4C?J$Bv){giXAK!5{&FP=b57z(0P1#-D=D;P8;Qycx$G>x6TA z&bx=w?I=)}Nsh^l>%!ioK}-Pu;6eXrV*(Z7`a;qAL5oa+FFBad2H8+#3L$lfP$nTD ztZYF5@@W@bn4<gWmgp_#)Xlhr>TYK%@|C3lb@yC>^Y*5q2f3A00trM6ArY5Y zFI+w!n?K8LY2D7{AXAfGwF4%>$0G3Cx0}s`Y=+Zn_qpVg_Fn{3{2GFy@DITx{YQfN zKipT6xB8#_lBulWinWOF6=Nu7;b!IUP`#;0PO?&m!^f|&r`dz*EDN+cLuZ8~KULS} ztSi(qazR0)p-!Hol*JqyBqD&E2~J`PVgZu>EMA_eroA-KSs(6diurtVGJZZmtfiPq z_L-iT%6K)I%2@rJ_u10=ZOiyolB3lt4pxp_p?z(W48}@!B5#}T59z1t zGMy0d4wlxYuw}q|4)TfNXX|6kl0NT7Z=sH%F8EgO5NtL}v0~GLs;oVJ2s-cslCw^D zX;r8X2jooD-S)Zn;N|4xW~HDfT-}Z+5f?SItqgb@Mg&P+6}!gG!ow$@P8k)YvcbI` zHrwl{p5rA*sLV+JS&~K0p=Mx>FHElhqD4+35}sm=9dVjur0zVyUcgSz7*DQFFYYhp zLGsW)SRuq|8f{=y91)G1&ZRtaJ%!0g-|wjJ%r|XlQvW7tuue~1y}S-Zp`%KP>=+Oj zOO=_%USNVc1TDS9WJ#exB15aeV9ZmE!FXEHD`X_biao|@aGI76r|uvmgK%q4l%MF( z7C&*C#%z|>T5v4wq-VAI{#GVSZ(4pPtjSYet)vK}H0Pi-9HlpoXi7p)9McxGWX70p z2c*EOFx+!s zDwj&D*|+|0M+Vq3hinhtEd=m*hkG`~stp{i+L>GGRCPD!rdXz4eza1vm z>08qVO%3;_Pd2%m3+qi)HEU|s+0|`CciVfvde)AG=L5NSE%52~k9yaBgINVI>cW-b z^mApwLq2;Xjm+8#xyud@F`uVf+*9;W3X!3EarlD}YM!wW5GF-&Wr!}QJqX`V*ALNe z9sFpjU`JV{aLXRNj_#}%6b=eS;gti~L}zJ$uDdc-6QGx-#|>MaqR-Z23r>ZS9a6am zZL4^}Cnp3KUD6VyM=8LID{F@oU3Xn;Y

      `F8~9_$klhl99+%Fg&7n*jGkqz8mW&u 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 q_E$s12#KqQLu6pmog&@mpdv-||Uty6a`r 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

      h6s=C?4w&G}2m~js?&U223iZ;Sa$2po?LRqYx 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
      H!t&!(-BrGc;^$k$6{h)-w`ibexVwd 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

      v}|*S&kJUk$7MmWY6iIRJK}<)+PeF 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