Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vdt-plugin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
vdt-plugin
Commits
81b6ef67
Commit
81b6ef67
authored
Mar 13, 2014
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added trce tools, fixed outid inheritance
parent
71298ae9
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
343 additions
and
50 deletions
+343
-50
Parameter.java
src/com/elphel/vdt/core/tools/params/Parameter.java
+2
-1
DesignMenu.xml
tools/DesignMenu.xml
+60
-44
ise_bitgen.xml
tools/Xilinx_ISE/ise_bitgen.xml
+1
-1
ise_par.xml
tools/Xilinx_ISE/ise_par.xml
+0
-1
ise_trace_map.xml
tools/Xilinx_ISE/ise_trace_map.xml
+50
-0
ise_trace_par.xml
tools/Xilinx_ISE/ise_trace_par.xml
+50
-0
ise_trace_proto.xml
tools/Xilinx_ISE/ise_trace_proto.xml
+176
-0
vivado_launch.xml
tools/Xilinx_Vivado/vivado_launch.xml
+4
-3
No files found.
src/com/elphel/vdt/core/tools/params/Parameter.java
View file @
81b6ef67
...
@@ -558,7 +558,8 @@ public class Parameter implements Cloneable, Updateable {
...
@@ -558,7 +558,8 @@ public class Parameter implements Cloneable, Updateable {
if
(
id
==
null
)
if
(
id
==
null
)
throw
new
NullPointerException
(
"id == null"
);
throw
new
NullPointerException
(
"id == null"
);
if
(
outid
==
null
)
//outid is never null - it is set to id in that case just when parameter is constructed
if
((
outid
==
null
)
||
outid
.
equals
(
id
))
outid
=
param
.
outid
;
outid
=
param
.
outid
;
if
(
typeName
==
null
)
if
(
typeName
==
null
)
...
...
tools/DesignMenu.xml
View file @
81b6ef67
...
@@ -18,36 +18,27 @@
...
@@ -18,36 +18,27 @@
label=
"GTKWave (Waves viewer)"
label=
"GTKWave (Waves viewer)"
icon=
"gtkwave.ico"
icon=
"gtkwave.ico"
call=
"iverilog"
/>
call=
"iverilog"
/>
</menu>
<menu
name=
"Python tests"
label=
"Tests with remote Python console"
icon=
"python.png"
>
<menuitem
name=
"RemotePython"
label=
"Run remote Python session"
icon=
"python.png"
call=
"RemotePython"
/>
<menuitem
name=
"RemotePythonCommand"
label=
"Send a command to the remote Python session"
icon=
"my_tool.gif"
call=
"RemotePythonCommand"
/>
</menu>
</menu>
<menu
name=
"ISE"
<menu
name=
"ISE"
label=
"ISE Tools"
label=
"ISE Tools"
icon=
"xilinx.png"
>
icon=
"xilinx.png"
>
<menu
name=
"ISE_utils"
label=
"ISE utilities"
icon=
"setup.png"
>
<menuitem
name=
"ISECopyUnisims"
<menuitem
name=
"ISECopyUnisims"
label=
"Copy Xilinx ISE primitives library to the local project"
label=
"Copy Xilinx ISE primitives library to the local project"
icon=
"copy.png"
icon=
"copy.png"
call=
"ISEUnisims"
/>
call=
"ISEUnisims"
/>
<menuitem
name=
"ISE Server"
label=
"Start remote ISE session"
icon=
"door_in.png"
call=
"ISE"
/>
<menuitem
name=
"ISEPartgen"
<menuitem
name=
"ISEPartgen"
label=
"Run ISE partgen"
label=
"Run ISE partgen"
icon=
"bitstream.png"
icon=
"bitstream.png"
call=
"ISEPartgen"
/>
call=
"ISEPartgen"
/>
</menu>
<menuitem
name=
"ISE Server"
label=
"Start remote ISE session"
icon=
"door_in.png"
call=
"ISE"
/>
<menuitem
name=
"ISESynthesis"
<menuitem
name=
"ISESynthesis"
label=
"Synthesize design"
label=
"Synthesize design"
icon=
"Retort.png"
icon=
"Retort.png"
...
@@ -60,10 +51,18 @@
...
@@ -60,10 +51,18 @@
label=
"Map design"
label=
"Map design"
icon=
"map_icon.png"
icon=
"map_icon.png"
call=
"ISEMap"
/>
call=
"ISEMap"
/>
<menuitem
name=
"ISETraceMap"
label=
"Report post-map timing"
icon=
"clock.png"
call=
"ISETraceMap"
/>
<menuitem
name=
"ISEPAR"
<menuitem
name=
"ISEPAR"
label=
"Place & route design"
label=
"Place & route design"
icon=
"route66.png"
icon=
"route66.png"
call=
"ISEPAR"
/>
call=
"ISEPAR"
/>
<menuitem
name=
"ISETracePAR"
label=
"Report post-implementation timing"
icon=
"clock.png"
call=
"ISETracePAR"
/>
<menuitem
name=
"ISEBitgen"
<menuitem
name=
"ISEBitgen"
label=
"Generate bitstream file(s)n"
label=
"Generate bitstream file(s)n"
icon=
"bitstream.png"
icon=
"bitstream.png"
...
@@ -73,11 +72,19 @@
...
@@ -73,11 +72,19 @@
<menu
name=
"Vivado"
<menu
name=
"Vivado"
label=
"Vivado Tools"
label=
"Vivado Tools"
icon=
"xilinx.png"
>
icon=
"xilinx.png"
>
<menu
name=
"VivadoUtils"
label=
"Vivado utilities"
icon=
"setup.png"
>
<menuitem
name=
"CopyUnisims"
<menuitem
name=
"CopyUnisims"
label=
"Copy Xilinx Vivado primitives library to the local project"
label=
"Copy Xilinx Vivado primitives library to the local project"
icon=
"copy.png"
icon=
"copy.png"
call=
"VivadoUnisims"
/>
call=
"VivadoUnisims"
/>
<menuitem
name=
"Vivado Test"
label=
"Send a 'Hello World' command to the remote Vivado session"
icon=
"my_tool.gif"
call=
"VivadoTest"
/>
</menu>
<menuitem
name=
"Vivado Server"
<menuitem
name=
"Vivado Server"
label=
"Start remote Vivado session"
label=
"Start remote Vivado session"
icon=
"door_in.png"
icon=
"door_in.png"
...
@@ -146,27 +153,8 @@
...
@@ -146,27 +153,8 @@
icon=
"bitstream.png"
icon=
"bitstream.png"
call=
"VivadoBitstream"
/>
call=
"VivadoBitstream"
/>
<menuitem
name=
"Vivado Test"
label=
"Send a 'Hello World' command to the remote Vivado session"
icon=
"my_tool.gif"
call=
"VivadoTest"
/>
</menu>
</menu>
<menuitem
name=
"Test VDT"
label=
"Testing some VDT features"
icon=
"sample.gif"
call=
"VDTTest"
/>
<!--
<menuitem name="Test VDT-A"
label="Testing some VDT features"
icon="sample.gif"
tool-instance="VDTTest_inst2"
call="VDTTest"/>
-->
<menuitem
name=
"Test VDT1"
label=
"Testing some VDT features - variant 1"
icon=
"sample.gif"
call=
"VDTTest1"
/>
</menu>
</menu>
...
@@ -175,6 +163,19 @@
...
@@ -175,6 +163,19 @@
icon=
"sample.gif"
icon=
"sample.gif"
tip=
"This is an user menu"
tip=
"This is an user menu"
inherits=
"MainDesignMenu"
>
inherits=
"MainDesignMenu"
>
<menu
name=
"Python tests"
label=
"Tests with remote Python console"
icon=
"python.png"
>
<menuitem
name=
"RemotePython"
label=
"Run remote Python session"
icon=
"python.png"
call=
"RemotePython"
/>
<menuitem
name=
"RemotePythonCommand"
label=
"Send a command to the remote Python session"
icon=
"my_tool.gif"
call=
"RemotePythonCommand"
/>
</menu>
<menu
name=
"OtherStuff"
<menu
name=
"OtherStuff"
label=
"Various Sample Tools"
>
label=
"Various Sample Tools"
>
...
@@ -193,6 +194,21 @@
...
@@ -193,6 +194,21 @@
label=
"MyTool"
label=
"MyTool"
icon=
"my_tool.gif"
icon=
"my_tool.gif"
call=
"MyTool"
/>
call=
"MyTool"
/>
<menuitem
name=
"Test VDT"
label=
"Testing some VDT features"
icon=
"sample.gif"
call=
"VDTTest"
/>
<!--
<menuitem name="Test VDT-A"
label="Testing some VDT features"
icon="sample.gif"
tool-instance="VDTTest_inst2"
call="VDTTest"/>
-->
<menuitem
name=
"Test VDT1"
label=
"Testing some VDT features - variant 1"
icon=
"sample.gif"
call=
"VDTTest1"
/>
</menu>
</menu>
</menu>
</menu>
...
...
tools/Xilinx_ISE/ise_bitgen.xml
View file @
81b6ef67
...
@@ -141,7 +141,7 @@
...
@@ -141,7 +141,7 @@
<line
name=
"ise_copy_after_bitgen"
>
<line
name=
"ise_copy_after_bitgen"
>
"-c"
"-c"
"mkdir -p %ISELocalResultDir ;"
"mkdir -p %ISELocalResultDir ;"
"echo \" *** ignore missing files below ***\""
"echo \" *** ignore missing files below ***\"
;
"
"rsync -avr -e ssh"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.bgn"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.bgn"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.drc"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.drc"
...
...
tools/Xilinx_ISE/ise_par.xml
View file @
81b6ef67
...
@@ -46,7 +46,6 @@
...
@@ -46,7 +46,6 @@
<depends-list>
<depends-list>
<depends
state=
"ISESnapshotMap"
/>
<depends
state=
"ISESnapshotMap"
/>
<!-- <depends files="constraints"/>-->
</depends-list>
</depends-list>
<parameter
id=
"SkipSnapshotPAR"
label=
"Skip snapshot"
tooltip=
"Do not create snapshot after PAR"
<parameter
id=
"SkipSnapshotPAR"
label=
"Skip snapshot"
tooltip=
"Do not create snapshot after PAR"
...
...
tools/Xilinx_ISE/ise_trace_map.xml
0 → 100644
View file @
81b6ef67
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool
name=
"ISETraceMap"
label=
"Report post-map timing"
project=
"FPGA_project"
interface=
"ISETraceInterface"
package=
"FPGA_package"
shell=
"/bin/bash"
description=
"Report post-map timing"
log-dir=
"ISELogDir"
state-dir=
"ISELocalDir"
disable=
"DisableISETiming"
inherits=
"ISETrace"
>
<action-menu>
<action
label=
"Report post-map static timing"
resource=
""
icon=
"clock.png"
/>
</action-menu>
<depends-list>
<depends
state=
"ISESnapshotMap"
/>
</depends-list>
<parameter
id=
"DisableISETiming"
/>
<parameter
id=
"input_file"
/>
<parameter
id=
"physical_constraints_file"
/>
<parameter
id=
"extra_input_files"
/>
<!-- Trace options -->
<parameter
id=
"advanced_analysis"
/>
<parameter
id=
"error_report"
/>
<parameter
id=
"fastpath"
/>
<parameter
id=
"limit_per_endpoint"
/>
<parameter
id=
"nodatasheet"
/>
<parameter
id=
"noflight"
/>
<parameter
id=
"output_file"
default=
"%%ProjectName-map.twr"
/>
<parameter
id=
"stamp"
/>
<parameter
id=
"timegroups"
/>
<parameter
id=
"timing_specification_interaction"
/>
<parameter
id=
"uncovered_paths"
/>
<parameter
id=
"verbose"
/>
<parameter
id=
"output_xml"
default=
"%%ProjectName-map.twx"
/>
<!-- common parameters from the base tool -->
<parameter
id=
"intstyle"
/>
<parameter
id=
"command_files"
/>
<parameter
id=
"speed_grade"
/>
<!-- calculated parameters -->
<parameter
id=
"ISETraceActionIndex"
default=
"%%ChosenActionIndex"
type=
"String"
format=
"CopyValue"
visible=
"false"
/>
<parameter
id=
"rawStamp"
default=
"%stamp"
visible=
"false"
type=
"String"
format=
"CopyValue"
/>
</tool>
</vdt-project>
tools/Xilinx_ISE/ise_trace_par.xml
0 → 100644
View file @
81b6ef67
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<tool
name=
"ISETracePAR"
label=
"Report post-implementation timing"
project=
"FPGA_project"
interface=
"ISETraceInterface"
package=
"FPGA_package"
shell=
"/bin/bash"
description=
"Report post-implementation timing"
log-dir=
"ISELogDir"
state-dir=
"ISELocalDir"
disable=
"DisableISETiming"
inherits=
"ISETrace"
>
<action-menu>
<action
label=
"Report post-implementation static timing"
resource=
""
icon=
"clock.png"
/>
</action-menu>
<depends-list>
<depends
state=
"ISESnapshotPAR"
/>
</depends-list>
<parameter
id=
"DisableISETiming"
/>
<parameter
id=
"input_file"
/>
<parameter
id=
"physical_constraints_file"
/>
<parameter
id=
"extra_input_files"
/>
<!-- Trace options -->
<parameter
id=
"advanced_analysis"
/>
<parameter
id=
"error_report"
/>
<parameter
id=
"fastpath"
/>
<parameter
id=
"limit_per_endpoint"
/>
<parameter
id=
"nodatasheet"
/>
<parameter
id=
"noflight"
/>
<parameter
id=
"output_file"
default=
"%%ProjectName-par.twr"
/>
<parameter
id=
"stamp"
/>
<parameter
id=
"timegroups"
/>
<parameter
id=
"timing_specification_interaction"
/>
<parameter
id=
"uncovered_paths"
/>
<parameter
id=
"verbose"
/>
<parameter
id=
"output_xml"
default=
"%%ProjectName-par.twx"
/>
<!-- common parameters from the base tool -->
<parameter
id=
"intstyle"
/>
<parameter
id=
"command_files"
/>
<parameter
id=
"speed_grade"
/>
<!-- calculated parameters -->
<parameter
id=
"ISETraceActionIndex"
default=
"%%ChosenActionIndex"
type=
"String"
format=
"CopyValue"
visible=
"false"
/>
<parameter
id=
"rawStamp"
default=
"%stamp"
visible=
"false"
type=
"String"
format=
"CopyValue"
/>
</tool>
</vdt-project>
tools/Xilinx_ISE/ise_trace_proto.xml
0 → 100644
View file @
81b6ef67
<?xml version="1.0" encoding="UTF-8"?>
<vdt-project>
<interface
name=
"ISETraceInterface"
extends=
"ISEInterface"
>
</interface>
<tool
name=
"ISETrace"
label=
"run Trace"
project=
"FPGA_project"
interface=
"ISETraceInterface"
package=
"FPGA_package"
shell=
"/bin/bash"
description=
"Run Trace"
log-dir=
"ISELogDir"
state-dir=
"ISELocalDir"
disable=
"DisableISETiming"
abstract=
"true"
inherits=
"ISEToolPrototype"
priority=
"0.5"
>
<action-menu>
<action
label=
"Report static timing"
resource=
""
icon=
"clock.png"
/>
</action-menu>
<parameter
id=
"DisableISETiming"
label=
"Disable"
tooltip=
"Disable timing report"
default=
"false"
type=
"Boolean"
format=
"None"
/>
<parameter
id=
"input_file"
label=
"Design file name"
tooltip=
"Input design file name (*.ncd)"
default=
"%%ProjectName.ncd"
visible=
"true"
type=
"String"
format=
"CopyValue"
/>
<parameter
id=
"physical_constraints_file"
label=
"Physical constraints file"
tooltip=
"Physical constraints file (*.pcf)"
default=
"%%ProjectName.pcf"
visible=
"true"
omit=
""
type=
"String"
format=
"CopyValue"
/>
<parameter
id=
"extra_input_files"
label=
"extra files"
tooltip=
"Extra input files to copy to the top directory before running Trace"
default=
""
omit=
""
visible=
"true"
type=
"Filelist"
format=
"ParamListSyntax"
/>
<!-- Can output_file be the same as input_file? -->
<!-- Trace options -->
<parameter
id=
"advanced_analysis"
outid=
"a"
label=
"Advanced analysis"
tooltip=
"Used when no timing constraints are provided"
default=
"false"
omit=
"false"
type=
"Boolean"
format=
"DashName"
/>
<parameter
id=
"error_report"
outid=
"e"
label=
"Generate error report"
tooltip=
"Generate error report instead of timing report, limit number of items per constraint"
default=
"3"
omit=
"3"
type=
"Cardinal"
format=
"Dash"
/>
<parameter
id=
"fastpath"
label=
"Report fastest"
tooltip=
"Report fastest paths of the design"
default=
"false"
omit=
"false"
type=
"Boolean"
format=
"DashName"
/>
<parameter
id=
"limit_per_endpoint"
outid=
"n"
label=
"Limit per endpoint"
tooltip=
"Limit paths per endpoint"
default=
"3"
omit=
"3"
type=
"Cardinal"
format=
"Dash"
/>
<parameter
id=
"nodatasheet"
label=
"Skip datasheet"
tooltip=
"Skip datasheet section in the report"
default=
"false"
omit=
"false"
type=
"Boolean"
format=
"DashName"
/>
<parameter
id=
"noflight"
label=
"No package delay"
tooltip=
"Do not include package flight delay"
default=
"false"
omit=
"false"
type=
"Boolean"
format=
"DashName"
/>
<parameter
id=
"output_file"
outid=
"o"
label=
"Output file name"
tooltip=
"Output file name (*.twr) (use '-' to disable)"
default=
"%%ProjectName.twr"
visible=
"true"
omit=
"-"
type=
"String"
format=
"Dash"
/>
<parameter
id=
"stamp"
label=
"Stamp file"
tooltip=
"Generate STAMP timing model files"
default=
""
visible=
"true"
omit=
""
type=
"String"
format=
"Dash"
/>
<parameter
id=
"timegroups"
label=
"Generate a table of timegroups"
tooltip=
"Generate a table of timegroups, requires 'v' (verbose) or 'e' (generate error report) options"
default=
"false"
omit=
"false"
type=
"Boolean"
format=
"DashName"
/>
<parameter
id=
"timing_specification_interaction"
outid=
"tsi"
label=
"Timing specification interaction"
tooltip=
"Generate timing specification interaction (*.tsi) report"
default=
""
visible=
"true"
omit=
""
type=
"String"
format=
"Dash"
/>
<parameter
id=
"uncovered_paths"
outid=
"u"
label=
"Report uncovered paths"
tooltip=
"Report paths that are not covered by any delays"
default=
"0"
visible=
"true"
omit=
"0"
type=
"Cardinal"
format=
"Dash"
/>
<parameter
id=
"verbose"
outid=
"v"
label=
"Verbose report limit"
tooltip=
"Verbose report, limit number of items per constraint"
default=
"0"
visible=
"true"
omit=
"0"
type=
"Cardinal"
format=
"Dash"
/>
<parameter
id=
"output_xml"
outid=
"xml"
label=
"Output xml file"
tooltip=
"Output xml file name (*.twx), use '-' to disable"
default=
"%%ProjectName.twx"
visible=
"true"
omit=
"-"
type=
"String"
format=
"Dash"
/>
<!-- common parameters from the base tool -->
<parameter
id=
"intstyle"
/>
<!-- USED Trace -->
<parameter
id=
"command_files"
/>
<!-- USED Trace-->
<parameter
id=
"speed_grade"
/>
<!-- USED Trace-->
<!-- calculated parameters -->
<parameter
id=
"ISETraceActionIndex"
default=
"%%ChosenActionIndex"
type=
"String"
format=
"CopyValue"
visible=
"false"
/>
<parameter
id=
"rawStamp"
default=
"%stamp"
visible=
"false"
type=
"String"
format=
"CopyValue"
/>
<input>
<group
name=
"General options"
>
"DisableISETiming"
"input_file"
"physical_constraints_file"
"extra_input_files"
"output_file"
"output_xml"
"stamp"
</group>
<group
name =
"Trace Options"
>
<!-- Trace options -->
"advanced_analysis"
"error_report"
"fastpath"
"limit_per_endpoint"
"nodatasheet"
"noflight"
"timegroups"
"timing_specification_interaction"
"uncovered_paths"
"verbose"
"---"
"ISEProjectRoot"
"ISERemoteDir"
</group>
</input>
<output>
<if-not
extra_input_files=
""
>
<line
name=
"ise_copy_pre_timing"
>
"-c"
"rsync -avrR -e ssh"
"%extra_input_files"
"%RemoteUser@%RemoteHost:%ISEProjectRoot"
</line>
</if-not>
<line
name=
"ise_run_timimg"
dest=
"ISEConsole"
mark=
"``"
sep=
" "
prompt=
"@@FINISH@@"
success=
"@@FINISH@@"
failure=
"ERROR"
log=
""
stdout=
"parser_ISE"
>
"mkdir -p"
"~/%ISEProjectRoot/%ISERemoteDir"
"\n"
"cd ~/%ISEProjectRoot\n"
"%ISEBinAbsolutePath/trce"
<!-- bitgen command options -->
"%advanced_analysis"
"%error_report"
"%fastpath"
"%limit_per_endpoint"
"%nodatasheet"
"%noflight"
"%timegroups"
"%timing_specification_interaction"
"%uncovered_paths"
"%verbose"
"%output_file"
"%output_xml"
"%stamp"
<!-- input (*.ncd) file -->
"%input_file"
<!-- physical constraints (*.pcf) output file -->
"%physical_constraints_file"
"\n"
"echo \"@@FINISH@@\"\n"
</line>
<!-- TODO: copy results -->
<line
name=
"ise_copy_after_timing"
>
"-c"
"mkdir -p %ISELocalResultDir ;"
"echo \" *** ignore missing files below ***\";"
"rsync -avr -e ssh"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.twr"
"%RemoteUser@%RemoteHost:%ISEProjectRoot/*.twx"
<if-not
rawStamp=
""
>
"%RemoteUser@%RemoteHost:%ISEProjectRoot/%rawStamp"
</if-not>
"%ISELocalResultDir/"
</line>
</output>
</tool>
</vdt-project>
tools/Xilinx_Vivado/vivado_launch.xml
View file @
81b6ef67
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
<action
label=
"Generate public key"
resource=
""
icon=
"key.png"
/>
<action
label=
"Generate public key"
resource=
""
icon=
"key.png"
/>
<action
label=
"Setup connection to"
resource=
"%RemoteUser@%RemoteHost"
<action
label=
"Setup connection to"
resource=
"%RemoteUser@%RemoteHost"
check-extension=
"false"
check-existence=
"false"
icon=
"setup.png"
/>
check-extension=
"false"
check-existence=
"false"
icon=
"setup.png"
/>
<action
label=
"Launch shell on remote"
resource=
""
icon=
"shell.png"
/
>
<!-- <action label="Launch shell on remote" resource="" icon="shell.png" /> --
>
</action-menu>
</action-menu>
<parameter
id=
"command"
label=
"Shell command"
default=
"bash"
<parameter
id=
"command"
label=
"Shell command"
default=
"bash"
...
@@ -106,6 +106,7 @@
...
@@ -106,6 +106,7 @@
"ssh-copy-id %RemoteUser@%RemoteHost;"
"ssh-copy-id %RemoteUser@%RemoteHost;"
</line>
</line>
</if>
</if>
<!--
<if actionIndex="3">
<if actionIndex="3">
<line name="Vivado">
<line name="Vivado">
"%ShellSwitches"
"%ShellSwitches"
...
@@ -130,7 +131,7 @@
...
@@ -130,7 +131,7 @@
"exit 1; } ;"
"exit 1; } ;"
</line>
</line>
</if>
</if>
-->
</output>
</output>
</tool>
</tool>
</vdt-project>
</vdt-project>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment