_A = {
   "loadcookiesfrombrowser":{  
      "name":"Load cookies from browser",
      "description":"Load cookies from browser",
      "template": "",
      "suggestion":{  
         "en":"autologin",
         "ru":"автовход"
      },
      "group":"httpclient"
   },
   "restrictpopups":{  
      "name":"Restrict popups",
      "description":"Restrict popups",
      "template": "",
      "suggestion":{  
         "en":"ad blocking",
         "ru":"блокировать рекламу"
      },
      "group":"network"
   },
   "allowpopups":{  
      "name":"Allow popups",
      "description":"Allow popups",
      "template": "",
      "group":"network"
   },
   "restrictdownloads":{  
      "name":"Restrict downloads",
      "description":"Restrict downloads",
      "template": "",
      "group":"network"
   },
   "allowdownloads":{  
      "name":"Allow downloads",
      "description":"Allow downloads",
      "template": "",
      "group":"network"
   },
   "setheader":{  
      "name":"Set Header (deprecated)",
      "description":"Set HTTP Headers, like user agent, accept language, etc",
      "template": `<prop name="Value" /> -> <prop name="Name" />`,
      "suggestion":{  
         "en":"User agent, Accept Language",
         "ru":"юзер агент"
      },
      "group":"network"
   },
   "loadcookiesfromhttpclient":{  
      "name":"Load cookies from http client",
      "description":"Load cookies from http client",
      "template": "",
      "suggestion":{  
         "en":"autologin",
         "ru":"автовход"
      },
      "group":"network"
   },
   "getthreadnumber":{  
      "name":"Thread index",
      "description":"Thread index",
      "template": `<prop name="Save" />`,
      "group":"ScriptStats"
   },
   "closebrowser":{  
      "name":"Close browser",
      "description":"Close browser",
      "template": "",
      "group":"manual"
   },
   "openbrowser":{  
      "name":"Open browser",
      "description":"Open browser",
      "template": "",
      "group":"manual"
   },
   "addtab":{  
      "name":"Add Tab",
      "class":"browser",
      "description":"Add Tab",
      "template": `
         <prop name="Url" />,
         <prop name="Referrer" show_label="always" hide_if_default="true" label="Referrer" priority="20" />,
         <prop name="IsSilent" show_label="always" hide_if_default="true" label="-LABEL-Delay" priority="25" />,
         <prop name="use-waiter" show_label="always" hide_if_value_equals="1" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "suggestion":{  
         "en":"new window, Referrer, Referer",
         "ru":"новое окно, реферрер, реферер"
      },
      "group":""
   },
   "tabinfo":{  
      "name":"Get information about tabs",
      "class":"browser",
      "description":"Get information about tabs",
      "template": `
         <prop name="UrlList" is_variable="true" />,
         <prop name="CurrentIndex" is_variable="true" show_label="auto" label="Index" />
      `,
      "group":""
   },
   "selecttab":{  
      "name":"Select Tab",
      "class":"browser",
      "description":"Select Tab",
      "template": `<prop name="Index" />`,
      "group":""
   },
   "closetab":{  
      "name":"Close Tab",
      "class":"browser",
      "description":"Close Tab",
      "template": `<prop name="Index" />`,
      "suggestion":{  
         "en":"close window",
         "ru":"закрыть окно"
      },
      "group":""
   },
   "load":{  
      "name":"Load",
      "description":"Load specific url",
      "template": `
         <prop name="LoadUrl" />,
         <prop name="Referrer" priority="40" show_label="always" hide_if_default="true" label="Referrer" />,
         <prop name="use-waiter" show_label="always" hide_if_value_equals="1" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":"browser",
      "suggestion":{  
         "en":"Referrer, Referer",
         "ru":"реферрер, реферер"
      },
   },
   "navigateback":{  
      "name":"Previous Page",
      "description":"Load previous page",
      "template": `
         <prop name="use-waiter" show_label="always" hide_if_value_equals="1" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "suggestion":{  
         "en":"browser history",
         "ru":"история браузера"
      },
      "group":"browser"
   },
   "url":{  
      "name":"Current Url",
      "description":"Get current url",
      "template": `<prop name="SaveUrl" is_variable="true" />`,
      "group":"browser"
   },
   "screen":{  
      "name":"Get resolution and cursor position",
      "description":"Get resolution and cursor position",
      "template": `
         <prop name="Width" is_variable="true" label="Width" show_label="always" />,
         <prop name="Height" is_variable="true" label="Height" show_label="always" />,
         <prop name="CursorAbsoluteX" is_variable="true" priority="50" label="Cursor X" show_label="always" hide_if_default="true" />,
         <prop name="CursorAbsoluteY" is_variable="true" priority="50" label="Cursor Y" show_label="always" hide_if_default="true" />,
         <prop name="ScrollX" is_variable="true" priority="80" label="Scroll X" show_label="always" hide_if_default="true" />,
         <prop name="ScrollY" is_variable="true" priority="80" label="Scroll Y" show_label="always" hide_if_default="true" />
      `,
      "suggestion":{  
         "en":"mouse position, get browser size, get curor coordinates, mouse coordinates",
         "ru":"положение мыши, получить размер браузера, получить координаты курсора, координаты мыши"
      },
      "group":"browser"
   },
   "touch":{  
      "name":"Touch screen mode",
      "description":"Touch screen mode",
      "template": `<prop name="Enable" />`,
      "suggestion":{  
         "en":"swipe",
         "ru":"свайп, тач"
      },
      "group":"browser"
   },
   "html":{  
      "name":"Page Html",
      "description":"Save page html to variable",
      "template": `<prop name="Save" is_variable="true" />`,
      "suggestion":{  
         "en":"page source, html code",
         "ru":"html страницы, хтмл код"
      },
      "group":"browser"
   },
   "type":{  
      "name":"Type",
      "description":"Type text on page. For example, put email in input field",
      "template": `
         <prop name="TypeData" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="TypeInterval" priority="80" hide_if_default="true" show_label="auto" label="Interval" />
      `,
      "suggestion":{  
         "en":"press esc, press escape, press enter, press key, enter key",
         "ru":"печать текста, напечатать текст, ввести текст, нажать кнопку, прокрутка страницы, прокрутить страницу, нажать энтер, нажать клавишу"
      },
      "group":"browser"
   },
   "resize":{  
      "name":"Resize",
      "description":"Change browser size",
      "template": `<prop name="ResizeX" /> : <prop name="ResizeY" />`,
      "suggestion":{  
         "en":"browser resolution, window resolution, window width, window height, browser width, browser height",
         "ru":"разрешение браузера, ширина браузера, высота браузера, разрешение окна, ширина окна, высота окна"
      },
      "group":"browser"
   },
   "proxy":{  
      "name":"Proxy",
      "description":"Set proxy",
      "template": `
         <prop name="ProxyText" />,
         <prop name="ProxyType" show_label="always" label="Proxy type" hide_if_default="true" priority="20" />,
         <prop name="ProxyLogin" show_label="always" label="Login" hide_if_default="true" priority="30" />,
         <prop name="ProxyPassword" show_label="always" label="Password" hide_if_default="true" priority="30" />,
         <prop name="ChangeTimezone" show_label="always" label="Timezone" hide_if_default="true" priority="60" />,
         <prop name="ChangeGeolocation" show_label="always" label="Geolocation" hide_if_default="true" priority="60" />,
         <prop name="ChangeWebrtcIp" show_label="always" label="Webrtc" hide_if_default="true" priority="60" />,
         <prop name="ChangeBrowserLanguage" show_label="always" label="Language" hide_if_default="true" priority="60" />,
         <prop name="PublicIPv4" show_label="always" label="Public ipv4" hide_if_default="true" priority="65" />,
         <prop name="PublicIPv6" show_label="always" label="Public ipv6" hide_if_default="true" priority="65" />,
         <prop name="PrivateIPv4" show_label="always" label="Private ipv4" hide_if_default="true" priority="65" />,
         <prop name="PrivateIPv6" show_label="always" label="Private ipv6" hide_if_default="true" priority="65" />,

         <prop name="DNSMode" show_label="always" label="DNS mode" hide_if_default="true" priority="66" />,
         <prop name="CustomDNSIP" show_label="always" label="DNS ip" hide_if_default="true" priority="66" />,

         <prop name="DetectExternalIp" show_label="always" label="Detect IPv4" hide_if_default="true" priority="70" />,
         <prop name="ServiceURL" show_label="always" label="IPv4 URL" hide_if_default="true" priority="70" />,
         <prop name="IpExtractionMethod" show_label="always" label="IPv4 method" hide_if_default="true" priority="70" />,
         <prop name="IpExtractionParam" show_label="always" label="IPv4 param" hide_if_default="true" priority="70" />,
         
         <prop name="DetectExternalIpV6" show_label="always" label="Detect IPv6" hide_if_default="true" priority="70" />,
         <prop name="ServiceURLV6" show_label="always" label="IPv6 URL" hide_if_default="true" priority="70" />,
         <prop name="IpExtractionMethodV6" show_label="always" label="IPv6 method" hide_if_default="true" priority="70" />,
         <prop name="IpExtractionParamV6" show_label="always" label="IPv6 param" hide_if_default="true" priority="70" />,
         
         <prop name="IpInfoMethod" show_label="always" label="Ip info" hide_if_default="true" priority="80" />,
         <prop name="IpApiKey" show_label="always" label="ip-api key" hide_if_default="true" priority="80" max_size="8" />
      `,
      "suggestion":{  
         "en":"Change ip, Socks, change browser language, change timezone",
         "ru":"Изменить ип, Сменить ип, Socks, Сокс, изменить язык браузера, изменить часовой пояс"
      },
      "group":"browser"
   },
   "javascript": {  
      "name": "Javascript (deprecated)",
      "description": "Execute javascript",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "suggestion": {  
         "en": "Execute on page, Access page",
         "ru": "Яваскрипт, Выполнить на странице, Доступ к странице"
      },
      "group": "browser"
   },
   "browserjavascript": {  
      "name": "Javascript",
      "description": "Execute javascript",
      "template": `
         <prop name="Code" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "suggestion": {  
         "en": "Execute on page, Access page",
         "ru": "Яваскрипт, Выполнить на странице, Доступ к странице"
      },
      "group": "browser"
   },
   "onloadjavascript":{  
      "name":"Execute On Every Page Load In Browser",
      "description":"Execute javascript on every page load in browser",
      "template": `<prop name="Value" />`,
      "suggestion":{  
         "en":"Execute on page, Access page, inject code",
         "ru":"Яваскрипт, Выполнить на странице, Доступ к странице, внедрить код"
      },
      "group":"browser"
   },
   "reset":{  
      "name":"Reset",
      "description":"Clear all browser data",
      "template": "",
      "suggestion":{  
         "en":"restart",
         "ru":"перезапуск"
      },
      "group":"browser"
   },
   "openfile":{  
      "name":"Open File Result",
      "description":"Set open file dialog result",
      "template": `<prop name="Value" />`,
      "suggestion":{  
         "en":"upload file",
         "ru":"загрузить файл"
      },
      "group":"browser"
   },
   "dragfile":{  
      "name":"Start Drag File",
      "description":"Start Drag File",
      "template": `<prop name="Value" />`,
      "group":"browser"
   },
   "promptresult":{  
      "name":"Prompt Result",
      "description":"Set prompt result",
      "template": `<prop name="Value" />`,
      "group":"browser"
   },
   "httpauth":{  
      "name":"Http Auth",
      "description":"Set http auth login and password",
      "template": `
         <prop name="Login" show_label="always" label="Login" />,
         <prop name="Password" show_label="always" label="Password" />
      `,
      "suggestion":{  
         "en":"http authentication",
         "ru":"хттп авторизация"
      },
      "group":"browser"
   },
   "scroll":{  
      "name":"Scroll",
      "description":"Scroll to position",
      "template": `
         <prop name="X" show_label="always" label="X" />,
         <prop name="Y" show_label="always" label="Y" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="Check" show_label="always" priority="40" hide_if_default="true" label="Wheel" />
      `,
      "suggestion":{  
         "en":"page scrolling",
         "ru":"прокрутка страницы, скролить страницу"
      },
      "group":"browser"
   },
   "renderscreen":{  
      "name":"Render",
      "description":"Render screen part to variable as png base64 encoded",
      "template": `
         <prop name="X" show_label="always" label="X" />,
         <prop name="Y" show_label="always" label="Y" />,
         <prop name="Width" show_label="always" label="Width" />,
         <prop name="Height" show_label="always" label="Height" />
         -> <prop name="Save" is_variable="true" />
      `,
      "suggestion":{  
         "en":"make screen, make screenshot, render image, render element",
         "ru":"сделать скрин, сделать скриншот, сохранить изображение, сохранить элемент, рендер элемента"
      },
      "group":"browser"
   },
   "clickCaptchaBrowser":{
      "name":"Solve captcha with clicks",
      "description":"Solve captcha with clicks",
      "template": `
         <prop name="imageData" max_size="11" />,
         <prop name="serviceName" show_label="auto" label="Method" priority="20" />,
         <prop name="serviceKey" show_label="always" label="Key" hide_if_default="true" priority="30" max_size="11" />,
         <prop name="textInstructions" show_label="always" label="Description" hide_if_default="true" priority="60" />,
         <prop name="taskWaitTimeout" show_label="always" label="Interval" hide_if_default="true" priority="80" />,
         <prop name="taskWaitDelay" show_label="always" label="Delay" hide_if_default="true" priority="80" />,
         <prop name="serviceUrl" show_label="always" label="Server" hide_if_default="true" priority="80" />
         -> 
         <prop name="clickCoordinatesList" is_variable="true" />`,
      "suggestion":{  
         "en":"solve captcha, solve image",
         "ru":"решить капчу, решить картинку"
      },
      "group":"browser"
   },
   "solvecaptcha":{  
      "name":"Solve Captcha",
      "description":"Solve captcha",
      "template": `
         <prop name="Value" max_size="11" />,
         <prop name="Method" show_label="always" label="Method" priority="20" />,
         <prop name="Antigate" show_label="always" label="Key" hide_if_default="true" priority="30" max_size="11" />,
         <prop name="Server" show_label="always" label="Server" hide_if_default="true" priority="80" />
         -> 
         <prop name="Save" is_variable="true" />
      `,
      "suggestion":{  
         "en":"solve capcha, solve image",
         "ru":"решить каптчу, решить картинку"
      },
      "group":"browser"
   },
   "solverfailed":{  
      "name":"Captcha Failed",
      "description":"Captcha Failed",
      "template": "",
      "group":"browser"
   },
   "timeout":{  
      "name":"Timeout",
      "description":"Set Timeout",
      "template": `
         <prop name="Value" />,
         <prop name="Type" show_label="always" label="Timeout type" priority="50" hide_if_default="true" /> 
      `,
      "suggestion":{  
         "en":"max action execution time",
         "ru":"максимальное время ожидания, максимальное время действия"
      },
      "group":"browser"
   },
   "mousesettings":{  
      "name":"Mouse Settings",
      "description":"Mouse Settings",
      "template": `
         <prop name="Speed" show_label="always" />,
         <prop name="Gravity" priority="50" show_label="always" />,
         <prop name="Deviation" priority="50" show_label="always" />
      `,
      "suggestion":{  
         "en":"mouse speed",
         "ru":"скорость мыши"
      },
      "group":"browser"
   },
   "notification":{  
      "name":"Notifications",
      "description":"Browser notifications",
      "template": `<prop name="AllowNotifications" />`,
      "group":"browser"
   },
   "browsersettings":{  
      "name":"Browser Settings",
      "description":"Browser Settings",
      "template": `
         <prop name="Key" show_label="always" label="Key" hide_if_default="true" priority="50" max_size="9" />,
         <prop name="Widevine" show_label="always" label="Widevine" hide_if_default="true" priority="51" />,
         <prop name="SafeBrowsing" show_label="always" label="SafeBrowsing" hide_if_default="true" priority="52" />,
         <prop name="Components" show_label="always" label="Components" hide_if_default="true" priority="53" />,
         <prop name="Webrtc" show_label="always" label="Webrtc" hide_if_default="true" priority="54" />,
         <prop name="WebrtcIps" show_label="always" label="Webrtc ips" hide_if_default="true" priority="54" />,
         <prop name="Canvas" show_label="always" label="Canvas" hide_if_default="true" priority="55" />,
         <prop name="CanvasNoise" show_label="always" label="Canvas noise" hide_if_default="true" priority="55" />,
         <prop name="Webgl" show_label="always" label="Webgl" hide_if_default="true" priority="56" />,
         <prop name="WebglNoise" show_label="always" label="Webgl noise" hide_if_default="true" priority="56" />,
         <prop name="WebglVendor" show_label="always" label="Webgl vendor" hide_if_default="true" priority="57" />,
         <prop name="WebglRenderer" show_label="always" label="Webgl renderer" hide_if_default="true" priority="58" />,
         <prop name="Audio" show_label="always" label="Audio" hide_if_default="true" priority="59" />,
         <prop name="AudioNoise" show_label="always" label="Audio noise" hide_if_default="true" priority="59" />,
         <prop name="QUIC" show_label="always" label="QUIC" hide_if_default="true" priority="60" />,
         <prop name="MaxFPS" show_label="always" label="FPS" hide_if_default="true" priority="61" />,
         <prop name="Extensions" show_label="always" label="Extensions" hide_if_default="true" priority="62" />,
         <prop name="BrowserVersion" show_label="always" label="Browser version" hide_if_default="true" priority="63" />,
         <prop name="CommandLine" show_label="always" label="-LABEL-Command line" hide_if_default="true" priority="64" />,
         <prop name="Path" show_label="always" label="Profile" hide_if_default="true" priority="65" />,
         <prop name="LoadFPFromFolder" show_label="always" label="Load fp" hide_if_default="true" priority="66" />,
         <prop name="LoadProxyFromFolder" show_label="always" label="Load proxy" hide_if_default="true" priority="67" />,
         <prop name="Tunneling" show_label="always" label="-LABEL-Tunneling" hide_if_default="true" priority="68" />
      `,
      "suggestion":{  
         "en":"skip frames, browser options",
         "ru":"пропуск кадров, свойства браузера"
      },
      "group":"browser"
   },
   "getbrowserversionlist":{  
      "name":"Get list of available browser versions",
      "description":"Get list of available browser versions",
      "template": `
         <prop name="Format" hide_if_default="true" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "suggestion":{  
         "en":"chrome version",
         "ru":"версия chrome"
      },
      "group":"browser"
   },
   "getcurrentbrowserversion":{  
      "name":"Get current browser version",
      "description":"Get current browser version",
      "template": `
         <prop name="Save2" is_variable="true" show_label="auto" label="Version" />,
         <prop name="Save" is_variable="true" priority="50" show_label="always" hide_if_default="true" label="Id" />,
         <prop name="Save3" is_variable="true" priority="90" show_label="always" hide_if_default="true" label="Architecture" />
      `,
      "suggestion":{  
         "en":"chrome version",
         "ru":"версия chrome"
      },
      "group":"browser"
   },
   "clickextensionbutton":{  
      "name":"Click extension button",
      "description":"Click extension button",
      "template": `
         <prop name="ExtensionId" />,
         <prop name="use-waiter" show_label="always" hide_if_value_equals="1" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "suggestion":{  
         "en":"extension",
         "ru":"расширение"
      },
      "group":"browser"
   },
   "if":{  
      "name":"If",
      "description":"Execute conditional actions",
      "template": `<prop name="IfExpression" />`,
      "suggestion":{  
         "en":"condition, else, execute if condition",
         "ru":"условие, если, иф, иначе, выполнить если"
      },
      "group":"logic"
   },
   "while":{  
      "name":"While",
      "description":"Execute while loop",
      "template": `<prop name="WhileExpression" />`,
      "suggestion":{  
         "en":"cycle, loop, for, until, execute several times",
         "ru":"цикл, фор, выполнять пока не будет выполнено условие, вайл, перебор, выполнить несколько раз"
      },
      "group":"logic"
   },
   "for":{  
      "name":"For",
      "description":"Execute for loop",
      "template": `<prop name="ForFrom" /> : <prop name="ForTo" />`,
      "suggestion":{  
         "en":"cycle, loop, for, until, execute several times",
         "ru":"цикл, фор, выполнять пока не будет выполнено условие, вайл, перебор, выполнить несколько раз"
      },
      "group":"logic"
   },
   "foreach":{  
      "name":"Foreach",
      "description":"Execute foreach loop",
      "template": `<prop name="ForArray" />`,
      "suggestion":{  
         "en":"cycle, loop, for, until, traverse list, iterate list, execute several times",
         "ru":"цикл, фор, выполнять пока не будет выполнено условие, вайл, перебор списка, выполнить несколько раз"
      },
      "group":"logic"
   },
   "break":{  
      "name":"Break",
      "description":"Stop loop",
      "template": "",
      "suggestion":{  
         "en":"stop cycle, cycle interrupt, loop interrupt",
         "ru":"остановить цикл, прервать цикл"
      },
      "group":"logic"
   },
   "continue":{  
      "name":"Continue",
      "description":"Next loop iteration",
      "template": "",
      "suggestion":{  
         "en":"resume loop, resume cycle",
         "ru":"продолжить цикл"
      },
      "group":"logic"
   },
   "success":{  
      "name":"Success",
      "class":"logic",
      "description":"Finish script with success result",
      "template": `<prop name="SuccessMessage" />`,
      "suggestion":{  
         "en":"end thread, stop thread",
         "ru":"завершить поток, прервать поток"
      },
      "group":"logic"
   },
   "fail":{  
      "name":"Fail",
      "class":"logic",
      "description":"Finish script with fail result",
      "template": `
         <prop name="FailMessage" />,
         <prop name="Check" priority="40" show_label="always" hide_if_default="true" label="Don't restart" />
      `,
      "suggestion":{  
         "en":"end thread, stop thread",
         "ru":"завершить поток, прервать поток"
      },
      "group":"logic"
   },
   "die":{  
      "name":"End Script",
      "class":"logic",
      "description":"Immediately End Script",
      "template": `<prop name="FailMessage" />,
      <prop name="Check" priority="40" show_label="always" hide_if_default="true" label="Instantly" />`,
      "suggestion":{  
         "en":"end script, stop script",
         "ru":"завершить скрипт, прервать скрипт"
      },
      "group":"logic"
   },
   "goto":{  
      "name":"Move to label",
      "class":"logic",
      "description":"Move to label",
      "template": `<prop name="LabelName" />`,
      "suggestion":{  
         "en":"goto, move execution point",
         "ru":"переместить точку выполнения"
      },
      "group":"logic"
   },
   "label":{  
      "name":"Set label",
      "description":"Set label",
      "template": `<prop name="Label" />`,
      "suggestion":{  
         "en":"goto, move execution point",
         "ru":"переместить точку выполнения"
      },
      "group":"logic"
   },
   "ignoreerrors":{  
      "name":"Ignore Errors",
      "description":"Ignore errors",
      "template": "",
      "suggestion":{  
         "en":"catch, try, catch errors",
         "ru":"catch, try, catch errors"
      },
      "group":"logic"
   },
   "setvariable":{  
      "name":"Set Variable",
      "description":"Sets or creates variable",
      "template": '<prop name="SetVariableValue" /> -> <prop name="SetVariableName" />',
      "group":"logic"
   },
   "incvariable":{  
      "name":"Increase Variable",
      "description":"Increase Variable",
      "template": '<prop name="IncVariableValue" /> -> <prop name="SetVariableName" />',
      "group":"logic"
   },
   "incglobalvariable":{  
      "name":"Increase Global Variable",
      "description":"Increase Global Variable",
      "template": '<prop name="IncVariableValue" /> -> <prop name="SetVariableName" />',
      "group":"logic"
   },
   "executefunction":{  
      "name":"Call Function",
      "class":"logic",
      "description":"Call function",
      "template": `<prop name="FunctionName" />`,
      "group":"logic"
   },
   "getfunctionparameter":{  
      "name":"Get Function Parameter",
      "class":"logic",
      "description":"Get Function Parameter",
      "template": `<prop name="ParameterName" /> -> <prop name="Save" />`,
      "group":"logic"
   },
   "recaptchav3":{  
      "name":"Recaptcha V3",
      "class":"browser",
      "description":"Recaptcha V3",
      "template": `
         <prop name="Action" show_label="auto" label="Action" />,
         <prop name="Method" show_label="always" label="Method" priority="20" />,
         <prop name="Rucaptcha" show_label="always" label="Key" priority="20" max_size="11" />,
         <prop name="Server" show_label="always" label="Server" priority="80" hide_if_default="true" />,
         <prop name="Score" show_label="always" label="Score" priority="80" hide_if_default="true" />,
         <prop name="SendProxy" show_label="always" label="Proxy" priority="80" hide_if_default="true" />
      `,
      "group":"browser"
   },
   "return":{  
      "name":"Return",
      "class":"logic",
      "description":"Return",
      "template": `<prop name="ReturnValue" />`,
      "group":"logic"
   },
   "executefunctioninseveralthreads":{  
      "name":"Call function in several threads",
      "class":"logic",
      "description":"Call function in several threads",
      "template": `
         <prop name="FunctionName" />,
         <prop name="ThreadNumber" label="Threads" show_label="always" />,
         <prop name="SuccessNumber" label="Successes" show_label="always" />,
         <prop name="FailNumber" label="Fails" show_label="always" />
      `,
      "group":"logic"
   },
   "log":{  
      "name":"Log",
      "description":"Output string to log",
      "template": `<prop name="LogText" />`,
      "suggestion":{  
         "en":"output text, print text, output data",
         "ru":"вывод текста, печать текста, вывод данных"
      },
      "group":"tools"
   },
   "clearlog":{  
      "name":"Clear Log",
      "description":"Clear Log",
      "template": "",
      "suggestion":{  
         "en":"delete log",
         "ru":"удалить лог"
      },
      "group":"tools"
   },
   "result":{  
      "name":"Result",
      "description":"Save result",
      "template": `
         <prop name="Value" />,
         <prop name="Select" hide_if_default="true" show_label="always" label="Index" />
      `,
      "suggestion":{  
         "en":"output data",
         "ru":"вывод данных"
      },
      "group":"tools"
   },
   "custom":{  
      "name":"Execute code",
      "description":"Execute custom code",
      "template": `<prop name="Code" />`,
      "suggestion":{  
         "en":"execute javascript code, run javascript",
         "ru":"выполнить яваксрипт, код джаваскрипт, выполнить код"
      },
      "group":"tools"
   },
   "globalset":{  
      "name":"Set Global Variable",
      "description":"Set global variable",
      "template": `<prop name="Value" /> -> <prop name="Name" />`,
      "group":"logic"
   },
   "parseline":{  
      "name":"Parse Line (deprecated)",
      "description":"Parse line like this 'a1:a2:a3' and save to variables",
      "template": `<prop name="Value" /> -> <prop name="VariablesList" />`,
      "suggestion":{  
         "en":"split line",
         "ru":"разбить строку, разделить строку"
      },
      "group":"tools"
   },
   "randomint":{  
      "name":"Random Number",
      "description":"Generate random integer",
      "template": `
         <prop name="MinValue" show_label="always" label="Min" priority="50" />,
         <prop name="MaxValue" show_label="always" label="Max" priority="50" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "group":"tools"
   },
   "getcookiesforurl":{  
      "name":"Get Cookies For Url",
      "description":"Get cookies for url",
      "template": `<prop name="Value" /> -> <prop name="Save" is_variable="true" />`,
      "suggestion":{  
         "en":"autologin",
         "ru":"кукисы, автовход"
      },
      "group":"network"
   },
   "savecookies":{  
      "name":"Save Cookies",
      "description":"Save cookies to variable",
      "template": `
         <prop name="Save" is_variable="true" />,
         <prop name="Domain" hide_if_default="true" show_label="always" label="Domain" priority="30" />
      `,
      "suggestion":{  
         "en":"autologin",
         "ru":"кукисы, автовход"
      },
      "group":"network"
   },
   "restorecookies":{  
      "name":"Restore Cookies",
      "description":"Restore cookies, which is saved with «Save cookies» action",
      "template": `
         <prop name="Value" />,
         <prop name="Append" hide_if_default="true" show_label="always" label="Append cookies" priority="30" />
      `,
      "suggestion":{  
         "en":"autologin",
         "ru":"кукисы, автовход"
      },
      "group":"network"
   },
   "cachemaskallow":{  
      "name":"Allow cache",
      "description":"Allow save loaded url content to cache",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />
         ->
         <prop name="Save" is_variable="true" />,
         <prop name="limit" hide_if_default="true" label="Limit" show_label="always" priority="40" />
      `,
      "group":"network"
   },
   "cachemaskdeny":{  
      "name":"Deny cache",
      "description":"Deny save loaded url content to cache",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />
         ->
         <prop name="Save" is_variable="true" />,
         <prop name="limit" hide_if_default="true" label="Limit" show_label="always" priority="40" />
      `,
      "group":"network"
   },
   "requestmaskallow":{  
      "name":"Allow request",
      "description":"Allow load url, which matching filters",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "group":"network"
   },
   "requestmaskdeny":{  
      "name":"Deny request",
      "description":"Deny load url, which matching filters",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "suggestion":{  
         "en":"images restrict, stop loading image",
         "ru":"запретить запрос, запросы загружать картинки"
      },
      "group":"network"
   },
   "cleardata":{  
      "name":"Clear Cached Data",
      "description":"Clear loaded cache data",
      "template": "",
      "group":"network"
   },
   "clearmasks":{  
      "name":"Clear filters",
      "description":"Clear cache and request filters",
      "template": "",
      "group":"network"
   },
   "getstatus":{  
      "name":"Get Status",
      "description":"Get url load status",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "group":"network"
   },
   "isloaded":{  
      "name":"Is Loaded",
      "description":"Check if url is loaded",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "group":"network"
   },
   "getfromcache":{  
      "name":"Get last item from cache",
      "description":"Get cached page",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />,
         <prop name="waitItem" hide_if_default="true" show_label="always" label="Wait item" priority="40" />
         -> 
         <prop name="Save" is_variable="true" />,
         <prop name="Check" hide_if_default="true" show_label="always" label="Base64" priority="50" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="60" />
      `,
      "suggestion":{  
         "en":"get request content, get request headers",
         "ru":"получить содержание запроса, получить хедеры запроса"
      },
      "group":"network"
   },
   "getallcache":{  
      "name":"Get all items from cache",
      "description":"Get list of cached pages",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="30" />
         ->
         <prop name="Save" is_variable="true" />
      `,
      "suggestion":{  
         "en":"get request content, get request headers",
         "ru":"получить содержание запроса, получить хедеры запроса"
      },
      "group":"network"
   },
   "redirectrequests":{  
      "name":"Redirect browser requests",
      "description":"Replace the browser request URL with another URL",
      "template":`
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />, 
         <prop name="replaceMode" label="Replace mode" show_label="always" />,
         <prop name="exact" hide_if_default="true" label="Value" show_label="always" show_if="replaceMode:exact" />,
         <prop name="replaceAllExact" hide_if_default="true" label="Replace all" show_label="always" priority="40" show_if="replaceMode:exact" />,
         <prop name="regexp" hide_if_default="true" label="Regular expression" show_label="always" show_if="replaceMode:regexp" />,
         <prop name="ignoreСase" hide_if_default="true" label="Ignore case" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="globalSearch" hide_if_default="true" label="Global search" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="before" hide_if_default="true" label="Insert before" show_label="always" show_if="replaceMode:before" />,
         <prop name="after" hide_if_default="true" label="Insert after" show_label="always" show_if="replaceMode:after" />,
         <prop name="leftValue" hide_if_default="true" label="From" show_label="always" show_if="replaceMode:between" />,
         <prop name="rightValue" hide_if_default="true" label="To" show_label="always" show_if="replaceMode:between" />,
         <prop name="newValue" hide_if_default="true" label="New value" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="42" />
         -> 
         <prop name="Save" is_variable="true" />,
         <prop name="limit" hide_if_default="true" label="Limit" show_label="always" priority="43" />
      `,
      "group":"network"
   },
   "replacerequestcontent":{  
      "name":"Replace request content",
      "description":"Replace the contents of the browser request",
      "template":`
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="contentFilters" hide_if_default="true" label="Content filters" show_label="always" />,
         <prop name="replaceMode" label="Replace mode" show_label="always" />,
         <prop name="exact" hide_if_default="true" label="Value" show_label="always" show_if="replaceMode:exact" />,
         <prop name="replaceAllExact" hide_if_default="true" label="Replace all" show_label="always" show_if="replaceMode:exact" priority="40" />,
         <prop name="regexp" hide_if_default="true" label="Regular expression" show_label="always" show_if="replaceMode:regexp" />,
         <prop name="ignoreСase" hide_if_default="true" label="Ignore case" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="globalSearch" hide_if_default="true" label="Global search" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="multiline" hide_if_default="true" label="Multiline mode" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="before" hide_if_default="true" label="Insert before" show_label="always" show_if="replaceMode:before" />,
         <prop name="after" hide_if_default="true" label="Insert after" show_label="always" show_if="replaceMode:after" />,
         <prop name="leftValue" hide_if_default="true" label="From" show_label="always" show_if="replaceMode:between" />,
         <prop name="rightValue" hide_if_default="true" label="To" show_label="always" show_if="replaceMode:between" />,
         <prop name="newValue" hide_if_default="true" label="New value" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="42" />
         -> 
         <prop name="Save" is_variable="true" />,
         <prop name="limit" hide_if_default="true" label="Limit" show_label="always" priority="43" />
      `,
      "group":"network"
   },
   "replaceresponsecontent":{  
      "name":"Replace response content",
      "description":"Replace the contents of the server response to a browser request",
      "template":`
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="contentFilters" hide_if_default="true" label="Content filters" show_label="always" />,
         <prop name="replaceMode" label="Replace mode" show_label="always" />,
         <prop name="exact" hide_if_default="true" label="Value" show_label="always" show_if="replaceMode:exact" />,
         <prop name="replaceAllExact" hide_if_default="true" label="Replace all" show_label="always" show_if="replaceMode:exact" priority="40" />,
         <prop name="regexp" hide_if_default="true" label="Regular expression" show_label="always" show_if="replaceMode:regexp" />,
         <prop name="ignoreСase" hide_if_default="true" label="Ignore case" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="globalSearch" hide_if_default="true" label="Global search" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="multiline" hide_if_default="true" label="Multiline mode" show_label="always" show_if="replaceMode:regexp" priority="41" />,
         <prop name="before" hide_if_default="true" label="Insert before" show_label="always" show_if="replaceMode:before" />,
         <prop name="after" hide_if_default="true" label="Insert after" show_label="always" show_if="replaceMode:after" />,
         <prop name="leftValue" hide_if_default="true" label="From" show_label="always" show_if="replaceMode:between" />,
         <prop name="rightValue" hide_if_default="true" label="To" show_label="always" show_if="replaceMode:between" />,
         <prop name="newValue" hide_if_default="true" label="New value" show_label="always" />,
         <prop name="methods" hide_if_default="true" label="Request type" show_label="always" priority="42" />
         -> 
         <prop name="Save" is_variable="true" />,
         <prop name="limit" hide_if_default="true" label="Limit" show_label="always" priority="43" />
      `,
      "group":"network"
   },
   "disablerules":{  
      "name":"Stop replacement",
      "description":"Stop the replacement or filtering function by its ID",
      "template":`<prop name="ids" />`,
      "group":"network"
   },
   "getrulestats":{  
      "name":"Get replacement stats",
      "description":"Get statistics on the execution of a replacement or filtering function by its ID",
      "template":`
         <prop name="id" />
         -> 
         <prop name="SaveExecutionCount" hide_if_default="true" label="Executions" show_label="always" is_variable="true" priority="30" />,
         <prop name="SaveIsActive" hide_if_default="true" label="Active" show_label="always" is_variable="true" priority="31" />,
         <prop name="SaveAllIds" hide_if_default="true" label="All IDs" show_label="always" is_variable="true" priority="32" />,
         <prop name="SaveActiveIds" hide_if_default="true" label="Active IDs" show_label="always" is_variable="true" priority="33" />
      `,
      "group":"network"
   },
   "waitfullload":{  
      "name":"Wait Full Page Load",
      "description":"Wait for full page load",
      "template": `<prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />`,
      "group":"waiters"
   },
   "waitload":{  
      "name":"Wait Url Loaded",
      "description":"Wait until browser will load url",
      "template": `
         <prop name="urlFilters" hide_if_default="true" label="URL filters" show_label="always" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":"waiters"
   },
   "waiturl":{  
      "name":"Wait Address Bar",
      "description":"Wait address bar will contain url",
      "template": `
         <prop name="Wait" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":"waiters"
   },
   "waitcontent":{  
      "name":"Wait Text",
      "description":"Wait until specific text will be present on page",
      "template": `
         <prop name="Wait" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":"waiters"
   },
   "waitcss":{  
      "name":"Wait Css",
      "description":"Wait until specific css selector will return non empty result",
      "template": `
         <prop name="Wait" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":"waiters"
   },
   "waitfiledownload":{  
      "name":"Wait File Download",
      "description":"Wait file will download",
      "template": `
         <prop name="Save" is_variable="true" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "suggestion":{  
         "en":"get download file path",
         "ru":"получить путь загруженного файла"
      },
      "group":"waiters"
   },
   "sleep":{  
      "name":"Sleep",
      "description":"Sleep for a specific time",
      "template": `
         <prop name="sleepfrom" show_if="sleeprandom:checked" /> - <prop name="sleepto" show_if="sleeprandom:checked" />
         <prop name="sleepfromto" show_if="sleeprandom:unchecked" />
      `,
      "suggestion":{  
         "en":"wait, idle",
         "ru":"ждать, бездействие"
      },
      "group":"waiters"
   },
   "httpclientproxy":{  
      "name":"HTTP-Client Proxy",
      "description":"Set proxy for http client",
      "template": `
         <prop name="ProxyText" />,
         <prop name="ProxyType" show_label="always" label="Proxy type" hide_if_default="true" priority="20" />,
         <prop name="ProxyLogin" show_label="always" label="Login" hide_if_default="true" priority="30" />,
         <prop name="ProxyPassword" show_label="always" label="Password" hide_if_default="true" priority="30" />
      `,
      "group":"httpclient"
   },
   "httpclientreset":{  
      "name":"HTTP-Client Reset",
      "description":"Reset http client",
      "template": "",
      "group":"httpclient"
   },
   "httpclientget":{  
      "name":"Get",
      "description":"Make GET request",
      "template": `
         <prop name="Value" />,
         <prop name="Headers" show_label="always" label="Headers" hide_if_default="true" priority="30" />,
         <prop name="Check" show_label="always" label="Redirects" hide_if_default="true" priority="40" />,
         <prop name="Method" show_label="always" label="Method" hide_if_default="true" priority="50" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="45" />
      `,
      "group":"httpclient"
   },
   "httpclientpost":{  
      "name":"Post",
      "description":"Make POST request",
      "template": `
         <prop name="Value" />,
         <prop name="PostDataRaw" show_label="always" label="Data" hide_if_default="true" priority="20" show_if="Check2:unchecked" />,
         <prop name="ContentTypeRaw" show_label="always" label="Content type" hide_if_default="true" priority="25" show_if="Check2:unchecked" />,
         <prop name="PostDataArray" show_label="always" label="Data" hide_if_default="true" priority="20" show_if="Check2:checked" />,
         <prop name="ContentType" show_label="always" label="Content type" hide_if_default="true" priority="25" show_if="Check2:checked" />,
         <prop name="Headers" show_label="always" label="Headers" hide_if_default="true" priority="30" />,
         <prop name="Check" show_label="always" label="Redirects" hide_if_default="true" priority="40" />,
         <prop name="Method" show_label="always" label="Method" hide_if_default="true" priority="50" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="45" />,
         <prop name="Encoding" show_label="always" label="Encoding" hide_if_default="true" priority="55" />
      `,
      "group":"httpclient"
   },
   "httpclientdownload":{  
      "name":"Download",
      "description":"Download to file",
      "template": `
         <prop name="Value" />
         -> <prop name="File" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="45" />
      `,
      "group":"httpclient"
   },
   "httpclienturl":{  
      "name":"Current Url",
      "description":"Get http client current url",
      "template": `<prop name="Save" is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientcontent":{  
      "name":"Content",
      "description":"Get http client request result",
      "template": `
         <prop name="Save" is_variable="true" />,
         <prop name="Encoding" show_label="always" label="Encoding" hide_if_default="true" priority="30" />
      `,
      "group":"httpclient"
   },
   "httpclientstatus":{  
      "name":"Status",
      "description":"Get http client request status",
      "template": `<prop name="Save" is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientgetheader":{  
      "name":"Get Header",
      "description":"Get http client header",
      "template": `<prop name="Value" /> -> <prop name="Save" is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientsetheader":{  
      "name":"HTTP-Client Set Header",
      "description":"Set http client header",
      "template": `<prop name="Value" /> -> <prop name="Name" />`,
      "group":"httpclient"
   },
   "httpclientclearheader":{  
      "name":"Clear Headers",
      "description":"Clear http client request headers",
      "template": "",
      "group":"httpclient"
   },
   "httpclientgetcookiesforurl":{  
      "name":"Get Cookies For Url",
      "description":"Get cookies for url",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "group":"httpclient"
   },
   "httpclientsavecookies":{  
      "name":"HTTP-Client Save Cookies",
      "description":"Save all cookies to variable",
      "template": `<prop name="Save"  is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientrestorecookies":{  
      "name":"HTTP-Client Restore Cookies",
      "description":"Restore cookies, which is saved with Save Cookies command",
      "template": `<prop name="Value" />`,
      "group":"httpclient"
   },
   "httpclientfailonerror":{  
      "name":"Set Fail On Error",
      "description":"Fail if error during http request",
      "template": `<prop name="SetFailed" />`,
      "group":"httpclient"
   },
   "httpclientiserror":{  
      "name":"Is Error",
      "description":"Check if error",
      "template": `<prop name="Save" is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientgeterrorstring":{  
      "name":"Get Error String",
      "description":"Get last error string",
      "template": `<prop name="Save" is_variable="true" />`,
      "group":"httpclient"
   },
   "httpclientxpathxml":{  
      "name":"Xpath Get Xml",
      "description":"Execute xpath query and get result xml",
      "template": `
         <prop name="Value" /> -> <prop name="Save" />,
         <prop name="Check" show_label="always" label="Fail" hide_if_default="true" priority="60" />
      `,
      "group":"httpclient"
   },
   "httpclientxpathxmllist":{  
      "name":"Xpath Get Xml List",
      "description":"Execute xpath query and get result xml list",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "group":"httpclient"
   },
   "httpclientxpathtext":{  
      "name":"Xpath Get Text",
      "description":"Execute xpath query and get result text",
      "template": `<prop name="Value" /> -> <prop name="Save" />,
      <prop name="Check" show_label="always" label="Fail" hide_if_default="true" priority="60" />`,
      "group":"httpclient"
   },
   "httpclientxpathtextlist":{  
      "name":"Xpath Get Text List",
      "description":"Execute xpath query and get result text list",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "group":"httpclient"
   },
   "httpclientxpathcount":{  
      "name":"Xpath Get Count",
      "description":"Execute xpath query and get result count",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "group":"httpclient"
   },
   "httpclientxpathexists":{  
      "name":"Xpath Get Exists",
      "description":"Execute xpath query and check if exists",
      "template": `<prop name="Value" /> -> <prop name="Save" />`,
      "group":"httpclient"
   },
   "click":{  
      "name":"Click",
      "class":"browser",
      "description":"Click",
      "template": `
         <prop name="ClickX" label="X" show_label="always" />,
         <prop name="ClickY" label="Y" show_label="always" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":""
   },
   "move":{  
      "name":"Move",
      "class":"browser",
      "description":"Move",
      "template": `
         <prop name="MoveX" label="X" show_label="always" />,
         <prop name="MoveY" label="Y" show_label="always" />
      `,
      "group":""
   },
   "drag":{  
      "name":"Drag",
      "class":"browser",
      "description":"Drag",
      "template": `<prop name="X" show_label="always" />, <prop name="Y" show_label="always" />`,
      "group":""
   },
   "drop":{  
      "name":"Drop",
      "class":"browser",
      "description":"Drop",
      "template": `<prop name="X" show_label="always" />, <prop name="Y" show_label="always" />`,
      "group":""
   },
   "dragelement":{  
      "name":"Drag On Element",
      "class":"browser",
      "description":"Drag On Element",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "dropelement":{  
      "name":"Drop On Element",
      "class":"browser",
      "description":"Drop On Element",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "moveandclick":{  
      "name":"Move And Click",
      "class":"browser",
      "description":"Move And Click",
      "template": `
         <prop name="X" show_label="always" />,
         <prop name="Y" show_label="always" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="Check2" show_label="always" hide_if_default="true" label="Ctrl" priority="50" />,
         <prop name="Select" show_label="always" hide_if_default="true" label="Click type" priority="70" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Disable emulation" priority="80" />
      `,
      "group":""
   },
   "loopelement":{  
      "name":"Start Loop",
      "class":"browser",
      "description":"Start Loop",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />
      `,
      "group":""
   },
   "waitelement":{  
      "name":"Wait While Element Exists",
      "class":"browser",
      "description":"Wait While Element Exists",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Visibility" priority="30" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "xml":{  
      "name":"Get Element Content",
      "class":"browser",
      "description":"Get Element Content",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="SaveXml" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "linkurl":{  
      "name":"Get link URL",
      "class":"browser",
      "description":"Get link URL",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="LinkURL" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "text":{  
      "name":"Get Element Text",
      "class":"browser",
      "description":"Get Element Text",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="SaveText" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "script":{  
      "name":"Execute Javascript On Element (deprecated)",
      "class":"browser",
      "description":"Execute Javascript On Element",
      "template": `<prop name="ScriptValue" /> -> <prop name="PATH" />`,
      "group":""
   },
   "browserscript":{  
      "name":"Execute Javascript On Element",
      "class":"browser",
      "description":"Execute Javascript On Element",
      "template": `
         <prop name="PATH" />,
         <prop name="Code" show_label="always" label="Code" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "clickelement":{  
      "name":"Click On Element",
      "class":"browser",
      "description":"Click On Element",
      "template": `
         <prop name="PATH" show_label="never" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Disable emulation" priority="80" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "moveelement":{  
      "name":"Move On Element",
      "class":"browser",
      "description":"Move On Element",
      "template": `
         <prop name="PATH" show_label="never" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "moveandclickelement":{  
      "name":"Move And Click On Element",
      "class":"browser",
      "description":"Move And Click On Element",
      "template": `
         <prop name="PATH" show_label="never" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Check2" show_label="always" hide_if_default="true" label="Ctrl" priority="50" />,
         <prop name="Select" show_label="always" hide_if_default="true" label="Click type" priority="70" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Disable emulation" priority="80" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "clear":{  
      "name":"Clear Edit",
      "class":"browser",
      "description":"Clear Edit",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "typeelement":{  
      "name":"Type Text",
      "class":"browser",
      "description":"Type Text",
      "template": `
         <prop name="TypeData" />
         -> 
         <prop name="PATH" />,
         <prop name="use-waiter" show_label="always" hide_if_default="true" label="Wait page" priority="30" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="TypeInterval" hide_if_default="true" show_label="auto" label="Interval" priority="80" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Disable emulation" priority="80" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "exist":{  
      "name":"Is Element Exists",
      "class":"browser",
      "description":"Is Element Exists",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="Save" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Visibility" priority="30" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "style":{  
      "name":"Get Element Style",
      "class":"browser",
      "description":"Get Element Style",
      "template": `
         <prop name="PATH" /> ,
         <prop name="Value" show_label="always" label="Style" />
         -> 
         <prop name="Save" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "check":{  
      "name":"Set Checkbox",
      "class":"browser",
      "description":"Set Checkbox",
      "template": `<prop name="PATH" />`,
      "group":""
   },
   "focus":{  
      "name":"Scroll To Element",
      "class":"browser",
      "description":"Scroll To Element",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Check" show_label="always" hide_if_default="true" label="Emulation" priority="80" />
      `,
      "group":""
   },
   "set":{  
      "name":"Set Combobox Value",
      "class":"browser",
      "description":"Set Combobox Value",
      "template": `
         <prop name="Value" /> 
         -> 
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "set_integer":{  
      "name":"Set Combobox Index",
      "class":"browser",
      "description":"Set Combobox Index",
      "template": `
         <prop name="Value" /> 
         -> 
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />`,
      "group":""
   },
   "set_random":{  
      "name":"Set Combobox To Random",
      "class":"browser",
      "description":"Set Combobox To Random",
      "template": `
         <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "attr":{  
      "name":"Get Element Attribute",
      "class":"browser",
      "description":"Get Element Attribute",
      "template": `
         <prop name="PATH" />,
         <prop name="Value" show_label="always" label="Attribute" />
         -> 
         <prop name="Save" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "set_attr":{  
      "name":"Set Element Attribute",
      "class":"browser",
      "description":"Set Element Attribute",
      "template": `
         <prop name="Name" show_label="always" label="Name" />,
         <prop name="Value" show_label="always" label="Value" /> 
         -> <prop name="PATH" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "captcha":{  
      "name":"Solve Captcha",
      "class":"browser",
      "description":"Solve Captcha",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="Save" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="Method" show_label="always" label="Method" priority="20" />,
         <prop name="Antigate" show_label="always" label="Key" hide_if_default="true" priority="30" max_size="11" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Server" show_label="always" label="Server" hide_if_default="true" priority="80" />
      `,
      "group":""
   },
   "screenshot":{  
      "name":"Screenshot",
      "class":"browser",
      "description":"Screenshot",
      "template": `
         <prop name="PATH" /> 
         -> 
         <prop name="Save" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />
      `,
      "group":""
   },
   "coordinates":{  
      "name":"Get Coordinates",
      "class":"browser",
      "description":"Get Coordinates",
      "template": `
         <prop name="PATH" />
         ->
         <prop name="AbsoluteX" is_variable="true" priority="50" label="X" show_label="always" />,
         <prop name="AbsoluteY" is_variable="true" priority="50" label="Y" show_label="always" />,
         <prop name="Width" is_variable="true" label="Width" show_label="always" hide_if_default="true" />,
         <prop name="Height" is_variable="true" label="Height" show_label="always" hide_if_default="true" />,
         <prop name="use-timeout" show_label="always" hide_if_default="true" label="Timeout" priority="40" />,
         <prop name="checkbox-wait-element" show_label="always" hide_if_default="true" label="Wait element" priority="45" />,
         <prop name="checkbox-fail-action" show_label="always" hide_if_default="true" label="Fail" priority="50" />,
         <prop name="Scroll" show_label="auto" label="Scroll" hide_if_default="true" priority="90" />,
         <prop name="Threshold" show_label="auto" label="Threshold" hide_if_default="true" priority="95" />
      `,
      "group":""
   },
   "length":{  
      "name":"Get Element Count",
      "class":"browser",
      "description":"Get Element Count",
      "template": `<prop name="PATH" /> -> <prop name="Save" />`,
      "group":""
   }
}

_G = {
   "ai": {icon:  "../icons/ai.png", info: "Generate code from user prompt."},
   "browser": {icon:  "../icons/browser.png", info: "All actions to work with browser, which do not require a specific element for use. For example, load the url, set proxy, make a screenshot, etc. To click on an element or enter text in a specific field, click on this item and select an action from the menu."},
   "logic": {icon:  "../icons/logic.png", info: "Actions, which defines script logic: loops, conditions, variable declarations."},
   "tools": {icon:  "../icons/tools.png", info: "Useful tools to work with strings and execute code."},
   "network": {icon:  "../icons/network.png", info: "All actions to interact with browser network requests. Deny request to certain urls, set user agent and other headers, access to cache."},
   "waiters": {icon:  "../icons/waiters.png", info: "Wait for certain events or certain time."},
   "email": {icon:  "../icons/email.png", info: "Receive email and search in mailbox."},
   "httpclient": {icon:  "../icons/httpclient.png", info: "HTTP client, very fast alternative to browser."},
   "manual": {icon:  "../icons/manual.png", info: "Running browser is very resource-intensive task. This module can create and destroy browser during thread lifetime and thereby save some memory and processor time."}
}

_AL = 
{
   /* Extended info for actions */

   "Cursor X": {"ru": "Курсор X"},
   "Cursor Y": {"ru": "Курсор Y"},
   "Scroll X": {"ru": "Скролл X"},
   "Scroll Y": {"ru": "Скролл Y"},
   "Width": {"ru": "Ширина"},
   "Height": {"ru": "Высота"},
   "Type": {"ru": "Тип"},
   "Timezone": {"ru": "Часовой пояс"},
   "Geolocation": {"ru": "Месторасположение"},
   "Webrtc ip": {"ru": "Webrtc ip"},
   "Language": {"ru": "Язык"},
   "External ip": {"ru": "Внешний ip"},
   "Ip info": {"ru": "ip инфо"},
   "ip-api key": {"ru": "Ключ ip-api"},
   "Key": {"ru": "Ключ"},
   "Server": {"ru": "Сервер"},
   "Method": {"ru": "Метод"},
   "Score": {"ru": "Рейтинг"},
   "Delay": {"ru": "Задержка"},
   "Timeout type": {"ru": "Тип", "en": "Type"},
   "Duration": {"ru": "Продолжительность"},
   "Components": {"ru": "Компоненты"},
   "Canvas noise": {"ru": "Canvas шум"},
   "Webgl noise": {"ru": "Webgl шум"},
   "Audio noise": {"ru": "Audio шум"},
   "Extensions": {"ru": "Расширения"},
   "Profile": {"ru": "Профиль"},
   "Load fp": {"ru": "Загружать fp"},
   "Load proxy": {"ru": "Загружать прокси"},
   "Version": {"ru": "Версия"},
   "Architecture": {"ru": "Архитектура"},
   "Speed": {"ru": "Скорость"},
   "Gravity": {"ru": "Притяжение"},
   "Deviation": {"ru": "Отклонение"},
   "Selector": {"ru": "Селектор"},
   "Wait page": {"ru": "Ждать страницу"},
   "Wait element": {"ru": "Ждать элемент"},
   "Click type": {"ru": "Тип клика"},
   "Disable emulation": {"ru": "Отключить эмуляцию"},
   "Proxy type": {"ru": "Тип", "en": "Type"},
   "Threshold": {"ru": "Порог"},
   "Tabs": {"ru": "Вкладки"},
   "Index": {"ru": "Индекс"},
   "Visibility": {"ru": "Видимость"},
   "Emulation": {"ru": "Эмуляция"},
   "Attribute": {"ru": "Аттрибут"},
   "Don't restart": {"ru": "Без перезапуска"},
   "Instantly": {"ru": "Мгновенно"},
   "Successes": {"ru": "Успехов"},
   "Threads": {"ru": "Потоков"},
   "Fails": {"ru": "Неудач"},
   "Redirects": {"ru": "Переадресации"},
   "Content type": {"ru": "Тип содержимого"},
   "Headers": {"ru": "Заголовки"},
   "Encoding": {"ru": "Кодировка"},
   "-LABEL-Delay": {"ru": "Отложено", "en": "Delay"},
   "-LABEL-Command line": {"ru": "Коммандная строка", "en": "Command line"},
   "-LABEL-Tunneling": {"ru": "Туннелирование", "en": "Tunneling"},
   
   "Get information about tabs": {"ru": "Получить информацию о вкладках"},
   "Previous Page": {"ru": "Предыдущая Страница"},
   "Clear Log": {"ru": "Очистить лог"},
   "Browser Settings": {"ru": "Настройки Браузера"},
   "Click extension button": {"ru": "Нажать кнопку расширения"},
   "Generate code from user prompt.": {"ru": "Сгенерировать код из запроса пользователя."},
   "All actions to work with browser, which do not require a specific element for use. For example, load the url, set proxy, make a screenshot, etc. To click on an element or enter text in a specific field, click on this item and select an action from the menu.": {"ru": "Все действия по работе с браузером, которые не требуют конкретного элемента для применения. Например, загрузить урл, установить прокси, сделать скриншот, и т. д. Чтобы кликнуть по элементу или ввести текст в конкретное поле, кликните по этому элементу и выберите действие из меню."},
   "Actions, which defines script logic: loops, conditions, variable declarations.": {"ru": "Действия, которые определяют логику скрипта: циклы, условия, объявления переменных."},
   "Useful tools to work with strings and execute code.": {"ru": "Полезные инструменты для работы со строками и выполнения кода."},
   "All actions to interact with browser network requests. Deny request to certain urls, set user agent and other headers, access to cache.": {"ru": "Все действия для взаимодействия с сетевыми запросами браузера. Отклонить запрос к определенным урл, установить юзер агент и другие заголовки, получить доступ к кешу."},
   "Wait for certain events or certain time.": {"ru": "Ждать определенных событий на странице или спать заданное время."},
   "Receive email and search in mailbox.": {"ru": "Получать электронную почту и искать письма в почтовом ящике."},
   "HTTP client, very fast alternative to browser.": {"ru": "HTTP-клиент, очень быстрая альтернатива браузеру."},
   "Running browser is very resource-intensive task. This module can create and destroy browser during thread lifetime and thereby save some memory and processor time.": {"ru": "Запуск браузера является очень ресурсоемкой задачей. Этот модуль может создавать и удалять браузер в течение работы потока и тем самым экономить часть памяти и процессорного времени."},

   "Get list of available browser versions": {"ru": "Получить список доступных версий браузера"},
   "Get current browser version": {"ru": "Получить текущую версию браузера"},

   "Screenshot": {"ru": "Скриншот"},
   "Thread number": {"ru": "Количество потоков"},
   "Success number": {"ru": "Успешных выполнений"},
   "Fail number": {"ru": "Неудачных выполнений"},
   "Mouse Settings": {"ru": "Настройки Мыши"},
   "Notifications": {"ru": "Уведомления"},
   "Restrict popups": {"ru": "Запретить всплывающие окна"},
   "Allow popups": {"ru": "Разрешить всплывающие окна"},
   "Restrict downloads": {"ru": "Запретить загрузку файлов"},
   "Allow downloads": {"ru": "Разрешить загрузку файлов"},
   "Load cookies from browser": {"ru": "Загрузить cookies из браузера"},
   "Load cookies from http client": {"ru": "Загрузить cookies из http клиента"},
   "Thread index": {"ru": "Номер потока"},
   "Close browser": {"ru": "Закрыть браузер"},
   "Open browser": {"ru": "Открыть браузер"},
   "Open/close browser": {"ru": "Открыть/закрыть браузер"},
   
   "Get Coordinates" : {"ru": "Получить координаты"},
   "Drag" : {"ru": "Начать Перетаскивание"},
   "Drop" : {"ru": "Закончить Перетаскивание"},
   "Drag On Element" : {"ru": "Начать Перетаскивание На Элементе"},
   "Drop On Element" : {"ru": "Закончить Перетаскивание На Элементе"},
   "Add Tab" : {"ru": "Добавить вкладку"},
   "Close Tab" : {"ru": "Закрыть вкладку"},
   "Select Tab" : {"ru": "Переключиться на вкладку"},

   "Load " : {"ru": "Загрузить "},
   "Wait while element ": {"ru": "Ждать пока элемент "},
   " appear on page": {"ru": " появится на странице"},
   "HTTP-Client Proxy": {"ru": "HTTP-Клиент Прокси"},
   "HTTP-Client Reset": {"ru": "HTTP-Клиент Сброс"},
   "HTTP-Client Set Header": {"ru": "HTTP-Клиент Установить Заголовок"},
   "HTTP-Client Save Cookies": {"ru": "HTTP-Клиент Сохранить cookies"},
   "HTTP-Client Restore Cookies": {"ru": "HTTP-Клиент Загрузить cookies"},
   "Label": {"ru": "Метка"},
   "Set label": {"ru": "Установить метку"},
   "Move to label": {"ru": "Перейти к метке"},

   "Click" : {"ru": "Кликнуть"},
   "Move" : {"ru": "Двигать Мышь"},
   "Move And Click" : {"ru": "Двигать Мышь И Кликнуть"},
   "Start Loop" : {"ru": "Начать Цикл"},
   "Wait While Element Exists" : {"ru": "Ждать Появления Элемента"},
   "Get Element Content" : {"ru": "Получить Код Элемента"},
   "Get Element Text" : {"ru": "Получить Текст"},
   "Execute Javascript On Element" : {"ru": "Выполнить Javascript На Элементе"},
   "Execute Javascript On Element (deprecated)" : {"ru": "Выполнить Javascript На Элементе (устаревшее)"},
   "Click On Element" : {"ru": "Кликнуть На Элемент"},
   "Move On Element" : {"ru": "Двигать Мышь Над Элементом"},
   "Move And Click On Element" : {"ru": "Двигать Мышь И Кликнуть На Элемент"},
   "Clear Edit" : {"ru": "Очистить Поле"},
   "Type Text" : {"ru": "Ввод текста"},
   "Is Element Exists" : {"ru": "Проверить Существование"},
   "Get Element Style" : {"ru": "Получить Стиль Элемента"},
   "Set Checkbox" : {"ru": "Установить Чекбокс"},
   "Scroll To Element" : {"ru": "Прокрутка К Элементу"},
   "Set Combobox Value" : {"ru": "Установить Значение Комбобокса"},
   "Set Combobox Index" : {"ru": "Установить Индекс Комбобокса"},
   "Set Combobox To Random" : {"ru": "Выбрать Случайный Элемент Из Комбобокса"},
   "Get Element Attribute" : {"ru": "Получить Атрибут Элемента"},
   "Set Element Attribute" : {"ru": "Установить Атрибут Элемента"},
   "Get Element Count" : {"ru": "Получить Количество Элементов"},

   "Else" : {"ru": "Else"},
   "Initialize" : {"ru": "Инициализация"},
   "Load" : {"ru": "Загрузить"},
   "Current Url" : {"ru": "Текущий Url"},
   "Get resolution and cursor position" : {"ru": "Получить разрешение и положение курсора"},
   "Touch screen mode" : {"ru": "Режим сенсорного экрана"},
   
   "Page Html" : {"ru": "Код страницы"},
   "Type" : {"ru": "Ввод текста"},
   "Resize" : {"ru": "Разрешение"},
   "Proxy" : {"ru": "Прокси"},
   "Javascript" : {"ru": "Яваскрипт"},
   "Javascript (deprecated)" : {"ru": "Яваскрипт (устаревшее)"},
   "Execute On Every Page Load In Browser" :{"ru": "Выполнять при каждой загрузке страницы в браузере"},
   "Reset" : {"ru": "Сброс"},
   "Open File Result" : {"ru": "Диалог Открыть Файл"},
   "Start Drag File" : {"ru": "Начать Перетягивать Файл"},
   "Prompt Result": {"ru": "Окно \"prompt\""},
   "Http Auth": {"ru": "HTTP Аутентификация"},
   "Scroll" : {"ru": "Прокрутка"},
   "Render" : {"ru": "Скриншот"},
   "Solve Captcha" : {"ru": "Решить Капчу"},
   "Captcha Failed": {"ru": "Решено Неверно"},
   "Solve captcha with clicks": {"ru": "Решить капчу кликами"},
   "Timeout": {"ru": "Таймаут"},

   "If" : {"ru": "If"},
   "Get Function Parameter" : {"ru": "Получить Параметр Функции"},
   "While" : {"ru": "While"},
   "For" : {"ru": "For"},
   "Break" : {"ru": "Break"},
   "Success" : {"ru": "Success"},
   "Fail" : {"ru": "Fail"},
   "End Script": {"ru": "Прервать Скрипт"},
   "Ignore Errors": {"ru": "Игнорировать Ошибки"},
   "Set Variable" : {"ru": "Установить переменную"},
   "Increase Variable": {"ru": "Увеличить переменную"},
   "Increase Global Variable": {"ru": "Увеличить глобальную переменную"},
   "Call Function" : {"ru": "Вызов функции"},
   "Call function in several threads" : {"ru": "Вызов функции в несколько потоков"},
   "Log" : {"ru": "Лог"},
   "Result" : {"ru": "Результат"},
   "Execute code" : {"ru": "Выполнить код"},
   "Set Global Variable" : {"ru": "Установить глобальную переменную"},
   "Get Global Variable" : {"ru": "Читать глобальную переменную"},
   "Parse Line (deprecated)" : {"ru": "Парсить строку (устаревшее)"},
   "Random Number": {"ru": "Случайное Число"},

   "Set Header (deprecated)" : {"ru": "Установить заголовок (устаревшее)"},
   "Set HTTP Headers, like user agent, accept language, etc" : {"ru": "Установите заголовки HTTP, такие user agent, accept language и т. д."},
   "Get Cookies For Url" : {"ru": "Получить cookies для url"},
   "Save Cookies" : {"ru": "Сохранить cookies"},
   "Save all cookies to variable" : {"ru": "Сохраните все cookies в переменную"},
   "Save cookies to variable" : {"ru": "Сохраните cookies в переменную"},
   "Domain": {"ru": "Домен"},
   "Restore Cookies" : {"ru": "Загрузить cookies"},
   "Append cookies" : {"ru": "Добавить cookies"},
   "Restore cookies, which is saved with «Save cookies» action" : {"ru": "Загрузить cookies, сохраненные с помощью действий «Сохранить cookies»"},
   "Allow cache" : {"ru": "Разрешить кэш"},
   "Allow save loaded url content to cache" : {"ru": "Разрешить сохранять загруженное содержимое URL в кеш"},
   "URL filters" : {"ru": "Фильтры URL"},
   "Deny cache" : {"ru": "Запретить кэш"},
   "Deny save loaded url content to cache" : {"ru": "Запретить сохранять загруженное содержимое URL в кеш"},
   "Allow request" : {"ru": "Разрешать запрос"},
   "Allow load url, which matching filters" : {"ru": "Разрешить загрузку URL, соответствующего фильтрам"},
   "Deny request" : {"ru": "Запретить запрос"},
   "Deny load url, which matching filters" : {"ru": "Запретить загрузку URL, соответствующего фильтрам"},
   "Clear Cached Data" : {"ru": "Очистить кэшированные данные"},
   "Clear loaded cache data" : {"ru": "Очистить загруженные данные кэша"},
   "Clear filters" : {"ru": "Очистить фильтры"},
   "Clear cache and request filters" : {"ru": "Очистить фильтры кэша и запросов"},
   "Get Status" : {"ru": "Получить статус запроса"},
   "Get url load status" : {"ru": "Получить статус загрузки URL"},
   "Is Loaded" : {"ru": "Был ли запрос"},
   "Check if url is loaded" : {"ru": "Проверить, загружен ли URL"},
   "Get last item from cache" : {"ru": "Получить последний элемент кэша"},
   "Wait item" : {"ru": "Ждать элемент"},
   "Get cached page" : {"ru": "Получить кэшированную страницу"},
   "Get all items from cache" : {"ru": "Получить все элементы кэша"},
   "Get list of cached pages" : {"ru": "Получить список кэшированных страниц"},
   "Redirect browser requests" : {"ru": "Перенаправить запросы браузера"},
   "Replace the browser request URL with another URL" : {"ru": "Заменить URL-адрес запроса браузера другим URL-адресом"},
   "Replace mode" : {"ru": "Режим замены"},
   "Replace all" : {"ru": "Заменить все"},
   "Regular expression" : {"ru": "Регулярное выражение"},
   "Ignore case" : {"ru": "Игнорировать регистр"},
   "Global search" : {"ru": "Глобальный поиск"},
   "Multiline mode" : {"ru": "Многострочный режим"},
   "Insert before" : {"ru": "Вставить до"},
   "Insert after" : {"ru": "Вставить после"},
   "New value" : {"ru": "Новое значение"},
   "Request type" : {"ru": "Тип запроса"},
   "Limit" : {"ru": "Лимит"},
   "Replace request content" : {"ru": "Заменить содержимое запроса"},
   "Replace the contents of the browser request" : {"ru": "Заменить содержимое запроса браузера"},
   "Content filters" : {"ru": "Фильтры контента"},
   "Replace response content" : {"ru": "Заменить содержимое ответа"},
   "Replace the contents of the server response to a browser request" : {"ru": "Заменить содержимое ответа сервера на запрос браузера"},
   "Stop replacement" : {"ru": "Остановить замену"},
   "Stop the replacement or filtering function by its ID" : {"ru": "Остановить функцию замены или фильтрации по её ID"},
   "Get replacement stats" : {"ru": "Получить статистику замены"},
   "Get statistics on the execution of a replacement or filtering function by its ID" : {"ru": "Получить статистику выполнения функции замены или фильтрации по её ID"},
   "Executions" : {"ru": "Выполнений"},
   "Active" : {"ru": "Активна"},
   "All IDs" : {"ru": "Все ID"},
   "Active IDs" : {"ru": "Активные ID"},
   "Wait Full Page Load": {"ru": "Ждать Полной Загрузки"},
   "Wait Url Loaded" : {"ru": "Ждать Загрузки Url"},
   "Wait Address Bar" : {"ru": "Ждать адреса браузера"},
   "Wait Text" : {"ru": "Ждать текст"},
   "Wait Css" : {"ru": "Ждать css"},
   "Wait File Download" : {"ru": "Ждать Загрузки Файла"},
   "Wait file will download" : {"ru": "Ждать, пока файл загрузится"},
   "Sleep" : {"ru": "Спать"},
   "Sleep for a specific time" : {"ru": "Спать определенное время"},

   "Get" : {"ru": "Get запрос"},
   "Post" : {"ru": "Post запрос"},
   "Download" : {"ru": "Скачать"},
   "Content" : {"ru": "Содержание ответа"},
   "Status" : {"ru": "Статус ответа"},
   "Get Header" : {"ru": "Получить заголовок"},
   "Clear Headers" : {"ru": "Очистить заголовки"},
   "Set Fail On Error" : {"ru": "Завершать работу после ошибки"},
   "Is Error" : {"ru": "Была ли ошибка"},
   "Get Error String" : {"ru": "Получить текст ошибки"},
   "Xpath Get Xml" : {"ru": "Xpath получить xml"},
   "Xpath Get Xml List" : {"ru": "Xpath получить каждый xml"},
   "Xpath Get Text" : {"ru": "Xpath получить текст"},
   "Xpath Get Text List" : {"ru": "Xpath получить каждый текст"},
   "Xpath Get Count" : {"ru": "Xpath получить количество элементов"},
   "Xpath Get Exists" : {"ru": "Xpath проверить существование"},
   "Function" : {"ru": "Функция"},
   "Get link URL" : {"ru": "Получить адрес ссылки"},
   
   "Back" : {"ru": "Назад"},
   "Action interface \"" : {"ru": "Интерфейс действия \""},
   "The module containing " : {"ru": "Модуль, содержащий действие "},
   "\" is missing or damaged." : {"ru": "\" отсутствует или поврежден."},
   " action is not installed, disabled, or damaged" : {"ru": ", не установлен, отключен или поврежден"},
   "The data of this action is corrupted or missing" : {"ru": "Данные данного действия повреждены или отсутствуют"},

   "Not" : {"ru": "Не"},
   "Empty" : {"ru": "Пустой"},
   "Starts with" : {"ru": "Начинается с"},
   "Ends with" : {"ru": "Заканчивается на"},
   "Contains" : {"ru": "Содержит"},
   "Matches mask" : {"ru": "Соответствует маске"},
   "Matches regex" : {"ru": "Соответствует regex"},
   "Equals" : {"ru": "Равно"},
   "Contained in list" : {"ru": "Содержится в списке"},
   "Greater" : {"ru": "Больше"},
   "Less" : {"ru": "Меньше"},
   "Greater or equal" : {"ru": "Больше или равно"},
   "Less or equal" : {"ru": "Меньше или равно"},
   "True" : {"ru": "Правда"},
   "False" : {"ru": "Ложь"},
   "Later than" : {"ru": "Позже чем"},
   "Earlier than" : {"ru": "Раньше чем"},
   "Same year" : {"ru": "В том же году"},
   "Same month" : {"ru": "В том же месяце"},
   "Same day" : {"ru": "В тот же день"},
   "Same hour" : {"ru": "В тот же час"},

   "Public ipv4" : {"ru": "Публичный ipv4"},
   "Public ipv6" : {"ru": "Публичный ipv6"},
   "Private ipv4" : {"ru": "Приватный ipv4"},
   "Private ipv6" : {"ru": "Приватный ipv6"},
   "Detect IPv4" : {"ru": "Определять ipv4"},
   "IPv4 method" : {"ru": "IPv4 метод"},
   "IPv4 param" : {"ru": "IPv4 параметр"},
   "Detect IPv6" : {"ru": "Определять ipv6"},
   "IPv6 method" : {"ru": "IPv6 метод"},
   "IPv6 param" : {"ru": "IPv4 параметр"},
   "DNS mode": {"ru": "Режим DNS"},

}

 function prepare_styles(dat, task_name)
 {
   try
   {
      if(task_name == "Else")
       return /*"tooltitle-red"*/ ""

     if(dat === null)
         return ""

     if(_A[dat["s"]]["template"].indexOf("~>")>=0)
      return "textitemtag"

     if(_A[dat["s"]]["template"].indexOf("<~")>=0)
      return "tooltitle-red"


     var Type = _A[dat["s"]]["class"]
     if(typeof(Type) == "undefined")
      return ""
     else if(Type == "browser")
      return /*"tooltitle-blue"*/ ""
     else
      return "tooltitle-red"

   }catch(e)
   {

   }
   return ""
 }

function prepare_folding(parentid, id, length)
{
   id = parseInt(id)
   if(id > 0)
   {
      var Task = FindTaskById(id)
      var dat = Task.dat()
      if(dat && dat["role"] == "slave") 
      {
         var master = FindTaskById(dat["master"])
         if(master && master.get("is_fold"))
         {
            return false
         }
      }
   }

   var Id = parseInt(parentid)
   if(Id == 0)
      return true

   var len = 0;



   while(true)
   {
      var Task = FindTaskById(Id)
      if(!Task)
         break

      if(len >= length)
         break;

      if(Task.get("is_fold"))
      {
         return false
      }

      var dat = Task.dat()
      if(dat && dat["role"] == "slave") 
      {
         var master = FindTaskById(dat["master"])
         if(master && master.get("is_fold"))
         {
            return false
         }
      }


      len++;

      var ParentId = parseInt(Task.get("parentid"))
      if(ParentId == 0)
         break
      
      Id = ParentId
   }
   return true
}

function prepare_margins(parentid, length, default_value, is_modern = false)
{
   var res = ""

   var width = 1;
   var color = "#E8E8E8"

   var Id = parseInt(parentid)

   if(Id == 0)
      return res

   var len = 0;

   var lines = []

   
   if(default_value == "compute")
   {

      while(true)
      {
         var Task = FindTaskById(Id)
         if(!Task)
            break

         if(len >= length)
            break;

         lines.splice(0, 0, Task.get("is_selected"));

         len++;

         var ParentId = parseInt(Task.get("parentid"))
         if(ParentId == 0)
            break
         
         Id = ParentId
      }
   }else if (default_value == "set")
   {
      len = length
      for(var i = 0;i<len;i++)
         lines.push(true);
   }else if (default_value == "clear")
   {
      len = length
      for(var i = 0;i<len;i++)
         lines.push(false);
   }

   var has_gradient = false

   if(len > 0)
      res += "background-image: linear-gradient(to right"

   for(var i = 0;i<len;i++)
   {
      if(is_modern || lines[i])
      {
         if(is_modern)
            color = lines[i] ? '#d0d0d0' : '#f0f0f0';
         if(i == 0)
         {
            res += `, ${color} ${width}px, rgba(0,0,0,0) ${width}px`
            has_gradient = true
         }else
         {
            res += `, rgba(0,0,0,0) ${20 * i}px, ${color} ${20 * i}px, ${color} ${20 * i + width}px, rgba(0,0,0,0) ${20 * i + width}px`
            has_gradient = true
         }
      }
   }


   if(len > 0)
      res += ");"

   if(!has_gradient)
   {
      res = ""
   }

   res += `--offset: ${20 * len}px;`

   return res

}


function prepare_group(dat, task_name, task_id)
{
   try{

      var State = ""


      if(task_name == "Else")
      {
         State = "if"
      }else
      {
         var group = ""
         
         if(dat === null)
            return ""

         State = dat["s"]

      }

      if(_A[State]["class"] && _A[State]["class"] == "browser")
      {
         group = "browser"
      }else
         group = _A[State]["group"] 
      

      if(group.length == 0)
         return ""

      var groupicon = _G["browser"]["icon"]
      if(_G[group])
      {
         groupicon = _G[group]["icon"]
      }

      return "<img class='toolgroup' src='" + groupicon + "' />"

   }catch(e){return ""}
}
 
 function prepare_title(dat, task_name, is_modern = false)
 {
   try
   {
     if(task_name == "Initialize")
       return tr("Initialize")
     if(task_name == "Else")
       return tr("Else")

     
     if(dat === null)
      return ""

     var pref = "" 
     if(_A[dat["s"]]["template"].indexOf("~>")>=0)
      pref = "<i class='fa fa-tag textitemtag' aria-hidden='true'></i> "
     if(_A[dat["s"]]["template"].indexOf("<~")>=0)
      pref = "<i class='fa fa-arrow-circle-right tooltitle-red' aria-hidden='true'></i> "
     
     return (is_modern ? "" : pref) + tr(_A[dat["s"]]["name"])
   }catch(e)
   {
   }
   return ""
 }

 function prepare_label_data(dat, task_name)
 {
   try
   {
     if(task_name == "Initialize")
       return ""
     if(task_name == "Else")
       return ""

     
     if(dat === null)
      return ""

     var Res = "" 
     if(dat["s"] == "goto")
     {
      Res = " data-is-label-from=\"true\" data-label-name=\"" + quoteattr(dat["d"][0]["data"]) + "\" "
     }else if(dat["s"] == "label")
     {
      Res = " data-is-label-to=\"true\" data-label-name=\"" + quoteattr(dat["d"][0]["data"]) + "\" "
     }
     return Res
     
   }catch(e)
   {
   }
   return ""
 }

 function prepare_label_data_json(dat, task_name)
 {
   try
   {
     if(task_name == "Initialize")
       return {}
     if(task_name == "Else")
       return {}

     
     if(dat === null)
      return {}

     var Res = {} 
     if(dat["s"] == "goto")
     {
      Res["data-is-label-from"] = "true"
      Res["data-label-name"] = dat["d"][0]["data"]
     }else if(dat["s"] == "label")
     {
      Res["data-is-label-to"] = "true"
      Res["data-label-name"] = dat["d"][0]["data"]
     }
     return Res
     
   }catch(e)
   {
   }
   return {}
 }

 function prepare_title_text(dat, task_name)
 {
   try
   {
     if(task_name == "Initialize")
       return tr("Initialize")
     if(task_name == "Else")
       return tr("Else")

     
     if(dat === null)
      return ""

     
     return tr(_A[dat["s"]]["name"])
   }catch(e)
   {
   }
   return ""
 }

 function prepare_title_tooltip(dat, task_name)
 {
   try
   {
     if(task_name == "Initialize")
       return tr("This is internal action, it is executed first on every thread start")
     
     
     if(dat === null)
      return ""

     
     return tr("Action") + " '" + prepare_title_text(dat,task_name) + "'. " + tr("Click to select. Drag to move it. Double click to edit and see description")
   }catch(e)
   {
   }
   return ""
 }

 function prepare_title_code(code, task_name)
 {
   try
   {
     if(task_name == "Initialize")
       return tr("Initialize")
     if(task_name == "Else")
       return tr("Else")

     var match = code.match("Dat:([^\*]+)")
     if(!match)
       return ""


     var dat = JSON.parse(b64_to_utf8(match[1]))



     var pref = "" 
     if(_A[dat["s"]]["template"].indexOf("~>")>=0)
      pref = "<i class='fa fa-tag textitemtag' aria-hidden='true'></i> "
     if(_A[dat["s"]]["template"].indexOf("<~")>=0)
      pref = "<i class='fa fa-arrow-circle-right tooltitle-red' aria-hidden='true'></i> "
     
     return pref + tr(_A[dat["s"]]["name"])
   }catch(e)
   {
   }
   return ""
 }

 function prepare_edit_body(dat, task_name)
 {
   try
   {
     if(dat === null)
      return ""

     if(!("v" in dat))
     {
         return ""
     }

     return task_name;

   }catch(e)
   {
     return e
   }
   return task_name
 }

 function prepare_description(dat, task_name)
 {
   if(task_name == "Initialize")
      return ""
   if(task_name == "Else")
      return ""

   return prepare_edit_body(dat, task_name).replace(/(?:\r\n|\r|\n)/g, '<br />');
 }

 function prepare_text(dat, symbols_limit = 50)
 {
   return BrowserAutomationStudio_GenerateActionText(dat, true, { symbols_limit });
 }

 function prepare_body(dat, task_name, options = {}) {
   try
   {
     if(task_name == "Initialize")
       return tr("Initialize")
     if(task_name == "Else")
       return tr("Else")

    if(dat === null)
      return tr("The data of this action is corrupted or missing")

     return BrowserAutomationStudio_GenerateActionText(dat, false, options);
   }catch(e)
   {
     console.error('Failed to generate action text:', e);
     return ""
   }
 }

 function generate_filter_template(data, logicMode)
 {
   let types = {
      Empty: tr("Empty"),
      Starts: tr("Starts with"),
      Ends: tr("Ends with"),
      Contains: tr("Contains"),
      Mask: tr("Matches mask"),
      Regexp: tr("Matches regex"),
      Equals: tr("Equals"),
      List: tr("Contained in list"),
      Greater: tr("Greater"),
      Less: tr("Less"),
      GreaterOrEqual: tr("Greater or equal"),
      LessOrEqual: tr("Less or equal"),
      True: tr("True"),
      False: tr("False"),
      GreaterThan: tr("Later than"),
      LessThan: tr("Earlier than"),
      SameYear: tr("Same year"),
      SameMonth: tr("Same month"),
      SameDay: tr("Same day"),
      SameHour: tr("Same hour")
   }

   return data.map(filterData => {
      let filterTemplate = ""

      if(filterData.field){
         filterTemplate += filterData.field
         filterTemplate += " "
      }

      if("match" in filterData && !filterData.match){
         filterTemplate += tr("Not")
         filterTemplate += " "
      }

      filterTemplate += types[filterData.type] || filterData.type

      filterTemplate = filterTemplate[0].toUpperCase() + filterTemplate.slice(1).toLowerCase()

      if(filterData.value && filterData.value.data){
         filterTemplate += " "
         filterTemplate += filterData.value.data.replace(/(?:\r\n|\r|\n)/g, " ")
      }

      return filterTemplate;
   }).join(logicMode === "and" ? " & " : " | ");
 }

 function BrowserAutomationStudio_GetPropData(data, id)
 {
    if(!data) return null
    let Path = data["p"]
    let Data = data["d"]
 
    switch(id)
    {
       case "checkbox-wait-element":
       {
          return { id, data: Path.we }
       }
       case "checkbox-fail-action":
       {
          return { id, data: Path.fa }
       }
       case "use-timeout":
       {
          return { id, data: +data.uti || 0 }
       }
       case "use-waiter":
       {
          return { id, data: data.uw === "1" }
       }
       case "CodeInfo":
       {
          return { id, data: data.ci ? data.ci : "" }
       }
       case "PATH":
       {
          return Path["is_image"]
             ? Data.find((item) => item.id === "ImageBase64")
             : { id, class: "string", data: Path["current"] === "none" ? "body" : Path[Path["current"]] }
       }
    }
 
    return Data.find((item) => item.id === id)
 }

function BrowserAutomationStudio_GenerateActionText(
   data,
   text_only,
   {
      show_all = false,
      hide_selector = false,
      important_only = false,
      symbols_limit = 50,
      properties_limit = 100,
      selector_replacement = null,
   } = {}
) {
   var State = data["s"]
   var Action = _A[State]

   if(typeof Action === "undefined")
      return tr("The module containing ") + State + tr(" action is not installed, disabled, or damaged")

   var Data = data["d"]
   var Path = data["p"]
   var Name = Action["name"]
   var Props = Action["props"]
   var Template = Action["template"]
   if(Template.length === 0)
      return tr(Name)

   Template = TemplateEngine.process(Template, Props, data, {
      showAll: show_all,
      textOnly: text_only,
      symbolsLimit: symbols_limit,
      importantOnly: important_only,
      propertiesLimit: properties_limit,
      hideSelector: hide_selector && !selector_replacement,
   })
   var Split = Template.split(/{{(.*?)}}/g)
   var IsEmpty = true
   var Names = []
   var Res = ""

   for(var i = 0, len = Split.length; i < len; i++)
   {
      var Item = Split[i]

      if(i % 2 === 0)
      {
         if(text_only)
         {
            Res += Item
         }else
         {
            if(TemplateEngine.replace(Item, true).length > 0)
               IsEmpty = false
            Res += _.escape(Item).replace("-&gt;", `<img class="arrowimg" draggable="false" src="icons/output.svg">`)
         }
         continue
      }

      var { maxSize } = Props.find((el) => el["name"] === Item) || { maxSize: symbols_limit }
      maxSize = maxSize == null ? symbols_limit : Math.max(0, maxSize)
      Names.push(Item)
      var Text = ""
      switch(Item)
      {
         case "checkbox-wait-element":
         {
            var Value = data.p.we
            Text = text_only ? Value : `<span>${Value}</span>`
            break
         }
         case "checkbox-fail-action":
         {
            var Value = data.p.fa
            Text = text_only ? Value : `<span>${Value}</span>`
            break
         }
         case "use-timeout":
         {
            var Value = +data.uti || 0
            Text = text_only ? Value : `<span>${Value}</span>`
            break
         }
         case "use-waiter":
         {
            var Value = data.uw === "1"
            Text = text_only ? Value : `<span>${Value}</span>`
            break
         }
         case "CodeInfo":
         {
            var Value = data.ci ? data.ci.replace(/(?:\r\n|\r|\n)/g, " ") : ""
            if(text_only)
            {
               Text = Value
            }else if(Value.length > 0)
            {
               Text = `<span>${TemplateEngine.escape(Value, symbols_limit, maxSize)}</span>`
            }
            break
         }
         case "PATH":
         {
            if(Path["is_image"])
            {
               if(!text_only)
               {
                  Text = `<img class="pathimg" draggable="false" src="data:image/png;base64,${Data.find((el) => el["id"] === "ImageBase64")["data"]}"/>`
               }
            }else if(hide_selector)
            {
               if(!text_only)
               {
                  Text = selector_replacement || ""
               }
            }else
            {
               var Current = Path["current"]
               var Value = Current === "none" ? "body" : Path[Current]
               if(text_only)
               {
                  Text = Value
               }else if(Value.length > 0)
               {
                  Text = `<span>${TemplateEngine.escape(Value, symbols_limit, maxSize)}</span>`
               }
            }
            break
         }
         default:
         {
            var El = Data.find((el) => el["id"] === Item)
            if(El)
            {
               if(El["type"] == "filter")
               {
                  
                  var LogicEll = Data.find((el) => el["id"] === `filter-logic-select-${Item}`)
                  var LogicMode = LogicEll ? LogicEll.data : "and"
                  var Value = generate_filter_template(El["data"], LogicMode)
                  if(text_only)
                  {
                     Text = Value
                  }else if(Value.length > 0)
                  {
                     Text = `<span>${TemplateEngine.escape(Value, symbols_limit, maxSize)}</span>`
                  }
               }else
               {
                  var Dat = El["data"].toString()
                  var Value = Dat.replace(/(?:\r\n|\r|\n)/g, " ")
                  if(text_only)
                  {
                     Text = Value
                  }else if(Value.length > 0)
                  {
                     var InsertData = TemplateEngine.escape(Value, symbols_limit, maxSize)
                     if(Item === "FunctionName")
                     {
                        Text = `<a href="#" class="movetofunction" data-target=${JSON.stringify(Dat)}>${InsertData}</a>`
                     }else
                     {
                        Text = `<span>${InsertData}</span>`
                     }
                  }
               }
            }
            break
         }
      }

      if(Text.length > 0)
      {
         if(!text_only)
         {
            IsEmpty = false
         }
         Res += Text
      }
   }

   if(text_only)
   {
      return Res
   }

   return IsEmpty ? tr(Name) : TemplateEngine.replace(Res, false, Names).trim()
}