Commit 23f3b1b4 authored by 9731301's avatar 9731301

use packages and add parserClass and SaverClass and RequestDataClass

parent 557c0d2d
<component name="ArtifactManager">
<artifact type="jar" name="Insomnia:jar">
<output-path>$PROJECT_DIR$/out/artifacts/Insomnia_jar</output-path>
<root id="archive" name="Insomnia.jar">
<element id="module-output" name="Insomnia" />
</root>
</artifact>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ArtifactsWorkspaceSettings">
<artifacts-to-build>
<artifact name="Insomnia:jar" />
</artifacts-to-build>
</component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f2dd20fb-7e97-49ef-9dfe-5631626d7912" name="Default Changelist" comment=""> <list default="true" id="f2dd20fb-7e97-49ef-9dfe-5631626d7912" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/LeftPanel$1.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/.idea/artifacts/Insomnia_jar.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/LeftPanel.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/META-INF/Insomnia.kotlin_module" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/Run.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel$1.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/GUI/InsomniaGUI.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel$TextFieldHandler.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/GUI/LeftPanel.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/GUI/RequestPanel.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/RespondPanel$1.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/GUI/RespondPanel.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/out/production/Insomnia/RespondPanel.class" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/GUI/VerticalFlowLayout.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/LeftPanel.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/parser/Parser.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/RequestPanel.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/parser/RequestData.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/RespondPanel.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/com/insomnia/parser/Saver.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/Insomnia.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/Insomnia.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/Insomnia.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$1.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$2.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$2.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$3.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$3.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$3.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$4.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$4.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$4.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$5.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$5.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$5.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$6.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$6.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$6.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$7.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$8.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$2.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$9.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$TextFieldHandler.class" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$1.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$1.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/LeftPanel$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$2.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp$2.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/LeftPanel.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI$exitApp.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/Insomnia/InsomniaGUI.class" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel$TextFieldHandler.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/Insomnia.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Insomnia.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/RequestPanel.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/InsomniaGUI.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/InsomniaGUI.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/out/production/Insomnia/RespondPanel$1.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/RespondPanel.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/Insomnia/VerticalFlowLayout.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/Insomnia.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/InsomniaGUI.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/LeftPanel.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/RequestPanel.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/RespondPanel.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/VerticalFlowLayout.java" beforeDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -54,6 +67,7 @@ ...@@ -54,6 +67,7 @@
<component name="FileTemplateManagerImpl"> <component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES"> <option name="RECENT_TEMPLATES">
<list> <list>
<option value="package.json" />
<option value="Class" /> <option value="Class" />
</list> </list>
</option> </option>
...@@ -76,8 +90,14 @@ ...@@ -76,8 +90,14 @@
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" /> <property name="aspect.path.notification.shown" value="true" />
<property name="findjar.last.used.dir" value="$PROJECT_DIR$" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="project.structure.last.edited" value="Artifacts" />
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.2" />
</component> </component>
<component name="RunManager"> <component name="RunManager" selected="Application.Insomnia">
<configuration name="Insomnia" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <configuration name="Insomnia" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="Insomnia" /> <option name="MAIN_CLASS_NAME" value="Insomnia" />
<module name="Insomnia" /> <module name="Insomnia" />
...@@ -85,9 +105,17 @@ ...@@ -85,9 +105,17 @@
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
<configuration name="Run" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="Run" />
<module name="Insomnia" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Application.Insomnia" /> <item itemvalue="Application.Insomnia" />
<item itemvalue="Application.Run" />
</list> </list>
</recent_temporary> </recent_temporary>
</component> </component>
...@@ -111,7 +139,13 @@ ...@@ -111,7 +139,13 @@
<workItem from="1589284114096" duration="17862000" /> <workItem from="1589284114096" duration="17862000" />
<workItem from="1589307905083" duration="2368000" /> <workItem from="1589307905083" duration="2368000" />
<workItem from="1590134960872" duration="204000" /> <workItem from="1590134960872" duration="204000" />
<workItem from="1590135200352" duration="13410000" /> <workItem from="1590135200352" duration="15628000" />
<workItem from="1590188361988" duration="4063000" />
<workItem from="1590235175970" duration="19073000" />
<workItem from="1590491155616" duration="8322000" />
<workItem from="1590502223611" duration="8513000" />
<workItem from="1590582948373" duration="9875000" />
<workItem from="1590600904796" duration="3653000" />
</task> </task>
<servers /> <servers />
</component> </component>
...@@ -122,46 +156,58 @@ ...@@ -122,46 +156,58 @@
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" /> <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
</component> </component>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state x="309" y="122" key="#com.intellij.ide.util.MemberChooser" timestamp="1590148652521"> <state x="472" y="159" key="#com.intellij.ide.util.MemberChooser" timestamp="1590591835027">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="309" y="122" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1590148652521" /> <state x="472" y="159" key="#com.intellij.ide.util.MemberChooser/0.0.1536.824@0.0.1536.824" timestamp="1590591835027" />
<state x="499" y="160" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1590137018534"> <state x="499" y="197" key="#com.intellij.ide.util.TreeClassChooserDialog" timestamp="1590496648787">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="499" y="160" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.0.1536.824@0.0.1536.824" timestamp="1590137018534" /> <state x="499" y="197" key="#com.intellij.ide.util.TreeClassChooserDialog/0.0.1536.824@0.0.1536.824" timestamp="1590496648787" />
<state x="499" y="160" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1590603376669">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="499" y="160" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.0.1536.824@0.0.1536.824" timestamp="1590603376669" />
<state x="369" y="145" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1" timestamp="1589304315504"> <state x="369" y="145" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1" timestamp="1589304315504">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="369" y="145" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1/0.0.1536.824@0.0.1536.824" timestamp="1589304315504" /> <state x="369" y="145" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1/0.0.1536.824@0.0.1536.824" timestamp="1589304315504" />
<state x="402" y="167" key="FileChooserDialogImpl" timestamp="1590135150404"> <state x="402" y="167" key="FileChooserDialogImpl" timestamp="1590494460700">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="402" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1590494460700" />
<state width="906" height="2" key="GridCell.Tab.0.bottom" timestamp="1590597048866">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="402" y="167" key="FileChooserDialogImpl/0.0.1536.824@0.0.1536.824" timestamp="1590135150404" /> <state width="906" height="2" key="GridCell.Tab.0.bottom/0.0.1536.824@0.0.1536.824" timestamp="1590597048866" />
<state width="1493" height="110" key="GridCell.Tab.0.bottom" timestamp="1590148907434"> <state width="906" height="2" key="GridCell.Tab.0.center" timestamp="1590597048866">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state width="1493" height="110" key="GridCell.Tab.0.bottom/0.0.1536.824@0.0.1536.824" timestamp="1590148907434" /> <state width="906" height="2" key="GridCell.Tab.0.center/0.0.1536.824@0.0.1536.824" timestamp="1590597048866" />
<state width="1493" height="110" key="GridCell.Tab.0.center" timestamp="1590148907434"> <state width="906" height="2" key="GridCell.Tab.0.left" timestamp="1590597048866">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state width="1493" height="110" key="GridCell.Tab.0.center/0.0.1536.824@0.0.1536.824" timestamp="1590148907434" /> <state width="906" height="2" key="GridCell.Tab.0.left/0.0.1536.824@0.0.1536.824" timestamp="1590597048866" />
<state width="1493" height="110" key="GridCell.Tab.0.left" timestamp="1590148907433"> <state width="906" height="2" key="GridCell.Tab.0.right" timestamp="1590597048866">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state width="1493" height="110" key="GridCell.Tab.0.left/0.0.1536.824@0.0.1536.824" timestamp="1590148907433" /> <state width="906" height="2" key="GridCell.Tab.0.right/0.0.1536.824@0.0.1536.824" timestamp="1590597048866" />
<state width="1493" height="110" key="GridCell.Tab.0.right" timestamp="1590148907434"> <state x="249" y="0" key="SettingsEditor" timestamp="1590496679192">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state width="1493" height="110" key="GridCell.Tab.0.right/0.0.1536.824@0.0.1536.824" timestamp="1590148907434" /> <state x="249" y="0" key="SettingsEditor/0.0.1536.824@0.0.1536.824" timestamp="1590496679192" />
<state x="425" y="237" key="com.intellij.ide.util.TipDialog" timestamp="1590134962655"> <state x="425" y="237" key="com.intellij.ide.util.TipDialog" timestamp="1590600909312">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="425" y="237" key="com.intellij.ide.util.TipDialog/0.0.1536.824@0.0.1536.824" timestamp="1590134962655" /> <state x="425" y="237" key="com.intellij.ide.util.TipDialog/0.0.1536.824@0.0.1536.824" timestamp="1590600909312" />
<state x="499" y="179" key="extract.method.dialog" timestamp="1590145349556"> <state x="499" y="179" key="extract.method.dialog" timestamp="1590145349556">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
<state x="499" y="179" key="extract.method.dialog/0.0.1536.824@0.0.1536.824" timestamp="1590145349556" /> <state x="499" y="179" key="extract.method.dialog/0.0.1536.824@0.0.1536.824" timestamp="1590145349556" />
<state x="209" y="33" key="new project wizard" timestamp="1590495277464">
<screen x="0" y="0" width="1536" height="824" />
</state>
<state x="209" y="33" key="new project wizard/0.0.1536.824@0.0.1536.824" timestamp="1590495277464" />
<state x="163" y="189" key="run.anything.popup" timestamp="1589217529286"> <state x="163" y="189" key="run.anything.popup" timestamp="1589217529286">
<screen x="0" y="0" width="1536" height="824" /> <screen x="0" y="0" width="1536" height="824" />
</state> </state>
......
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IR"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="LpuhIj42qybitCY4PblfdQ==">(function(){window.google={kEI:'wpLOXs3SI4CLjLsPw_6MgA8',kEXPI:'0,202123,3,4,32,1151585,5662,730,224,755,4349,207,3204,10,1051,175,364,1119,380,155,421,241,383,246,5,1354,505,48,129,41,314,114,541,2,1217,331,635,574,96,40,73,1123106,1197700,449,78,329040,1294,12383,4855,32691,15248,867,17444,1953,9287,9188,8384,1325,3534,1361,9290,3030,4738,1848,4720,1432,3033,1808,4020,978,7931,5297,2054,920,873,1217,2975,5391,315,724,7432,3874,3222,4516,2779,518,400,1832,445,10,2794,1593,423,856,2212,530,149,1103,840,124,393,1522,4258,108,204,1136,3,2063,606,1839,184,1777,143,377,1947,2229,93,329,1283,16,2927,2247,473,1340,28,719,1039,3227,773,2072,7,4774,1294,10741,641,2449,2459,1226,1743,3654,1274,108,1456,1951,908,2,941,542,430,122,1520,2132,265,2896,2523,2002,889,1337,1098,3,576,970,865,378,3540,706,149,189,3312,503,1,1987,26,130,1,2093,3942,1148,643,4,1336,192,17,924,354,1009,1236,271,85,789,395,2,8,42,1821,2092,331,656,185,580,337,52,214,689,382,131,1884,43,306,520,473,213,500,639,93,2091,157,587,170,82,426,795,11,767,100,3,136,468,148,977,353,661,275,262,1139,117,263,86,468,5,7,158,90,90,685,196,12,168,138,70,418,26,318,30,217,631,83,8,461,5,95,195,495,1,246,5810112,3408,1802486,6996022,549,333,444,1,2,80,1,900,896,1,8,1,2,2551,1,748,141,59,736,563,1,4265,1,1,1,1,137,1,1193,1401,3,937,5,21,6,11,13,10,8,2,11,7,5,38,3389800,20572126,2682732',kBL:'hWa-'};google.sn='webhp';google.kHL='en-IR';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var c;a&&(!a.getAttribute||!(c=a.getAttribute("eid")));)a=a.parentNode;return c||google.kEI};google.getLEI=function(a){for(var c=null;a&&(!a.getAttribute||!(c=a.getAttribute("leid")));)a=a.parentNode;return c};google.ml=function(){return null};google.time=function(){return Date.now()};google.log=function(a,c,b,d,g){if(b=google.logUrl(a,c,b,d,g)){a=new Image;var e=google.lc,f=google.li;e[f]=a;a.onerror=a.onload=a.onabort=function(){delete e[f]};google.vel&&google.vel.lu&&google.vel.lu(b);a.src=b;google.li=f+1}};google.logUrl=function(a,c,b,d,g){var e="",f=google.ls||"";b||-1!=c.search("&ei=")||(e="&ei="+google.getEI(d),-1==c.search("&lei=")&&(d=google.getLEI(d))&&(e+="&lei="+d));d="";!b&&google.cshid&&-1==c.search("&cshid=")&&"slh"!=a&&(d="&cshid="+google.cshid);b=b||"/"+(g||"gen_204")+"?atyp=i&ct="+a+"&cad="+c+e+f+"&zx="+google.time()+d;/^http:/i.test(b)&&"https:"==window.location.protocol&&(google.ml(Error("a"),!1,{src:b,glmm:1}),b="");return b};}).call(this);(function(){google.y={};google.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1};google.lm=[];google.plm=function(a){google.lm.push.apply(google.lm,a)};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a="1"==c||"q"==c&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!=document.documentElement;a=a.parentElement)if("A"==a.tagName){a="1"==a.getAttribute("data-nohref");break a}a=!1}a&&b.preventDefault()},!0);}).call(this);
var a=window.location,b=a.href.indexOf("#");if(0<=b){var c=a.href.substring(b+1);/(^|&)q=/.test(c)&&-1==c.indexOf("#")&&a.replace("/search?"+c.replace(/(^|&)fp=[^&]*/g,"")+"&cad=h")};</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}</style><script nonce="LpuhIj42qybitCY4PblfdQ=="></script></head><body bgcolor="#fff"><script nonce="LpuhIj42qybitCY4PblfdQ==">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"> <div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="https://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="https://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?gl=US&tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/en/about/products?tab=wh"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div> </div><center><br clear="all" id="lgpd"><div id="lga"><img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%">&nbsp;</td><td align="center" nowrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="en-IR" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Google Search" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google Search" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid1" value="I'm Feeling Lucky" name="btnI" type="submit"><script nonce="LpuhIj42qybitCY4PblfdQ==">(function(){var id='tsuid1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AINFCbYAAAAAXs6g0rqt6BnH2IOEaBjD6RVw-ikvO_fG" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=en-IR&amp;authuser=0">Advanced search</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="LpuhIj42qybitCY4PblfdQ==">(function(){var a,b="1";if(document&&document.getElementById)if("undefined"!=typeof XMLHttpRequest)b="2";else if("undefined"!=typeof ActiveXObject){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if("2"==a&&-1==location.search.indexOf("&gbv=2")){var f=google.gbvu,g=document.getElementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div id="gac_scont"></div><div style="font-size:83%;min-height:3.5em"><br></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="fll"><a href="/intl/en/ads/">AdvertisingPrograms</a><a href="/intl/en/about.html">About Google</a></div></div><p style="font-size:8pt;color:#767676">&copy; 2020 - <a href="/intl/en/policies/privacy/">Privacy</a> - <a href="/intl/en/policies/terms/">Terms</a></p></span></center><script nonce="LpuhIj42qybitCY4PblfdQ==">(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d="CSS1Compat"==c.compatMode?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log("","","/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI);}).call(this);})();(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.IehwcRHGDro.O/m\x3dsb_he,d/am\x3dAC8ENgc/d\x3d1/rs\x3dACT90oEgNhIKhGSgc3dWob1RlEQBKcg5vw';
setTimeout(function(){var b=document;var a="SCRIPT";"application/xhtml+xml"===b.contentType&&(a=a.toLowerCase());a=b.createElement(a);a.src=u;google.timers&&google.timers.load&&google.tick&&google.tick("load","xjsls");document.body.appendChild(a)},0);})();(function(){window.google.xjsu='/xjs/_/js/k\x3dxjs.hp.en.IehwcRHGDro.O/m\x3dsb_he,d/am\x3dAC8ENgc/d\x3d1/rs\x3dACT90oEgNhIKhGSgc3dWob1RlEQBKcg5vw';})();function _DumpException(e){throw e;}
function _F_installCss(c){}
(function(){google.jl={em:[],emw:false,lls:'default',pdt:0,snet:true,uwp:true};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x22agen\x22:true,\x22cgen\x22:true,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22dhqt\x22:true,\x22ds\x22:\x22\x22,\x22ffql\x22:\x22en\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22isbh\x22:28,\x22jsonp\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22Clear Search\x22,\x22dym\x22:\x22Did you mean:\x22,\x22lcky\x22:\x22I\\u0026#39;m Feeling Lucky\x22,\x22lml\x22:\x22Learn more\x22,\x22oskt\x22:\x22Input tools\x22,\x22psrc\x22:\x22This search was removed from your \\u003Ca href\x3d\\\x22/history\\\x22\\u003EWeb History\\u003C/a\\u003E\x22,\x22psrl\x22:\x22Remove\x22,\x22sbit\x22:\x22Search by image\x22,\x22srch\x22:\x22Google Search\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22refpd\x22:true,\x22rfs\x22:[],\x22sbpl\x22:16,\x22sbpr\x22:16,\x22scd\x22:10,\x22stok\x22:\x22mvOcBsnP9GoNa1JSiRDrGBq0HNg\x22,\x22uhde\x22:false}}';google.pmc=JSON.parse(pmc);})();</script> </body></html>
\ No newline at end of file
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IR"><head><meta content="Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for." name="description"><meta content="noodp" name="robots"><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"><meta content="/images/branding/googleg/1x/googleg_standard_color_128dp.png" itemprop="image"><title>Google</title><script nonce="XDpr2gh9TgxVoRf9WeV1SA==">(function(){window.google={kEI:'IBPNXrPQJo-cjLsP452puAE',kEXPI:'0,202123,3,4,32,1151584,5663,731,223,5104,207,3204,10,1051,175,364,926,573,239,337,241,383,246,5,960,55,21,318,196,358,128,41,315,113,543,1218,1498,3,38,100,36,1123179,1197762,387,78,329040,1294,12383,4855,32692,15247,867,28684,9188,8384,4858,1362,283,9007,3028,4740,11033,1808,4020,978,7931,5297,2054,920,873,1217,2975,6430,7432,3874,3222,4517,2777,520,399,2277,8,3683,706,1279,2212,530,149,1103,840,517,1522,4258,109,203,1136,3,2063,606,1839,184,1777,143,377,1947,2229,93,328,1284,16,2927,2246,474,1339,29,719,1039,3227,2845,7,437,4337,1294,10740,642,2450,2458,1226,1743,3653,1275,108,3409,906,2,1473,532,31,1519,2398,1026,1869,2523,2049,842,1337,1098,3,576,970,865,378,3540,707,148,189,1667,1645,503,1,1987,26,130,1,2093,5082,651,4,1337,191,17,685,240,352,994,16,1236,271,85,513,276,395,2,8,12,30,1819,1816,278,331,841,580,337,52,75,4,24,111,498,191,382,131,205,1679,43,77,757,466,212,500,639,93,2092,156,587,63,107,82,40,386,71,724,11,767,100,3,128,88,537,977,351,661,538,1256,263,86,638,90,90,688,192,11,307,387,102,27,1278,361,113,95,315,53,2,20,30,640,5809990,3406,1802487,6996022,549,333,444,1,2,80,1,900,896,1,8,1,2,2551,1,748,141,59,736,563,1,4265,1,1,1,1,137,1,1193,1401,3,330,601,6,5,26,1,34,7,1,2,11,2,5,3,3389840,20572126',kBL:'hWa-'};google.sn='webhp';google.kHL='en-IR';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var c;a&&(!a.getAttribute||!(c=a.getAttribute("eid")));)a=a.parentNode;return c||google.kEI};google.getLEI=function(a){for(var c=null;a&&(!a.getAttribute||!(c=a.getAttribute("leid")));)a=a.parentNode;return c};google.ml=function(){return null};google.time=function(){return Date.now()};google.log=function(a,c,b,d,g){if(b=google.logUrl(a,c,b,d,g)){a=new Image;var e=google.lc,f=google.li;e[f]=a;a.onerror=a.onload=a.onabort=function(){delete e[f]};google.vel&&google.vel.lu&&google.vel.lu(b);a.src=b;google.li=f+1}};google.logUrl=function(a,c,b,d,g){var e="",f=google.ls||"";b||-1!=c.search("&ei=")||(e="&ei="+google.getEI(d),-1==c.search("&lei=")&&(d=google.getLEI(d))&&(e+="&lei="+d));d="";!b&&google.cshid&&-1==c.search("&cshid=")&&"slh"!=a&&(d="&cshid="+google.cshid);b=b||"/"+(g||"gen_204")+"?atyp=i&ct="+a+"&cad="+c+e+f+"&zx="+google.time()+d;/^http:/i.test(b)&&"https:"==window.location.protocol&&(google.ml(Error("a"),!1,{src:b,glmm:1}),b="");return b};}).call(this);(function(){google.y={};google.x=function(a,b){if(a)var c=a.id;else{do c=Math.random();while(google.y[c])}google.y[c]=[a,b];return!1};google.lm=[];google.plm=function(a){google.lm.push.apply(google.lm,a)};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);google.f={};(function(){
document.documentElement.addEventListener("submit",function(b){var a;if(a=b.target){var c=a.getAttribute("data-submitfalse");a="1"==c||"q"==c&&!a.elements.q.value?!0:!1}else a=!1;a&&(b.preventDefault(),b.stopPropagation())},!0);document.documentElement.addEventListener("click",function(b){var a;a:{for(a=b.target;a&&a!=document.documentElement;a=a.parentElement)if("A"==a.tagName){a="1"==a.getAttribute("data-nohref");break a}a=!1}a&&b.preventDefault()},!0);}).call(this);
var a=window.location,b=a.href.indexOf("#");if(0<=b){var c=a.href.substring(b+1);/(^|&)q=/.test(c)&&-1==c.indexOf("#")&&a.replace("/search?"+c.replace(/(^|&)fp=[^&]*/g,"")+"&cad=h")};</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}
</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}body{background:#fff;color:#000}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}</style><script nonce="XDpr2gh9TgxVoRf9WeV1SA=="></script></head><body bgcolor="#fff"><script nonce="XDpr2gh9TgxVoRf9WeV1SA==">(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}
if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}
}
})();</script><div id="mngb"> <div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="https://www.google.com/imghp?hl=en&tab=wi">Images</a> <a class=gb1 href="https://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="https://www.youtube.com/?gl=US&tab=w1">YouTube</a> <a class=gb1 href="https://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/en/about/products?tab=wh"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=https://www.google.com/" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div> </div><center><br clear="all" id="lgpd"><div id="lga"><img alt="Google" height="92" src="/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png" style="padding:28px 0 14px" width="272" id="hplogo"><br><br></div><form action="/search" name="f"><table cellpadding="0" cellspacing="0"><tr valign="top"><td width="25%">&nbsp;</td><td align="center" nowrap=""><input name="ie" value="ISO-8859-1" type="hidden"><input value="en-IR" name="hl" type="hidden"><input name="source" type="hidden" value="hp"><input name="biw" type="hidden"><input name="bih" type="hidden"><div class="ds" style="height:32px;margin:4px 0"><input class="lst" style="margin:0;padding:5px 8px 0 6px;vertical-align:top;color:#000" autocomplete="off" value="" title="Google Search" maxlength="2048" name="q" size="57"></div><br style="line-height:0"><span class="ds"><span class="lsbb"><input class="lsb" value="Google Search" name="btnG" type="submit"></span></span><span class="ds"><span class="lsbb"><input class="lsb" id="tsuid1" value="I'm Feeling Lucky" name="btnI" type="submit"><script nonce="XDpr2gh9TgxVoRf9WeV1SA==">(function(){var id='tsuid1';document.getElementById(id).onclick = function(){if (this.form.q.value){this.checked = 1;if (this.form.iflsig)this.form.iflsig.disabled = false;}
else top.location='/doodles/';};})();</script><input value="AINFCbYAAAAAXs0hMB8DWaD0CQb9kGWYReEdRjyIIros" name="iflsig" type="hidden"></span></span></td><td class="fl sblc" align="left" nowrap="" width="25%"><a href="/advanced_search?hl=en-IR&amp;authuser=0">Advanced search</a></td></tr></table><input id="gbv" name="gbv" type="hidden" value="1"><script nonce="XDpr2gh9TgxVoRf9WeV1SA==">(function(){var a,b="1";if(document&&document.getElementById)if("undefined"!=typeof XMLHttpRequest)b="2";else if("undefined"!=typeof ActiveXObject){var c,d,e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(c=0;d=e[c++];)try{new ActiveXObject(d),b="2"}catch(h){}}a=b;if("2"==a&&-1==location.search.indexOf("&gbv=2")){var f=google.gbvu,g=document.getElementById("gbv");g&&(g.value=a);f&&window.setTimeout(function(){location.href=f},0)};}).call(this);</script></form><div id="gac_scont"></div><div style="font-size:83%;min-height:3.5em"><br></div><span id="footer"><div style="font-size:10pt"><div style="margin:19px auto;text-align:center" id="fll"><a href="/intl/en/ads/">AdvertisingPrograms</a><a href="/intl/en/about.html">About Google</a></div></div><p style="font-size:8pt;color:#767676">&copy; 2020 - <a href="/intl/en/policies/privacy/">Privacy</a> - <a href="/intl/en/policies/terms/">Terms</a></p></span></center><script nonce="XDpr2gh9TgxVoRf9WeV1SA==">(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b){var c=window.document,d="CSS1Compat"==c.compatMode?c.documentElement:c.body;a=d.clientWidth;b=d.clientHeight}a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log("","","/client_204?&atyp=i&biw="+a+"&bih="+b+"&ei="+google.kEI);}).call(this);})();(function(){var u='/xjs/_/js/k\x3dxjs.hp.en.IehwcRHGDro.O/m\x3dsb_he,d/am\x3dAC8ENgc/d\x3d1/rs\x3dACT90oEgNhIKhGSgc3dWob1RlEQBKcg5vw';
setTimeout(function(){var b=document;var a="SCRIPT";"application/xhtml+xml"===b.contentType&&(a=a.toLowerCase());a=b.createElement(a);a.src=u;google.timers&&google.timers.load&&google.tick&&google.tick("load","xjsls");document.body.appendChild(a)},0);})();(function(){window.google.xjsu='/xjs/_/js/k\x3dxjs.hp.en.IehwcRHGDro.O/m\x3dsb_he,d/am\x3dAC8ENgc/d\x3d1/rs\x3dACT90oEgNhIKhGSgc3dWob1RlEQBKcg5vw';})();function _DumpException(e){throw e;}
function _F_installCss(c){}
(function(){google.jl={em:[],emw:false,lls:'default',pdt:0,snet:true,uwp:true};})();(function(){var pmc='{\x22d\x22:{},\x22sb_he\x22:{\x22agen\x22:true,\x22cgen\x22:true,\x22client\x22:\x22heirloom-hp\x22,\x22dh\x22:true,\x22dhqt\x22:true,\x22ds\x22:\x22\x22,\x22ffql\x22:\x22en\x22,\x22fl\x22:true,\x22host\x22:\x22google.com\x22,\x22isbh\x22:28,\x22jsonp\x22:true,\x22msgs\x22:{\x22cibl\x22:\x22Clear Search\x22,\x22dym\x22:\x22Did you mean:\x22,\x22lcky\x22:\x22I\\u0026#39;m Feeling Lucky\x22,\x22lml\x22:\x22Learn more\x22,\x22oskt\x22:\x22Input tools\x22,\x22psrc\x22:\x22This search was removed from your \\u003Ca href\x3d\\\x22/history\\\x22\\u003EWeb History\\u003C/a\\u003E\x22,\x22psrl\x22:\x22Remove\x22,\x22sbit\x22:\x22Search by image\x22,\x22srch\x22:\x22Google Search\x22},\x22ovr\x22:{},\x22pq\x22:\x22\x22,\x22refpd\x22:true,\x22rfs\x22:[],\x22sbpl\x22:16,\x22sbpr\x22:16,\x22scd\x22:10,\x22stok\x22:\x22CyIOmCcTihboLcGKmGJQ2PCTg3k\x22,\x22uhde\x22:false}}';google.pmc=JSON.parse(pmc);})();</script> </body></html>
\ No newline at end of file
Manifest-Version: 1.0
Main-Class: Insomnia
import java.awt.*;
import java.io.IOException;
public class Insomnia {
public static void main(String [] args) throws IOException {
InsomniaGUI insomniaGUI = new InsomniaGUI();
Frame frame = new Frame();
}
}
Manifest-Version: 1.0
Main-Class: Insomnia
import java.io.*;
import java.net.*;
import java.util.HashMap;
public class Run {
public static void bufferOutFormData(HashMap<String, String> body, String boundary, BufferedOutputStream bufferedOutputStream) throws IOException {
for (String key : body.keySet()) {
bufferedOutputStream.write(("--" + boundary + "\r\n").getBytes());
if (key.contains("file")) {
bufferedOutputStream.write(("Content-Disposition: form-data; filename=\"" + (new File(body.get(key))).getName() + "\"\r\nContent-Type: Auto\r\n\r\n").getBytes());
try {
BufferedInputStream tempBufferedInputStream = new BufferedInputStream(new FileInputStream(new File(body.get(key))));
byte[] filesBytes = tempBufferedInputStream.readAllBytes();
bufferedOutputStream.write(filesBytes);
bufferedOutputStream.write("\r\n".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
} else {
bufferedOutputStream.write(("Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n").getBytes());
bufferedOutputStream.write((body.get(key) + "\r\n").getBytes());
}
}
bufferedOutputStream.write(("--" + boundary + "--\r\n").getBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
}
public static void uploadBinary() {
try {
URL url = new URL("http://apapi.haditabatabaei.ir/tests/post/binary");
File haditabatabaei = new File("haditabatabaei.txt");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/octet-stream");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(connection.getOutputStream());
BufferedInputStream fileInputStream = new BufferedInputStream(new FileInputStream(haditabatabaei));
bufferedOutputStream.write(fileInputStream.readAllBytes());
bufferedOutputStream.flush();
bufferedOutputStream.close();
BufferedInputStream bufferedInputStream = new BufferedInputStream(connection.getInputStream());
System.out.println(new String(bufferedInputStream.readAllBytes()));
System.out.println(connection.getResponseCode());
System.out.println(connection.getHeaderFields());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void formData() {
HashMap<String, String> fooBody = new HashMap<>();
fooBody.put("name", "hadi");
fooBody.put("lastName", "tabatabaei");
fooBody.put("file", "pic2.png");
fooBody.put("file2", "result.png");
try {
URL url = new URL("http://apapi.haditabatabaei.ir/tests/post/formdata");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String boundary = System.currentTimeMillis() + "";
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
BufferedOutputStream request = new BufferedOutputStream(connection.getOutputStream());
bufferOutFormData(fooBody, boundary, request);
BufferedInputStream bufferedInputStream = new BufferedInputStream(connection.getInputStream());
System.out.println(new String(bufferedInputStream.readAllBytes()));
System.out.println(connection.getResponseCode());
System.out.println(connection.getHeaderFields());
} catch (Exception e) {
}
}
public static void main(String[] args) {
uploadBinary();
formData();
}
}
\ No newline at end of file
package com.insomnia.GUI;
/** /**
* this Class represents the GUI for Insomnia * this Class represents the GUI for Insomnia
* @zahra_Fatehi * @zahra_Fatehi
...@@ -34,10 +35,6 @@ public class InsomniaGUI { ...@@ -34,10 +35,6 @@ public class InsomniaGUI {
LeftPanel leftPanel = new LeftPanel(); LeftPanel leftPanel = new LeftPanel();
leftPanel.createLeftPanel(); leftPanel.createLeftPanel();
//menu upper_Items //menu upper_Items
JMenuBar upperMenuBar = new JMenuBar(); JMenuBar upperMenuBar = new JMenuBar();
JMenu application = new JMenu("Application"); JMenu application = new JMenu("Application");
...@@ -186,6 +183,7 @@ public class InsomniaGUI { ...@@ -186,6 +183,7 @@ public class InsomniaGUI {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
JPanel aboutPanel = new JPanel(); JPanel aboutPanel = new JPanel();
JTextArea aboutText = new JTextArea(); JTextArea aboutText = new JTextArea();
aboutText.setLineWrap(true);
aboutText.setEditable(false); aboutText.setEditable(false);
aboutText.setText("developer\tzahra seyedFatehi \nEmail \ts.fatehi1378@Gmail.com\nstudent number\t9731301"); aboutText.setText("developer\tzahra seyedFatehi \nEmail \ts.fatehi1378@Gmail.com\nstudent number\t9731301");
aboutPanel.add(aboutText); aboutPanel.add(aboutText);
...@@ -205,6 +203,7 @@ public class InsomniaGUI { ...@@ -205,6 +203,7 @@ public class InsomniaGUI {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
JPanel helpPanel = new JPanel(); JPanel helpPanel = new JPanel();
JTextArea helpText = new JTextArea(); JTextArea helpText = new JTextArea();
helpText.setLineWrap(true);
helpPanel.add(helpText); helpPanel.add(helpText);
frame.setLocation(100,100); frame.setLocation(100,100);
frame.setPreferredSize(new Dimension(200,200)); frame.setPreferredSize(new Dimension(200,200));
......
package com.insomnia.GUI;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.Border; import javax.swing.border.Border;
import java.awt.*; import java.awt.*;
......
package com.insomnia.GUI;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.Border; import javax.swing.border.Border;
...@@ -12,12 +14,12 @@ import java.io.IOException; ...@@ -12,12 +14,12 @@ import java.io.IOException;
public class RequestPanel extends JPanel { public class RequestPanel extends JPanel {
private VerticalFlowLayout vfLayout = new VerticalFlowLayout(); private VerticalFlowLayout vfLayout = new VerticalFlowLayout();
private JPanel body = new JPanel(); private JPanel body = new JPanel();
private JPanel auth = new JPanel(); private JPanel auth = new JPanel();
private JPanel query = new JPanel(); private JPanel query = new JPanel();
private JPanel mainCenterHeader = new JPanel(vfLayout); private JPanel mainCenterHeader = new JPanel(vfLayout);
private JScrollPane scrollPane_Header_Request = new JScrollPane(mainCenterHeader); private JScrollPane scrollPane_Header_Request = new JScrollPane(mainCenterHeader);
JPanel docs = new JPanel(); JPanel docs = new JPanel();
JTabbedPane tabbedPaneCenterRequest = new JTabbedPane(); JTabbedPane tabbedPaneCenterRequest = new JTabbedPane();
JTextField headerField = new JTextField("header"); JTextField headerField = new JTextField("header");
......
package com.insomnia.GUI;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.Border; import javax.swing.border.Border;
import java.awt.*; import java.awt.*;
...@@ -5,20 +7,21 @@ import java.awt.event.MouseEvent; ...@@ -5,20 +7,21 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
public class RespondPanel extends JPanel { public class RespondPanel extends JPanel {
private Border border = BorderFactory.createLineBorder(Color.BLACK,3); private Border border = BorderFactory.createLineBorder(Color.BLACK,3);
private VerticalFlowLayout vfLayout = new VerticalFlowLayout(); private VerticalFlowLayout vfLayout = new VerticalFlowLayout();
private JPanel row = new JPanel(); private JPanel row = new JPanel();
private JTextArea massageBody = new JTextArea(); private JTextArea massageBody = new JTextArea();
private JPanel mainCenterHeader_respond = new JPanel(vfLayout); private JPanel mainCenterHeader_respond = new JPanel(vfLayout);
private JScrollPane scrollPane_Header_Respond = new JScrollPane(mainCenterHeader_respond); private JScrollPane scrollPane_Header_Respond = new JScrollPane(mainCenterHeader_respond);
private JPanel header_MainPanel = new JPanel(new BorderLayout()); private JPanel header_MainPanel = new JPanel(new BorderLayout());
private JButton copyToClipBoard = new JButton("copy to clip board"); private JButton copyToClipBoard = new JButton("copy to clip board");
private JPanel cookie = new JPanel(); private JPanel cookie = new JPanel();
private JPanel timeline = new JPanel(new BorderLayout()); private JPanel timeline = new JPanel(new BorderLayout());
private JTabbedPane tabbedPaneCenterResponse = new JTabbedPane(); private JTabbedPane tabbedPaneCenterResponse = new JTabbedPane();
private JTextField headerField2 = new JTextField("header"); private JTextField headerField2 = new JTextField("header");
public JTabbedPane tabbedPaneCenterResponse() { public JTabbedPane tabbedPaneCenterResponse() {
massageBody.setLineWrap(true);
massageBody.setPreferredSize(new Dimension(200, 300)); massageBody.setPreferredSize(new Dimension(200, 300));
row.add(massageBody); row.add(massageBody);
row.setBackground(Color.GRAY); row.setBackground(Color.GRAY);
......
package com.insomnia.GUI;
/** /**
* This class represents a layout that works like flow layout but in vertical side * This class represents a layout that works like flow layout but in vertical side
......
package com.insomnia.parser;
import java.util.ArrayList;
import java.util.HashMap;
public class Parser {
static ArrayList<String> fixArgs(String[] args){
ArrayList<String> args2 = new ArrayList<>();
String f = "";
for (String arg : args){
if (arg.trim().startsWith("-")){
if (!f.isEmpty()) args2.add(f.trim());
f = arg.trim()+" ";
}else{
f = f + arg.trim()+" ";
}
}
if (!f.isEmpty()) args2.add(f.trim());
return args2;
}
public static RequestData parse(String[] args){
RequestData requestData = new RequestData();
for (String arg: fixArgs(args)) {
String a = findArg(arg).trim();
String paramName,paramValue="";
if (a.contains(" ")){
paramName = a.substring(0,a.indexOf(" ")).trim();
paramValue = findParamValue(a.substring(a.indexOf(" ")+1).trim());
}else{
paramName = a;
}
switch (paramName.toLowerCase()) {
case "url":
requestData.setUrl(paramValue);
break;
case "method":
case "m":
requestData.setMethod(findMethod(paramValue));
break;
case "headers":
case "h":
if (paramValue.length()>2){
HashMap<String,String> headers = new HashMap<>();
if (!paramValue.contains(";")){
String[] h1 = paramValue.split(":");
headers.put(h1[0],h1[1]);
}else{
String[] mHeaders = paramValue.split(";");
for (String h : mHeaders){
String[] h0 = h.split(":");
headers.put(h0[0],h0[1]);
}
}
requestData.setHeaders(headers);
}
break;
case "i":
requestData.setShowResponseHeaders(true);
break;
case "f":
requestData.setFollowRedirects(true);
break;
case "output":
case "o":
requestData.setOutput( paramValue.isEmpty() ? "-t" : paramValue);
break;
case "save":
case "s":
requestData.setSaveRequest(true);
break;
case "json":
case "j":
requestData.setJson(true);
break;
case "data":
case "d":
requestData.setBody(paramValue);
break;
case "upload":
requestData.setUploadPath(paramValue);
}
}
return requestData;
}
static String findMethod(String v){
switch (v.toUpperCase().trim()){
case "GET":
case "POST":
case "DELETE":
case "PUT":
return v.toUpperCase().trim();
default:
return RequestData.GET;
}
}
static String findParamValue(String v){
if (v.startsWith("\"") && v.endsWith("\"")){
return v.substring(1,v.length()-1);
}
return v;
}
static String findArg (String v){
if (v.startsWith("--")){
return v.substring(2);
}else if (v.startsWith("-")){
return v.substring(1);
}
return v;
}
}
/**
* RequestData represents a class which contains the data for request
*
* @author : zahra_seyedfatehi
* version: 0.0
*/
package com.insomnia.parser;
import java.util.HashMap;
public class RequestData {
//methods requests
public static String GET = "GET", POST = "POST", DELETE="DELETE", PUT="PUT";
//address of request
private String url = "",method = GET;
private boolean followRedirects = false;
private HashMap<String,String> headers = null;
private boolean showResponseHeaders = false;
private String output = "-null";
private boolean saveRequest = false;
private boolean isJson = false;
private String body = "";
private String uploadPath = "";
public boolean isJson() {
return isJson;
}
public void setJson(boolean json) {
isJson = json;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getUploadPath() {
return uploadPath;
}
public void setUploadPath(String uploadPath) {
this.uploadPath = uploadPath;
}
public boolean isShowResponseHeaders() {
return showResponseHeaders;
}
public void setShowResponseHeaders(boolean showResponseHeaders) {
this.showResponseHeaders = showResponseHeaders;
}
public String getOutput() {
return output;
}
public void setOutput(String output) {
this.output = output;
}
public boolean isSaveRequest() {
return saveRequest;
}
public void setSaveRequest(boolean saveRequest) {
this.saveRequest = saveRequest;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public boolean isFollowRedirects() {
return followRedirects;
}
public void setFollowRedirects(boolean followRedirects) {
this.followRedirects = followRedirects;
}
public HashMap<String, String> getHeaders() {
return headers;
}
public void setHeaders(HashMap<String, String> headers) {
this.headers = headers;
}
}
package com.insomnia.parser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Saver {
private static final String appName = "Insomnia";
private static int os = 0;
public static String getDirApp(){
return System.getProperty("user.dir");
}
public static String getOutputDir(){
File f = new File(getDirApp(),"Outputs");
f.mkdir();
return f.toString();
}
public static String getRequestsDir(){
if (os == 0) {
String s = System.getProperty("os.name", "").toLowerCase();
os = s.contains("win") ? 1 : 2;
}
if (os == 1) {
File res = new File(System.getenv("AppData"), appName);
res.mkdir();
return res.toString();
}
File f = new File(getDirApp(),"Requests");
f.mkdir();
return f.toString();
}
/**
* @return saved file name or empty if file didn't save
*/
public static String saveRequest (RequestData data) {
int size = new File(getRequestsDir()).list().length + 1;
String fileName = "Request "+size+".insomnia";
File file = new File(getRequestsDir(),fileName);
boolean fileFound = file.exists();
if (fileFound) {
while (fileFound) {
size++;
fileName = "Request "+size+".insomnia";
file = new File(getRequestsDir(),fileName);
fileFound = file.exists();
}
}
try {
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
ObjectOutputStream out = new ObjectOutputStream(fo);
out.writeObject(data);
out.close();
fo.close();
return fileName;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
public static RequestData readRequest (String fileName){
try {
FileInputStream file = new FileInputStream(new File(getRequestsDir(),fileName));
ObjectInputStream in = new ObjectInputStream(file);
RequestData data = (RequestData) in.readObject();
in.close();
file.close();
return data;
} catch(IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
public static File[] getRequestFiles(){
return new File(getRequestsDir()).listFiles();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment